Cloud Runでpythonプロジェクトを試してみた

2019-10-12

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へのデプロイまで。