1. はじめに

Cloud Run は、HTTP リクエストを介して呼び出せるステートレスなコンテナを実行できるマネージド型のコンピューティング プラットフォームです。Cloud Run は、Knative オープンソース プロジェクトを基盤とするため、プラットフォームの間でワークロードを移植できます。Cloud Run はサーバーレスです。インフラストラクチャ管理が一切不要なため、最も重要な作業であるアプリケーションの構築に集中できます。
このチュートリアルの目標は、シンプルなウェブ アプリケーションを作成して Cloud Run にデプロイすることです。
2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_IDと識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、このチュートリアルでは、Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、[Cloud Shell をアクティブにする]
をクリックします。

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。
Cloud Shell に接続すると、認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
3. API を有効にする
Cloud Shell で、Artifact Registry、Cloud Build、Cloud Run の各 API を有効にします。
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
次のような成功メッセージが出力されます。
Operation "operations/..." finished successfully.
これで、作業を開始してアプリケーションを記述する準備が整いました。
4. アプリケーションを作成する
このステップでは、HTTP リクエストに応答するシンプルな Flask ベースの Python アプリケーションをビルドします。
作業ディレクトリ
Cloud Shell を使用して、helloworld-python という名前の作業ディレクトリを作成し、そのディレクトリに切り替えます。
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
main.py という名前のファイルを作成します。
touch main.py
お好みのコマンドライン エディタ(nano、vim、emacs)を使用するか、Cloud Shell エディタ ボタンをクリックしてファイルを編集します。

Cloud Shell エディタでファイルを直接編集するには、次のコマンドを使用します。
cloudshell edit main.py
main.py
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
このコードは、HTTP GET リクエストにフレンドリーなメッセージで応答する基本的なウェブサービスを作成します。
requirements.txt
依存関係を定義する requirements.txt という名前のファイルを追加します。
touch requirements.txt
Cloud Shell エディタでファイルを直接編集するには、次のコマンドを使用します。
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/flask
Flask==3.0.2
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
Procfile
最後に、Procfile という名前のファイルを追加して、アプリケーションの提供方法を指定します。
touch Procfile
Cloud Shell エディタでファイルを直接編集するには、次のコマンドを使用します。
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
すべてのファイルが作業ディレクトリにあることを確認します。
ls
次のファイルが一覧表示されます。
main.py Procfile requirements.txt
アプリケーションをデプロイする準備が整いましたが、まずテストしてみましょう。
5. アプリケーションをテストする
アプリケーションをテストするには、仮想環境を作成します。
virtualenv venv
仮想環境をアクティブにします。
source venv/bin/activate
依存関係をインストールします。
pip install -r requirements.txt
次のような確認メッセージが表示されます。
... Successfully installed Flask ... gunicorn ...
アプリケーションを起動します:
python main.py
ログには、デベロッパー モードであることが示されています。
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
Cloud Shell ウィンドウで、Web Preview アイコンをクリックし、Preview on port 8080 を選択します。

ブラウザ ウィンドウが開いて Hello World! というメッセージが表示されるはずです。
+ アイコンをクリックして、ローカルで実行されているアプリケーションにウェブ リクエストを送信することで、別の Cloud Shell セッション(新しいターミナル タブ)を開くこともできます。
curl localhost:8080
次のような回答が返されます。
Hello World!
完了したら、メインの Cloud Shell セッションに戻り、CTRL+C を使用して python main.py コマンドを停止します。
仮想環境を終了します。
deactivate
最後に、仮想環境ディレクトリを削除します。
rm -r venv/
アプリケーションが想定どおりに動作します。デプロイしましょう。
6. Cloud Run にデプロイする
Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるよう Google によって管理されます。デプロイに使用するリージョンを定義します。例:
REGION="europe-west9"
作業ディレクトリに移動します。
ls
次のファイルが一覧表示されます。
main.py Procfile requirements.txt
アプリケーションを Cloud Run にデプロイします。
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- デフォルトのリージョンは、
gcloud config set run/region $REGIONコマンドで定義できます。 - 次のコマンドを使用して、Cloud Run をデフォルトでマネージドにすることもできます。
gcloud config set run/platform managed --allow-unauthenticatedオプションを使用すると、サービスが一般公開されます。未認証のリクエストを回避するには、代わりに--no-allow-unauthenticatedを使用します。
初回は、Artifact Registry リポジトリの作成を求めるメッセージが表示されます。[Enter] をタップして検証します。
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
これにより、ソースコードの Artifact Registry リポジトリへのアップロードとコンテナ イメージのビルドが開始されます。
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
デプロイが完了するまでしばらく待ちます。成功すると、コマンドラインにサービス URL が表示されます。
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
次のコマンドでサービス URL を取得できます。
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
次のような内容が表示されます。
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
ウェブブラウザでサービス URL を開くと、アプリケーションを使用できるようになります。

Cloud Shell からアプリケーションを呼び出すこともできます。
curl $SERVICE_URL?who=me
次のような挨拶が返されます。
Hello me!
おめでとうございます!アプリケーションが Cloud Run にデプロイされました。Cloud Run は、受信したリクエストに応じてコンテナ イメージを自動的に水平方向にスケーリングし、リクエスト数が減少すると自動的にスケールダウンします。料金は、リクエストの処理中に使用した CPU、メモリ、ネットワークに対してのみ発生します。
7. クリーンアップ
サービスが使用されていない場合、Cloud Run の料金は発生しませんが、コンテナ イメージを Artifact Registry に保存すると課金される場合があります。リポジトリを削除するか、Cloud プロジェクトを削除して、料金が発生しないようにできます。Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
コンテナ イメージ リポジトリを削除するには:
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
Cloud Run サービスを削除するには:
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
Google Cloud プロジェクトを削除するには:
- 現在のプロジェクト ID を取得します。
PROJECT_ID=$(gcloud config get-value core/project)
- 削除するプロジェクトであることを確認します。
echo $PROJECT_ID
- プロジェクトの削除:
gcloud projects delete $PROJECT_ID
8. 完了

シンプルなウェブ アプリケーションを作成して Cloud Run にデプロイしました。
詳細
- Cloud Run のドキュメントを確認する
- Cloud Run を使用して 3 つの簡単なステップで開発から本番環境に移行するを完了して、その他のオプションを確認する
- Cloud Run での Django を完了して、Cloud SQL DB を作成し、Secret Manager で認証情報を管理し、Django をデプロイする
- Cloud Run の Codelab をご覧ください。
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。