C# での Hello Cloud Run

1. はじめに

89eb4723767d4525.png

Cloud Run は、HTTP リクエスト経由で呼び出し可能なステートレス コンテナを実行できるマネージド プラットフォームです。Cloud Run はサーバーレスです。インフラストラクチャ管理が一切不要なため、最も重要な作業であるアプリケーションの構築に集中できます。

Knative から構築されているため、Cloud Run を使用してフルマネージドでコンテナを実行するか、Cloud Run on GKE を使用して Google Kubernetes Engine クラスタでコンテナを実行するかを選択できます。

この Codelab の目標は、コンテナ イメージをビルドして Cloud Run にデプロイすることです。

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

Google Cloud Shell

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では Cloud 上で動作するコマンドライン環境である Google Cloud Shell を使用します。

Cloud Shell はオンラインの開発および運用環境であり、どこからでもブラウザからアクセスできます。gcloud コマンドライン ツールや kubectl などのユーティリティがプリロードされたオンライン ターミナルでリソースを管理できます。オンラインの Cloud Shell エディタを使用して、クラウドベースのアプリの開発、ビルド、デバッグ、デプロイを行うこともできます。

この仮想マシンには、必要な開発ツールがすべて含まれています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で直接実行されるため、ネットワークのパフォーマンスと認証が大幅に向上します。つまり、この Codelab に必要なのはブラウザだけです(はい、Chromebook で動作します)。

  • Cloud コンソールから Cloud Shell を有効にするには、「Cloud Shell をアクティブにする」をクリックします。

cb81e7c8e34bc8d.png

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

bfde7b083abc9544.png

数秒で環境がプロビジョニングされます。

cbb597d2be277a14.png

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 コンソールの上部にあるプルダウンを使用すると、

2c7a57249d954735.png

[設定とユーティリティ]セクション:

791f101797cfef39.png

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 を開くと、デプロイしたコンテナにアクセスできます。

85e7fbbd264444c9.png

これで、コンテナ イメージにパッケージ化されたアプリケーションが 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 する方法の詳細については、次のページをご覧ください。