このチュートリアルでは、認証済みの Cloud Run サービスを使用して Pub/Sub 経由でイベントを受信する、コンテナ化されたアプリケーションをデプロイする方法について説明します。Pub/Sub はフルマネージドのリアルタイム メッセージング サービスで、個別のアプリケーション間でメッセージを送受信できます。
Artifact Registry 標準リポジトリを作成する
コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
REPOSITORY
は、リポジトリの一意の名前に置き換えます。
Cloud Run にイベント レシーバーをデプロイする
イベントの内容をログに記録する Cloud Run サービスをデプロイします。
GitHub リポジトリのクローンを作成します。
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 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Cloud Run のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/eventarc/pubsub/
Python
cd python-docs-samples/eventarc/pubsub/
Go
cd golang-samples/eventarc/pubsub/
Java
cd java-docs-samples/eventarc/pubsub/
Ruby
cd ruby-docs-samples/eventarc/pubsub/
C#
cd dotnet-docs-samples/eventarc/pubsub/
コンテナをビルドして、Cloud Build にアップロードします。
gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
コンテナ イメージを Cloud Run にデプロイします。
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
[Allow unauthenticated invocations to trigger-pubsub (y/N)?] というプロンプトで、「
n
」と入力します。
Cloud Run サービスの URL が表示されたら、デプロイは完了しています。
Eventarc トリガーを作成する
Pub/Sub トピックにメッセージがパブリッシュされると、イベントにより Cloud Run サービスがトリガーされます。
Pub/Sub メッセージをリッスンするトリガーを作成します。
新しい Pub/Sub トピック
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
これにより、新しい Pub/Sub トピックと
trigger-pubsub
というトリガーが作成されます。既存の Pub/Sub トピック
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
次のように置き換えます。
PROJECT_ID
: 実際の Google Cloud プロジェクト IDTOPIC_ID
: 既存の Pub/Sub トピックの ID
これにより、既存の Pub/Sub トピックに
trigger-pubsub
というトリガーが作成されます。Google Cloud プロジェクトで初めて Eventarc トリガーを作成する場合は、Eventarc サービス エージェントのプロビジョニングに遅延が発生する可能性があります。この問題は通常、トリガーを再度作成することで解決できます。詳細については、権限拒否エラーをご覧ください。
トリガーが正常に作成されたことを確認します。トリガーはすぐに作成されますが、トリガーが完全に機能するまでに 2 分ほどかかることがあります。
gcloud eventarc triggers list --location=${REGION}
返されたトリガーのステータスは
ACTIVE: Yes
になります。
イベントを生成して表示する
Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成し、Cloud Run サービスをトリガーします。Cloud Run サービスは、メッセージをサービスログに記録します。
Pub/Sub トピックを検索して、環境変数として設定します。
export TOPIC_ID=$(gcloud eventarc triggers describe ${SERVICE_NAME} \ --format='value(transport.pubsub.topic)')
Pub/Sub トピックにメッセージを送信してイベントを生成します。
gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
イベントが Cloud Run サービスに送信され、イベント メッセージがログに記録されます。
サービスによって作成されたイベント関連ログエントリを表示します。
gcloud logging read 'textPayload: "Hello there!"'
ログエントリは次のようになります。
textPayload: 'Hello, Hello there!'
ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、1 分後に再度確認してください。