Cloud Pub/Sub イベントを Cloud Run に転送する

Eventarc トリガーは、特定のイベントまたは一連のイベントに関心があることを宣言します。イベント ルーティングを構成するには、トリガーのフィルタ(イベントソースとターゲット Cloud Run サービスを含む)を指定します。

Eventarc は、HTTP リクエストを使用して CloudEvents 形式のイベント レシーバーにイベントを配信します。

ここでは、Cloud Pub/Sub 直接イベントによってトリガーされる Cloud Run サービスへのイベント ルーティングを構成する方法について説明します。この場合、イベントは Pub/Sub トピックに公開されたメッセージです。詳細については、サポートされている直接イベントのリストをご覧ください。

トリガーを作成する準備

トリガーを作成する前に、次の前提条件を満たす必要があります。

コンソール

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Cloud Logging、Eventarc、Eventarc Publishing API を有効にします。

    API を有効にする

  3. 該当する場合は、直接イベントに関連する API を有効にします。たとえば、Cloud Pub/Sub イベントの場合は Cloud Pub/Sub API を有効にします。

  4. アカウントがない場合は、ユーザー管理のサービス アカウントを作成し、Eventarc がターゲット サービスのイベントを管理できるように、必要なロールと権限を付与します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動

    2. プロジェクトを選択します。

    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for event trigger

    4. [作成して続行] をクリックします。

    5. 適切なアクセス権を付与するには、[ロールを選択] リストで、認証された呼び出しまたは未認証の呼び出しのためにサービス アカウントに付与する必要がある Identity and Access Management(IAM)ロールを選択します。詳細については、Cloud Run ターゲットのロールと権限をご覧ください。

      ロールを追加するには、[別のロールを追加] をクリックして各ロールを追加します。

    6. [続行] をクリックします。

    7. アカウントの作成を完了するには、[完了] をクリックします。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. Cloud Logging、Eventarc、Eventarc Publishing API を有効にします。

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com
    

  3. 該当する場合は、直接イベントに関連する API を有効にします。たとえば、Cloud Pub/Sub イベントの場合は pubsub.googleapis.com を有効にします。

  4. アカウントがない場合は、ユーザー管理のサービス アカウントを作成し、Eventarc がターゲット サービスのイベントを管理できるように、必要なロールと権限を付与します。

    1. サービス アカウントを作成します。

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      SERVICE_ACCOUNT_NAME は、サービス アカウントの名前に置き換えます。6~30 文字にする必要があり、小文字の英数字とダッシュを使用できます。作成したサービス アカウントの名前は変更できません。

    2. 認証済み呼び出しまたは未認証の呼び出しのために必要な Identity and Access Management(IAM)のロールまたは権限を付与します。詳細については、Cloud Run ターゲットのロールと権限をご覧ください。

トリガーを作成する

Eventarc トリガーは、Google Cloud CLI または Google Cloud コンソールを使用して作成できます。

コンソール

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

    [トリガー] に移動

  2. [トリガーを作成] をクリックします。
  3. トリガー名を入力します。

    これはトリガーの ID で、先頭は英字にする必要があります。63 文字以下とし、小文字、数字、ハイフンを使用することができます。

  4. [トリガーのタイプ] で、[Google のソース] を選択します。
  5. [イベント プロバイダ] リストで「Cloud Pub/Sub」を選択します。

    関連する Google Cloud のドキュメントでは、イベント プロバイダ名の前に Cloud または Google Cloud が付いていない場合があります。たとえば、Memorystore for Redis はコンソールで Google Cloud Memorystore for Redis と表示されます。

  6. [イベントタイプ] リストで、直接イベントから google.cloud.pubsub.topic.v1.messagePublished を選択します。
  7. [Cloud Pub/Sub トピックを選択してください] リストでトピックを選択するか、デフォルトの [なし] をそのまま使用して、新しいトピックを作成します。
  8. [リージョン] リストで、イベントを生成している Google Cloud サービスと同じリージョンを選択します。

    詳細については、Eventarc のロケーションをご覧ください。

  9. サービスまたはワークフローを呼び出すサービス アカウントを選択します。

    新しいサービス アカウントを作成することもできます。

    これにより、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスが設定されます。このメールアドレスには、Eventarc が必要とする特定のロールがすでに付与されています。

  10. [イベントの宛先] リストで、[Cloud Run] を選択します。
  11. サービスを選択します。

    これは、トリガーのイベントを受信するサービスの名前です。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。

  12. 必要に応じて、受信リクエストの送信先であるサービスの URL パスを指定できます。

    これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: //routerouteroute/subroute

  13. [作成] をクリックします。
  14. トリガーの作成後は、イベントソースのフィルタを変更できません。代わりに、新しいトリガーを作成して古いトリガーを削除します。詳しくは、トリガーの管理をご覧ください。

gcloud

トリガーを作成するには、必須フラグとオプションのフラグを指定して gcloud eventarc triggers create コマンドを実行します。

