1. はじめに

Cloud Run は、HTTP リクエストを介して呼び出せるステートレス コンテナを実行できるマネージド プラットフォームです。Cloud Run はサーバーレスです。インフラストラクチャ管理が一切不要なため、最も重要な作業であるアプリケーションの構築に集中できます。
Knative から作成されているため、Cloud Run を使用してフルマネージド型でコンテナを実行するか、Cloud Run on GKE を使用して Google Kubernetes Engine クラスタ内でコンテナを実行するかを選択できます。
この Codelab の目標は、コンテナ イメージをビルドして 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 米ドル分の無料トライアル プログラムをご利用いただけます。
Google Cloud Shell
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Cloud Shell は、ブラウザから場所を問わずにアクセスできる、オンラインの開発および運用環境です。gcloud コマンドライン ツールや kubectl などのユーティリティがプリロードされたオンライン ターミナルを使用して、リソースを管理できます。また、オンラインの Cloud Shell Editor を使用して、クラウド ネイティブ アプリの開発、ビルド、デバッグ、デプロイも行えます。
この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。つまり、この Codelab に必要なのはブラウザだけです(Chromebook でも動作します)。
- Cloud Console から Cloud Shell を有効にするには、[Cloud Shell をアクティブにする] をクリックします。

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

環境のプロビジョニングには数秒しかかかりません。

Cloud Shell に接続すると、すでに認証が完了していることがわかります。
gcloud auth list
コマンド出力
Credentialed Accounts ACTIVE: * ACCOUNT: <my-account>@<mydomain>
プロジェクトは、PROJECT_ID にすでに設定されているはずです(ウェブ コンソールでプロジェクトを選択している場合)。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
なんらかの理由でプロジェクトが設定されていない場合は、次のコマンドを実行します。
gcloud config set project <PROJECT_ID>
PROJECT_ID が見つからない場合は、Cloud コンソールの上部にあるプルダウンを確認します。

[設定とユーティリティ] セクションでプロジェクトの詳細を確認することもできます。

Cloud Shell では、デフォルトで環境変数もいくつか設定されます。これらの変数は、以降のコマンドを実行する際に有用なものです。
echo $GOOGLE_CLOUD_PROJECT
コマンド出力
<PROJECT_ID>
- 最後に、デフォルト ゾーンを設定します。
gcloud config set compute/zone us-central1-f
別のゾーンを選択できます。詳細については、リージョンとゾーンをご覧ください。
Cloud Run API を有効にします。
Cloud Shell で、Cloud Run API を有効にします。
gcloud services enable run.googleapis.com
成功すると次のようなメッセージが表示されます。
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. サンプル アプリケーションを作成する
HTTP リクエストに応答するシンプルな ASP.NET C# アプリケーションを作成します。
アプリケーションを作成するには、Cloud Shell で dotnet コマンドライン ツールを使用します。
dotnet new web -o helloworld-csharp
helloworld-csharp ディレクトリに移動します。
cd helloworld-csharp
次に、Program.cs を以下のように更新します。
var builder = WebApplication.CreateBuilder(args);
var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
このコードは、PORT 環境変数で定義されたポートをリッスンし、Hello World で応答する基本的なウェブサーバーを作成します。
Cloud Shell でローカルに実行して、アプリをテストできます。ポート 8080 でリッスンしていることがわかります。
$ dotnet run Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json... Hosting environment: Development Content root path: /home/atameldev/helloworld-csharp Now listening on: http://0.0.0.0:8080 Application started. Press Ctrl+C to shut down.
4. Cloud Run にデプロイする
次のコマンドを使用して、アプリケーションを Cloud Run にデプロイします。
gcloud run deploy hello-world \
--allow-unauthenticated \
--region us-central1 \
--source .
hello-worldは、サービス名です。allow-unauthenticatedフラグは、認証要件のない一般公開サービスとしてサービスをデプロイします。us-central1は、アプリがデプロイされるリージョンです。sourceフラグは、ビルドするソースの場所を決定します。Cloud Run は Buildpack を使用して、ソースコードからコンテナを自動的に作成します。
デプロイが完了するまで数分待ちます。成功すると、コマンドラインにサービス URL が表示されます。
Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic. Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app
ウェブブラウザでこのサービス URL を開くと、デプロイしたコンテナにアクセスできます。

おめでとうございます!コンテナ イメージとしてパッケージ化されたアプリケーションを Cloud Run にデプロイしました。Cloud Run は、受信したリクエストに応じてコンテナ イメージを自動的に水平方向にスケーリングし、リクエスト数が減少すると自動的にスケールダウンします。料金は、リクエストの処理中に使用した CPU、メモリ、ネットワークに対してのみ発生します。
5. クリーンアップの時間
課金されないようにするには、GCP プロジェクトを削除してプロジェクト内のすべてのリソースへの課金を停止するか、Cloud Run サービスを削除します。
gcloud run services delete helloworld
6. 次のステップ
次のステップとして、Cloud Run on GKE にデプロイすることをおすすめします。
Cloud Run に適したステートレス HTTP コンテナをコードソースからビルドして Container Registry に push する方法の詳細については、次のページをご覧ください。