Pub/Sub メッセージを使用してイベントを受信する(gcloud CLI)

このクイックスタートでは、Pub/Sub を使用してイベントを受信する未認証の Cloud Run サービスをデプロイする方法について説明します。

このクイックスタートでは、以下の操作を行います。

  1. イベント レシーバ サービスを Cloud Run にデプロイする。

  2. Eventarc トリガーを作成する。

  3. Pub/Sub トピックにメッセージを公開してイベントを生成し、Cloud Run ログでメッセージを確認する。

始める前に

組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

  6. Cloud Run, Cloud Logging, Cloud Build, Pub/Sub, and Eventarc API を有効にします。

    gcloud services enable run.googleapis.comlogging.googleapis.comcloudbuild.googleapis.compubsub.googleapis.comeventarc.googleapis.com
  7. Google Cloud CLI をインストールします。
  8. gcloud CLI を初期化するには:

    gcloud init
  9. Google Cloud プロジェクトを作成または選択します

    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  10. Google Cloud プロジェクトで課金が有効になっていることを確認します

  11. Cloud Run, Cloud Logging, Cloud Build, Pub/Sub, and Eventarc API を有効にします。

    gcloud services enable run.googleapis.comlogging.googleapis.comcloudbuild.googleapis.compubsub.googleapis.comeventarc.googleapis.com
  12. Google Cloud CLI のコンポーネントを更新します。
    gcloud components update
  13. アカウントを使用してログインします。
    gcloud auth login
  14. このクイックスタートで使用する構成変数を設定します。
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
    
  15. プロジェクト作成者には、オーナーロールroles/owner)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへの完全アクセス権に必要な権限が含まれており、この手順は省略できます。

    プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。詳細については、イベントの宛先のロールと権限のページをご覧ください。

    必要な権限

    このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

    ロールの付与の詳細については、アクセスの管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  16. 2021 年 4 月 8 日以前に、認証済みの Pub/Sub push リクエストをサポートするために Cloud Pub/Sub サービス エージェントを有効にした場合は、サービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を Google マネージド サービス アカウントに付与します。それ以外の場合、このロールはデフォルトで付与されます。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  17. PROJECT_NUMBER は、実際の Google Cloud プロジェクトの番号に置き換えます。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

Cloud Run にイベント レシーバーをデプロイする

イベントを受信してロギングする Cloud Run サービスをデプロイします。

  1. リポジトリのクローンを作成します。

    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 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。

  2. 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/
  3. コンテナをビルドして、Cloud Build にアップロードします。

    gcloud builds submit --tag gcr.io/$(gcloud config get-value project)/events-pubsub
    
  4. コンテナ イメージを Cloud Run にデプロイする。

    gcloud run deploy helloworld-events-pubsub-quickstart \
        --image gcr.io/$(gcloud config get-value project)/events-pubsub \
        --allow-unauthenticated
    

サービス URL が表示されたら、デプロイは完了しています。

Eventarc トリガーを作成する

イベント トリガーによりメッセージが Pub/Sub トピックに公開されると、Cloud Run にデプロイされたイベント レシーバー サービスにメッセージが送信されます。

  1. Pub/Sub メッセージをリッスンするトリガーを作成します。

    新しい Pub/Sub トピック

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-run-service=helloworld-events-pubsub-quickstart \
        --destination-run-region=us-central1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
    

    これにより、新しい Pub/Sub トピックと events-pubsub-trigger というトリガーが作成されます。

    既存の Pub/Sub トピック

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-run-service=helloworld-events-pubsub-quickstart \
        --destination-run-region=us-central1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • TOPIC_ID: 既存の Pub/Sub トピックの ID

    これにより、既存の Pub/Sub トピックに events-pubsub-trigger というトリガーが作成されます。

    Google Cloud プロジェクトで初めて Eventarc トリガーを作成する場合、Eventarc サービス エージェントのプロビジョニングに遅延が発生することがあります。この問題は通常、トリガーを再度作成することで解決できます。詳細については、権限拒否エラーをご覧ください。

  2. トリガーが正常に作成されたことを確認します。

    gcloud eventarc triggers list --location=us-central1
    

    events-pubsub-trigger には、Cloud Run サービスである helloworld-events-pubsub-quickstart が宛先として一覧表示されます。

Pub/Sub トピック イベントを生成して表示する

Pub/Sub トピックにメッセージを公開することで、Eventarc イベントを生成できます。

  1. Pub/Sub トピックを検索して、環境変数として設定します。

    export RUN_TOPIC=$(gcloud eventarc triggers describe events-pubsub-trigger \
        --format='value(transport.pubsub.topic)')
    
  2. Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成します。

    gcloud pubsub topics publish $RUN_TOPIC --message "Runner"
    

    イベントが Cloud Run サービスに転送され、イベント メッセージがログに記録されます。

  3. サービスによって作成されたイベント関連ログエントリを表示するには、次のコマンドを実行します。

    gcloud logging read 'textPayload: "Hello, Runner!"'
    
  4. 次のようなログエントリを探します。

    "textPayload": "Hello, Runner! ID: 7479199264356846"
    

これで完了です。これで、イベント レシーバ サービスを Cloud Run にデプロイし、Eventarc トリガーを作成して、Pub/Sub からイベントを生成し、それを Cloud Run ログで確認できました。

クリーンアップ

サービスが使用されていない場合、Cloud Run の料金は発生しませんが、コンテナ イメージを Container Registry に保存すると料金が発生します。また、Eventarc のリソースを使用した場合や、Pub/Sub メッセージにも料金が発生します。

自分のイメージの削除Pub/Sub トピックの削除Pub/Sub サブスクリプションの削除を行うことができます。Eventarc トリガーを削除するには:

gcloud eventarc triggers delete events-pubsub-trigger

また、Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。

Google Cloud プロジェクトを削除します。

gcloud projects delete PROJECT_ID

次のステップ