Dockerfileを使用してCloudRunを作成する。
言語はPythonを使用、フレームワークはFlaskを使用します。
アプリ新規作成
VSCodeを使用して、新規アプリケーションを追加します。
公式ドキュメントはこちら
コマンドパレットを開く(Macの場合はCmd
+Shift
+P
)
Cloud Code: New Applicationを選択
Cloud Run applicationを選択
今回はFlaskを使用するので、Python (Flask): Cloud Runを選択
そうするとアプリケーション名とディレクトリの場所を入力・選択するウィンドウが表示されるので入力して作成
できあがったファイルはこんな感じ
とりあえず主要なファイルは以下の内容で作成されてました↓↓
app.py
"""
A sample Hello World server.
"""
import os
from flask import Flask, render_template
# pylint: disable=C0103
app = Flask(__name__)
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
message = "It's running!"
"""Get Cloud Run environment variables."""
service = os.environ.get('K_SERVICE', 'Unknown service')
revision = os.environ.get('K_REVISION', 'Unknown revision')
return render_template('index.html',
message=message,
Service=service,
Revision=revision)
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
requirements.txt
Flask==2.3.3
requests==2.31.0
debugpy # Required for debugging.
Dockerfile
# Python image to use.
FROM python:3.12-alpine
# Set the working directory to /app
WORKDIR /app
# copy the requirements file used for dependencies
COPY requirements.txt .
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Copy the rest of the working directory contents into the container at /app
COPY . .
# Run app.py when the container launches
ENTRYPOINT ["python", "app.py"]
READMEを読んでみます(README.mdファイルを右クリックでプレビューを開く)
そうすると↓のような画面が開きます
この中で「Run the locally with the Cloud Run Emulator」というところに、
「Click on the Cloud Code status bar and select ‘Run on Cloud Run Emulator’.」という記述があります。
再度「Cmd
+Shift
+P
」でコマンドパレットを開き「Run on Cloud Run Emulator」コマンドを実行します。
するとVSCode上に新しいタブが開いて以下が表示されます。
「Make sure all fields are correct to continue」が出てRunボタンを押下しても反応しないので、
設定を見直し
Auto Dependenciesをオフ(Cloud Codeが機能にするには必要みたい)
公式ドキュメントを参照
Google Cloud からログアウト
再度「Cmd
+Shift
+P
」でコマンドパレットを開き「Run on Cloud Run Emulator」コマンドを実行します。
こんな表示が出てきたのでYesを選択
ターミナルに以下の様に表示されます。
ここもYをタイプしてEnter
で、入れ直したけど結果変わらず
で、▼の隠されてる項目に気づきました…
エラーメッセージが表示されていることを確認
_が名称に使用できないので、-に変更
エラーも消えたのでRunボタン押下
諸々、質問されるのでYesで回答し、結局ログインしてないとダメっぽかったのでログインし直したところ
http://localhost:8080にブラウザからアクセスすると
無事、起動できたっぽいです。
Cloud Runにデプロイ
Cloud Buildを使用して実際にデプロイします。
ソースにcloudbuild.yamlを追加
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [
'build',
'-t',
'asia-northeast1-docker.pkg.dev/$_PROJECT_ID/cloud-run-source-deploy/$_SERVICE_NAME:latest',
'--cache-from',
'asia-northeast1-docker.pkg.dev/$_PROJECT_ID/cloud-run-source-deploy/$_SERVICE_NAME:latest',
'-f',
'Dockerfile',
'--build-arg',
'PORT=8080',
'.'
]
- name: 'gcr.io/cloud-builders/docker'
args: [
'push',
'asia-northeast1-docker.pkg.dev/$_PROJECT_ID/cloud-run-source-deploy/$_SERVICE_NAME:latest',
]
- name: 'gcr.io/cloud-builders/gcloud'
args: [
'run',
'deploy',
'--project',
'$_PROJECT_ID',
'$_SERVICE_NAME',
'--image',
'asia-northeast1-docker.pkg.dev/$_PROJECT_ID/cloud-run-source-deploy/$_SERVICE_NAME:latest',
'--region',
'asia-northeast1',
'--platform',
'managed',
'--port',
'8080',
'--allow-unauthenticated',
'--ingress',
'all',
]
images:
- 'asia-northeast1-docker.pkg.dev/$_PROJECT_ID/cloud-run-source-deploy/$_SERVICE_NAME:latest'
options:
logging: CLOUD_LOGGING_ONLY
Google Cloudのトリガの設定
トリガの設定等が不明な方はこちらも参考にしてください。
Cloud Runも無事にデプロイされたら、Cloud Runの画面上部のURLにアクセス
ローカルと同じ画面が表示されることが確認できました。
Flaskの説明
使用するFlaskの使い方のメモを記載していきます。(公式ドキュメントはこちら)
ルーティング
基本的には以下の書式
from flask import Flask
app = Flask(__name__)
@app.route("/")
def <メソッド名>():
return render_template('<テンプレート>.html', <渡したい変数名>=<渡したい値>)
「@app.route()」という記述でURLとメソッドを紐付けます。
(@〜をデコレータといいます)
「PythonでCloud Runを作成」への2件のフィードバック