😀

Artifact Registry からの Cloud Run へデプロイ

に公開

この記事では、簡単な Python の Web アプリケーションを作成し、Cloud Run を利用してデプロイする手順を、Google Cloud CLI (gcloud) を中心にご紹介します。わずか数ステップで、アプリケーションを公開できます。

1.はじめに:必要なファイル構成の作成

まずは、デプロイ対象となる Python アプリケーションのコードと依存関係を定義します。

構成

.
├── app
   └── main.py
   └── requirements.txt

main.py の作成

Flask という軽量なWebフレームワークを使用し、「Hello, World!」と返すシンプルなアプリケーションを作成します。

main.py
from flask import Flask

# Flask アプリケーションのインスタンスを作成
app = Flask(__name__)

# ルート('/')へのアクセスに対して実行される関数を定義
@app.route('/')
def hello():
    # レスポンスとして文字列を返す
    return 'Hello, World!'

# アプリケーションを起動
if __name__ == '__main__':
    app.run()

requirements.txt の作成

このアプリケーションが必要とするライブラリを定義します。

requirements.txt
flask

2. 環境変数の設定

デプロイプロセスで使用する Google Cloud (GCP) のプロジェクトIDやリージョンなどの情報を環境変数として設定します。これにより、コマンドの可読性が向上し、入力ミスを防げます。

# ご自身の GCP プロジェクト ID を設定してください
export PROJECT_ID='[YOUR PROJECT ID]'
# デプロイ先のリージョン (例: 東京)
export REGION='asia-northeast1'
# Artifact Registry のリポジトリ名
export REPOSITORY='quickstart-repos'
# ビルドする Docker イメージの名前
export IMAGE='helloworld_image'
# Cloud Run 上で作成されるサービス名
export SERVICE='helloworld'
# イメージのタグ (バージョン管理に使うことが多い)
export TAG='latest'

3. Docker イメージのビルドと Artifact Registry への登録

Cloud Run にデプロイするためには、アプリケーションを Docker コンテナイメージとしてパッケージングし、GCP のコンテナレジストリである Artifact Registry に保存する必要があります。

3-1. Artifact Registry リポジトリの作成

ビルドしたイメージを保存するためのリポジトリを作成します。

gcloud artifacts repositories create ${REPOSITORY} \
  --repository-format=docker \
  --location=${REGION} \
  --project=${PROJECT_ID}

3-2. Cloud Buildでのビルドとプッシュ

Cloud Build を使用して、コード(appディレクトリ内)から Docker イメージを自動で作成し、 Artifact Registry にプッシュします。ここでは、main.py と requirements.txt が存在するため、ビルドパック(Buildpacks)機能を利用して Dockerfile を記述せずにビルドを行います。

# --pack オプションが Buildpacks を利用し、自動でコンテナイメージを作成します。
gcloud builds submit  \
  --pack image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE}:${TAG}

Buildpacks とは?: アプリケーションの言語やフレームワークを自動で検出し、必要なランタイムや設定を加えてコンテナイメージを作成してくれるツールです。これにより、手動で Dockerfile を書く手間が省けます。

4. Cloud Runへのデプロイ

作成したコンテナイメージを、Cloud Run にデプロイします。

gcloud run deploy ${SERVICE} \
  --image ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE}:${TAG} \
  --platform=managed \
  --region=${REGION} \
  --no-invoker-iam-check \
  --allow-unauthenticated

5. デプロイの確認とアクセス

デプロイが完了すると、サービス URL がコンソールに出力されます。

✓ Deploying new service... Done.
  ✓ Creating Revision...
  ✓ Routing traffic...
Done.
Service [helloworld] revision [helloworld-00001-g9z] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-xxxxx.asia-northeast1.run.app 

出力された Service URL にブラウザでアクセスしてみましょう。
**「Hello, World!」**という文字が表示されれば、デプロイは成功です!

結論 : デプロイは簡単!

コードを準備し、ビルド(コンテナ化)し、デプロイする、という流れを gcloud コマンドだけで完結できました。Cloud Run にデプロイするのは非常に簡単でしたね。

Discussion