Cloud Runでpythonプロジェクトを試してみた
Cloud Runはコンテナ環境をサーバレスで運用するGCPのサービスだ。いわゆるAWSのFargateに近いサービスで、Dockerコンテナをフルマネージドな環境で運用できる素晴らしいサービスだ。
この記事執筆時点ではまだベータ版であるが、最近東京リージョンも使用可能になり十分に本番運用できる状況ではないだろうか。Fargateに比べるとまだ不十分な点はあるが、よりシンプルで扱いやすいのでCloud Runはおすすめだ。
Flaskでサンプルプロジェクトを作成
以下構成でPython FlaskでのRest APIプロジェクトを作成する。
-Dockerfile -docker-compose.yml -src -requirements.txt -run.py
Dockerfileは以下。
FROM python:3.7 RUN apt-get update && \ apt-get -y install python-dev RUN mkdir /app WORKDIR /app ADD src /app/ # pip install ADD src/requirements.txt /app/requirements.txt RUN pip install -r requirements.txt ENV PORT 8080 EXPOSE 8080 CMD ["python", "run.py"]
requirements.txtは以下。
flask
docker-compose.ymlは以下。
version: '3' services: web: build: . working_dir: /app volumes: - ./src:/app ports: - 8080:8080 stdin_open: true tty: true
run.pyは以下のようにする。
from flask import Flask, jsonify, request import json import os app = Flask(__name__) @app.route("/", methods=['GET']) def hello(): result = { "title": "test" } return jsonify(result) if __name__ == "__main__": app.run(host='0.0.0.0',port=8080,debug=True)
これポイントはlistenポートをデフォルトの8080にすることだ。他のポートでも良いがCloud Runのデフォルトポートは8080らしいので、特に理由がなければ8080でいく。一旦ローカルで起動して正常に動作しているか確認する。
docker-compose build docker-compose up -d
当たり前だが、http://localhost:8080にアクセスするとJsonが表示される。
Cloud Runへデプロイ
いつものようにGCPでCloud Run APIを有効にする。あとContainer Repositoryも有効にする必要があるか。とにかく「Cloud Run」と「Container Repository」のページを開ける状態にする。
今回はCLIで全てやるので以下でSDKをインストール済みを前提とする。(gcloudコマンドが使えるか)
Container Repositoryへpush
Dockerfileが存在するディレクトリで以下を実行すると、dockerイメージをビルドしてContainer Repositoryにプッシュされる。
gcloud builds submit --tag gcr.io/[プロジェクトID]/[リポジトリ名]
Cloud Runへ公開&更新
以下のコマンドでCloud Runにデプロイされ公開される。(gcloud betaコマンドに注意)
gcloud beta run deploy [Runサービス名] --image gcr.io/[プロジェクトID]/[リポジトリ名] --region asia-northeast1 --platform managed --allow-unauthenticated
optionは以下の設定で行う。以下のoptionなしでコマンド実行すると対話モードでも設定できる。
–region asia-northeast1 | 東京リージョン |
–platform managed | Cloud Run フルマネージド版 |
–allow-unauthenticated | 認証なし公開 |
これだけでフルマネージドな環境に公開される。更新デプロイする場合も上記の2つのコマンドで行うことができる。
今回は基本の部分であるCloud Runへのデプロイまで。
ディスカッション
コメント一覧
まだ、コメントがありません