Pub/Sub メッセージ(既存のトピック)

gcloud eventarc triggers create TRIGGER \
  --location=LOCATION \
  --destination-run-service=DESTINATION_RUN_SERVICE \
  --destination-run-region=DESTINATION_RUN_REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
  --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • TRIGGER: トリガーの ID または完全修飾識別子。
  • LOCATION: Eventarc トリガーのロケーション。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。詳細については、Eventarc のロケーションをご覧ください。

  • DESTINATION_RUN_SERVICE: トリガーのイベントを受け取る Cloud Run サービスの名前。サービスは、Cloud Run でサポートされているどのロケーションにも配置できます。トリガーと同じロケーションに配置する必要はありません。ただし、サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION: (省略可)宛先の Cloud Run サービスがあるリージョン。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • TOPIC_ID: 既存の Pub/Sub トピックの ID。トピックは、トリガーと同じプロジェクトに存在する必要があります。
  • SERVICE_ACCOUNT_NAME: ユーザー管理のサービス アカウントの名前。

注:

  • --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" フラグは必須で、変更できません。別のイベントタイプには、新しいトリガーを作成する必要があります。
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • --transport-topic フラグには、既存の Pub/Sub トピックの ID または完全修飾識別子を指定します。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。
  • デフォルトでは、Eventarc 用に作成された Pub/Sub サブスクリプションはアクティビティに関係なく保持され、期限切れになりません。非アクティブ期間を変更するには、サブスクリプションの管理をご覧ください。

例:

gcloud eventarc triggers create helloworld-trigger \
  --location=us-central1 \
  --destination-run-service=helloworld-events \
  --destination-run-region=us-central1 \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --transport-topic=projects/${PROJECT_ID}/topics/${TOPIC_NAME}
  --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

このコマンドにより、projects/${PROJECT_ID}/topics/${TOPIC_ID} で識別される Pub/Sub トピックに helloworld-trigger というトリガーが作成されます。

Pub/Sub メッセージ(新しいトピック)

gcloud eventarc triggers create TRIGGER \
  --location=LOCATION \
  --destination-run-service=DESTINATION_RUN_SERVICE \
  --destination-run-region=DESTINATION_RUN_REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • TRIGGER: トリガーの ID または完全修飾識別子。
  • LOCATION: Eventarc トリガーのロケーション。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。詳細については、Eventarc のロケーションをご覧ください。

  • DESTINATION_RUN_SERVICE: トリガーのイベントを受け取る Cloud Run サービスの名前。サービスは、Cloud Run でサポートされているどのロケーションにも配置できます。トリガーと同じロケーションに配置する必要はありません。ただし、サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION: (省略可)宛先の Cloud Run サービスがあるリージョン。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
  • SERVICE_ACCOUNT_NAME: ユーザー管理のサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。

注:

  • --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" フラグは必須で、変更できません。別のイベントタイプには、新しいトリガーを作成する必要があります。
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。
  • デフォルトでは、Eventarc 用に作成された Pub/Sub サブスクリプションはアクティビティに関係なく保持され、期限切れになりません。非アクティブ期間を変更するには、サブスクリプションの管理をご覧ください。

例:

gcloud eventarc triggers create helloworld-trigger \
  --location=us-central1 \
  --destination-run-service=helloworld-events \
  --destination-run-region=us-central1 \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

このコマンドにより、新しい Pub/Sub トピックと helloworld-trigger というトリガーが作成されます。

トリガーによって作成された Pub/Sub トピックは再利用しないことをおすすめします。Eventarc トリガーを削除すると、トリガーによって作成された Pub/Sub トピックも削除されるためです。

Terraform

Terraform を使用して、Cloud Run の宛先のトリガーを作成できます。詳細については、Terraform を使用してトリガーを作成するをご覧ください。

トリガーを一覧表示する

トリガーの作成を確認するには、Google Cloud CLI または Google Cloud コンソールを使用して Eventarc トリガーを一覧表示します。

コンソール

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

    [トリガー] に移動

    このページには、すべてのロケーションのトリガーが一覧表示されます。また、名前、リージョン、イベント プロバイダ、宛先などの詳細情報も表示されます。

  2. トリガーをフィルタするには:

    1. [ フィルタ] フィールドまたは [トリガーをフィルタリング] フィールドをクリックします。
    2. [プロパティ] リストで、トリガーをフィルタするオプションを選択します。

    1 つのプロパティを選択することも、論理演算子 OR を使用して複数のプロパティを追加することもできます。

  3. トリガーを並べ替えるには、サポートされている列見出しの横にある [ 並べ替え] をクリックします。

gcloud

次のコマンドを実行してトリガーを一覧表示します。

gcloud eventarc triggers list --location=-

すべてのロケーションのトリガーが一覧表示されます。名前、タイプ、宛先、ステータスなどの詳細情報も表示されます。

次のステップ