はじめに
Pythonを使用してCloud Runを利用したい場合、公式のガイドではFlaskを使用しているので、それに従いデプロイするまでの環境をDockerで構築する。
概要
前提条件
GCPにプロジェクトが存在し、Cloud Runが使用できる状態になっている
docker-composeを使用
手順
docker-composeを使用してコンテナを作成する
google-cloud-sdkをインストールして設定する
FlaskアプリケーションをCloud Runにデプロイする
Docker環境構築
Dockerの設定ファイルとrequirements.txtを作成する。
その後、コンテナを作成し起動する。
Dockerfile
FROM python:3.10-slim
ENV PYTHONUNBUFFERED True
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
RUN pip install --no-cache-dir -r requirements.txt
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
docker-compose.yml
version: '3'
services:
flask:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
tty: true
requirements.txt
Flask==2.1.0
gunicorn==20.1.0
google-cloud-sdkの設定
起動したコンテナからコマンドを実行してgoogle-cloud-sdkの設定をする。
# sdkのダウンロード
apt-get update
apt-get install curl
cd /tmp
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-381.0.0-linux-x86_64.tar.gz
# sdkのインストール
tar -xvzf google-cloud-sdk-381.0.0-linux-x86_64.tar.gz -C /
cd /
./google-cloud-sdk/install.sh
gcloud auth login --no-launch-browser
gcloud projects list
gcloud config set project <your-project-id>
# 確認
gcloud config configurations list
FlaskアプリケーションをCloud Runにデプロイ
Dockerfileと同じ階層にmain.pyを作成してデプロイする。
main.py
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
name = os.environ.get("NAME", "World")
return "Hello {}!".format(name)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
# デプロイ
gcloud run deploy
表示されたURLにアクセスすると
Hello World!を確認できた