このチュートリアルでは、Cloud Run サービスの作成、デプロイ、Pub/Sub push サブスクリプションからの呼び出し方法を説明します。
目標
- Cloud Run でサービスを書き込み、作成、ビルド、デプロイする
- Pub/Sub トピックにメッセージを公開してサービスを呼び出す
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- Cloud Run Admin API を有効にします。
- gcloud CLI をインストールして初期化します。
- コンポーネントを更新します。
gcloud components update
gcloud のデフォルトを設定する
Cloud Run サービスを gcloud のデフォルトに構成するには:
デフォルト プロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID は、このチュートリアルで作成したプロジェクトの名前に置き換えます。
選択したリージョン向けに gcloud を構成します。
gcloud config set run/region REGION
REGION は、任意のサポートされている Cloud Run のリージョンに置き換えます。
Cloud Run のロケーション
Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。
レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloud サービスのロケーションも考慮する必要があります。使用する Google Cloud サービスが複数のロケーションにまたがっていると、サービスの料金だけでなくレイテンシにも影響します。
Cloud Run は、次のリージョンで利用できます。
ティア 1 料金を適用
asia-east1
(台湾)asia-northeast1
(東京)asia-northeast2
(大阪)europe-north1
(フィンランド)低 CO2
europe-southwest1
(マドリッド)低 CO2
europe-west1
(ベルギー)低 CO2
europe-west4
(オランダ)europe-west8
(ミラノ)europe-west9
(パリ)低 CO2
us-central1
(アイオワ)低 CO2
us-east1
(サウスカロライナ)us-east4
(北バージニア)us-east5
(コロンバス)us-south1
(ダラス)us-west1
(オレゴン)低 CO2
ティア 2 料金を適用
asia-east2
(香港)asia-northeast3
(ソウル、韓国)asia-southeast1
(シンガポール)asia-southeast2
(ジャカルタ)asia-south1
(ムンバイ、インド)asia-south2
(デリー、インド)australia-southeast1
(シドニー)australia-southeast2
(メルボルン)europe-central2
(ワルシャワ、ポーランド)europe-west2
(ロンドン、イギリス)europe-west3
(フランクフルト、ドイツ)europe-west6
(スイス、チューリッヒ)低 CO2
northamerica-northeast1
(モントリオール)低 CO2
northamerica-northeast2
(トロント)低 CO2
southamerica-east1
(サンパウロ、ブラジル)低 CO2
southamerica-west1
(サンティアゴ、チリ)us-west2
(ロサンゼルス)us-west3
(ソルトレイクシティ)us-west4
(ラスベガス)
Cloud Run サービスをすでに作成している場合は、コンソールの Cloud Run ダッシュボードにリージョンが表示されます。
Pub/Sub トピックを作成する
このサンプル サービスは Pub/Sub トピックに公開されたメッセージによってトリガーされるため、Pub/Sub でトピックを作成する必要があります。
コンソール
新しい Pub/Sub トピックを作成するには、次のコマンドを使用します。
gcloud pubsub topics create myRunTopic
myRunTopic を使用するか、Cloud プロジェクト内で一意のトピック名に置き換えます。
Terraform
Google Cloud Platform Provider の次のリソースを使用します。
Terraform のベスト プラクティスに従います。
サービス アカウントを作成するには、既存の main.tf
ファイルに次の行を追加します。
Cloud Run サービス(Cloud Run)の場合は、サービス アカウントにサービスを呼び出す権限を付与します。
コードサンプルを取得する
使用するサンプルコードを取得するには:
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
また、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
また、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
また、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
また、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Cloud Run のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
C#
cd dotnet-docs-samples/run/pubsub/
コードを確認する
このチュートリアルのコードは、次のものから構成されています。
受信リクエストを処理するサーバー。
Node.js
Node.js サービスをテストしやすくするため、サーバー構成はサーバーの起動とは別になっています。Node.js ウェブサーバーは、
ウェブサーバーはapp.js
内で設定されています。index.js
で開始します。Python
Go
Java
C#
Pub/Sub メッセージを処理し、応答メッセージをログに記録するハンドラ。
Node.js
Python
Go
Java
C#
正確な HTTP レスポンス コードを返すようにサービスをコーディングする必要があります。HTTP
200
や204
などの成功コードは、Pub/Sub メッセージの処理の完了を意味します。HTTP400
や500
などのエラーコードは、push を使用したメッセージの受信で説明されているように、メッセージが再試行されることを示します。サービスの動作環境を定義する
Dockerfile
。Dockerfile
の内容は言語によって異なります。Node.js
Python
Go
Java
このサンプルでは、Jib を使用して一般的な Java ツールにより Docker イメージをビルドします。Jib は、Dockerfile や Docker をインストールせずにコンテナのビルドを最適化します。Jib を使用して Java コンテナを構築する方法の詳細を確認します。C#
Pub/Sub リクエストの送信元を認証する方法の詳細は、以下の Pub/Sub との統合をご覧ください。
コードを配布する
コードの配布は、Cloud Build でコンテナ イメージをビルドする、Container Registry にコンテナ イメージをアップロードする、Cloud Run にコンテナ イメージをデプロイするという 3 つのステップで構成されます。
コードを配布するには、次の手順を行います。
コンテナをビルドして、Container Registry に公開します。
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
ここで、PROJECT_ID は Cloud プロジェクト ID、
pubsub
はイメージ名です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
ここで、PROJECT_ID は Cloud プロジェクト ID、
pubsub
はイメージ名です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
ここで、PROJECT_ID は Cloud プロジェクト ID、
pubsub
はイメージ名です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
Java
Docker を承認して Container Registry に push するには、gcloud 認証ヘルパーを使用します。
gcloud auth configure-docker
Jib Maven プラグインを使用して、コンテナをビルドして Container Registry に push します。
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/pubsub
ここで、PROJECT_ID は Cloud プロジェクト ID、
pubsub
はイメージ名です。ビルドが成功すると、BUILD SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
C#
gcloud builds submit --tag gcr.io/PROJECT_ID/pubsub
ここで、PROJECT_ID は Cloud プロジェクト ID、
pubsub
はイメージ名です。ビルドが成功すると、ID、作成時間、イメージ名を含む SUCCESS メッセージが表示されます。イメージが Container Registry に保存されます。このイメージは必要に応じて再利用できます。
次のコマンドを実行して、アプリをデプロイします。
gcloud run deploy pubsub-tutorial --image gcr.io/PROJECT_ID/pubsub --no-allow-unauthenticated
PROJECT_ID を Cloud プロジェクト ID に置き換えます。
pubsub
はイメージ名、pubsub-tutorial
はサービスの名前です。コンテナ イメージは、gcloud の設定で構成したサービスとリージョンにデプロイされることに注意してください。--no-allow-unauthenticated
フラグは、サービスへの未認証アクセスを制限します。サービスを非公開にすることで、Cloud Run と Pub/Sub の自動統合でリクエストの認証を行うことができます。構成方法の詳細については、Pub/Sub との統合をご覧ください。Identity and Access Management(IAM)に基づく認証の詳細については、IAM を使用したアクセスの管理をご覧ください。デプロイが完了するまで待ちます。30 秒ほどかかる場合があります。成功すると、コマンドラインにサービス URL が表示されます。この URL は、Pub/Sub サブスクリプションの構成で使用します。
サービスにコードの更新をデプロイする場合は、上記のステップを繰り返します。サービスをデプロイするたびに、リビジョンが作成されます。準備ができると、トラフィックの送信が自動的に開始します。
Pub/Sub との統合
Pub/Sub とサービスを統合するには:
Pub/Sub サブスクリプションの ID を表すサービス アカウントを作成または選択します。
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
cloud-run-pubsub-invoker
を使用するか、Cloud プロジェクト内で一意の名前に置き換えます。このサービス アカウントを使用して Pub/Sub サブスクリプションを作成します。
呼び出し元のサービス アカウントに、
pubsub-tutorial
サービスを呼び出すための権限を付与します。gcloud run services add-iam-policy-binding pubsub-tutorial \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
IAM の変更が反映されるまでに数分かかることがあります。その間に、サービスログに
HTTP 403
エラーが報告されることがあります。Pub/Sub がプロジェクトで認証トークンを作成できるようにします。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
次のように置き換えます。
- PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。
PROJECT_NUMBER は、Google Cloud プロジェクト番号に置き換えます。
プロジェクト ID とプロジェクト番号は、コンソールで、対象プロジェクトの [プロジェクト情報] パネルに表示されます。
このサービス アカウントを使用して Pub/Sub サブスクリプションを作成します。
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
次のように置き換えます。
- myRunTopic は、以前に作成したトピックに置き換えます。
- SERVICE-URL は、サービスのデプロイ時に提供された HTTPS URL で置き換えます。この URL は、ドメイン マッピングを追加している場合でも機能します。
- PROJECT_ID を Cloud プロジェクト ID に置き換えます。
--push-auth-service-account
フラグは、認証と認可のために Pub/Sub の push 機能を有効にします。Pub/Sub サブスクリプションで使用するための Cloud Run サービス ドメインが自動的に登録されます。
Cloud Run の場合のみ、トークンが有効であるという組み込みの認証チェックと、サービス アカウントに Cloud Run サービスを起動する権限があることの承認チェックがあります。
これで、サービスが Pub/Sub と完全に統合されました。
試してみる
エンドツーエンドのソリューションをテストするには、次の手順を行います。
トピックに Pub/Sub メッセージを送信します。
gcloud pubsub topics publish myRunTopic --message "Runner"
このチュートリアルで説明したコマンドラインを使用する代わりに、プログラムでメッセージを発行することもできます。詳しくは、メッセージの公開をご覧ください。
サービスログに移動します。
- Google Cloud Console に移動します。
pubsub-tutorial
サービスをクリックします。[ログ] タブを選択します。
ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、しばらくしてからもう一度確認してください。
「Hello Runner!」というメッセージを見つけます。
クリーンアップ
Cloud Run with Pub/Sub を使用する場合の詳しい使用方法については、今すぐクリーンアップをスキップし、Cloud Run を使用した画像処理のチュートリアルをご覧ください。
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトを削除する
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- コンソールで [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
チュートリアル リソースを削除する
このチュートリアルでデプロイした Cloud Run サービスを削除します。
gcloud run services delete SERVICE-NAME
SERVICE-NAME は、選択したサービス名です。
Cloud Run サービスは Google Cloud Console から削除することもできます。
チュートリアルの設定時に追加した gcloud のデフォルト リージョン構成を削除します。
gcloud config unset run/region
プロジェクト構成を削除します。
gcloud config unset project
このチュートリアルで作成した他の Google Cloud リソースを削除します。
次のステップ
- 内部 Ingress 制御を使用して上り(内向き)を制限することで本番環境のセキュリティを向上させる方法については、上り(内向き)の制限をご覧ください。
- このチュートリアルでデプロイされたサンプル サービスを展開して、Cloud Storage にアップロードされた画像を変更する画像処理機能を追加する。
- トピックを Pub/Sub アーキテクチャに合わせる方法とトピックの管理方法を学習する。
- サブスクリプションの管理における Pub/Sub サブスクリプションの詳細を確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。Cloud Architecture Center を確認します。