認証された Cloud Run サービスを使用して Pub/Sub イベントを受信する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このチュートリアルでは、認証済みの Cloud Run サービスを使用して Pub/Sub 経由でイベントを受信する、コンテナ化されたアプリケーションをデプロイする方法について説明します。Pub/Sub はフルマネージドのリアルタイム メッセージング サービスで、個別のアプリケーション間でメッセージを送受信できます。

目標

このチュートリアルの内容は次のとおりです。

  1. 認証された呼び出しが必要なイベント レシーバ サービスを Cloud Run にデプロイします。

  2. Pub/Sub トピックを Cloud Run サービスに接続する Eventarc トリガーを作成します。

  3. Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成します。

  4. Cloud Run のログでイベントを確認します。

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

    組織が Google Cloud 環境に制約を適用すると、このドキュメントの一部の手順が正しく機能しない場合があります。その場合、パブリック IP アドレスやサービス アカウント キーを作成するようなタスクを完了できない場合があります。制約に関するエラーを返すリクエストを行う場合は、制約がある Google Cloud 環境でアプリケーションを開発する方法をご覧ください。

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

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

      gcloud projects create PROJECT_ID
    • 作成した Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  4. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  5. Google Cloud CLI をインストールして初期化します。
  6. Google Cloud プロジェクトを作成または選択します。

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

      gcloud projects create PROJECT_ID
    • 作成した Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  7. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  8. gcloud コンポーネントを更新します。
    gcloud components update
  9. 自分のアカウントでログインします。
    gcloud auth login
  10. API を有効にします。
    gcloud services enable run.googleapis.com \
      eventarc.googleapis.com \
      pubsub.googleapis.com \
      cloudbuild.googleapis.com
  11. このチュートリアルで使用する構成変数を設定します。
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    
  12. プロジェクトのサービス アカウントを作成します。次に例を示します。
    gcloud iam service-accounts create sample-service-account \
      --description="A sample service account" \
      --display-name="Sample service account"
    サービス アカウントを作成した後、サービス アカウントを使用できるようになるまで最大で 7 分かかることがあります。サービス アカウントを作成した直後に使用しようとしてエラーが表示された場合は、60 秒以上待ってからもう一度お試しください。
  13. sample-service-account が作成されたことを確認するには、次のコマンドを実行します。
    gcloud iam service-accounts list
    出力例を以下に示します。
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  14. サービス アカウントに run.invoker ロールを付与します。
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/run.invoker"

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

    • PROJECT_ID: プロジェクト ID
    • SERVICE_ACCOUNT_EMAIL: 前のステップで返されたサービス アカウントのメールアドレス
  15. ユーザー アカウントに eventarc.admin ロールを付与します。
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role='roles/eventarc.admin'

    次の値を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクト ID
    • USER_EMAIL: ユーザーのメールアドレス。

      例: user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.com、または domain:example.domain.com

  16. ユーザー アカウントに iam.serviceAccountUser ロールを付与します。
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
      --member="user:USER_EMAIL" \
      --role="roles/iam.serviceAccountUser"

    次の値を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクト ID
    • SERVICE_ACCOUNT_ID: サービス アカウント ID(例: sample-service-account
    • USER_EMAIL: ユーザーのメールアドレス。

      例: user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.com、または domain:example.domain.com

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 Run サービスのコンテナをビルドします。

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=trigger-pubsub
    gcloud builds submit --tag gcr.io/${PROJECT_ID}/${SERVICE_NAME}
    
  4. コンテナ イメージを Cloud Run にデプロイします。

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \
      --region=${REGION}
    
  5. [Allow unauthenticated invocations to trigger-pubsub (y/N)?] というプロンプトで、「n」と入力します。

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

Eventarc トリガーを作成する

Pub/Sub トピックにメッセージがパブリッシュされると、イベントにより Cloud Run サービスがトリガーされます。このサービスでは認証が必要です。リソースの使用に必要な IAM のロールと権限を持つサービス アカウントを持つ呼び出し元によってイベントがトリガーされる必要があります。

  1. 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=SERVICE_ACCOUNT_USER_EMAIL
    

    SERVICE_ACCOUNT_EMAIL は、サービス アカウントのメールアドレスに置き換えます。
    これにより、新しい 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=SERVICE_ACCOUNT_EMAIL
    

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

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID
    • TOPIC_ID: 既存の Pub/Sub トピックの ID
    • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス

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

  2. トリガーが正常に作成されたことを確認します。トリガーはすぐに作成されますが、トリガーが完全に機能するまでに 2 分ほどかかることがあります。

      gcloud eventarc triggers list --location=us-central1
    

    返されたトリガーのステータスは ACTIVE: Yes になります。

イベントを生成して表示する

Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成し、Cloud Run サービスをトリガーします。Cloud Run サービスは、メッセージをサービスログに記録します。

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

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe ${SERVICE_NAME} \
      --format='value(transport.pubsub.topic)'))
    
  2. Pub/Sub トピックにメッセージを送信してイベントを生成します。

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
    

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

  3. サービスによって作成されたイベント関連ログエントリを表示します。

    gcloud logging read 'textPayload: "Hello there!"'

    ログエントリは次のようになります。

    textPayload: 'Hello, Hello there!'

ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、1 分後に再度確認してください。

クリーンアップ

このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

チュートリアル リソースの削除

  1. このチュートリアルでデプロイした Cloud Run サービスを削除します。

    gcloud run services delete SERVICE_NAME

    SERVICE_NAME は、選択したサービス名です。

    Cloud Run サービスは Google Cloud コンソールから削除することもできます。

  2. チュートリアルの設定時に追加した gcloud CLI のデフォルト構成を削除します。

    例:

    gcloud config unset run/region

    または

    gcloud config unset project

  3. このチュートリアルで作成した他の Google Cloud リソースを削除します。

    • Eventarc トリガーを削除します。
      gcloud eventarc triggers delete TRIGGER_NAME
      
      TRIGGER_NAME は実際のトリガー名に置き換えます。

次のステップ