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

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

イベントは、HTTP リクエストを介して CloudEvents 形式で配信されます。Workflows サービスは、CloudEvents 仕様に従ってイベントを JSON オブジェクトに変換し、ワークフロー ランタイム引数としてワークフロー実行に渡します。イベントサイズが 512 KB を超えていないことを確認してください。Workflows の引数サイズの上限を超えるイベントはワークフローの実行をトリガーしません。

以下では、Pub/Sub トピックにパブリッシュされたメッセージがトリガーのフィルタ条件に一致した場合にワークフローの実行がトリガーされるように、イベント ルーティングを構成する方法について説明します。これは、Cloud Pub/Sub イベント プロバイダに適用されます。

トリガーを作成する準備

ターゲット ワークフローの Eventarc トリガーを作成する前に、次の作業を完了します。

コンソール

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

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

  2. Eventarc API、Eventarc Publishing API、Workflows API、Workflow Executions 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)ロールを選択します。詳細については、Workflows ターゲットのロールと権限をご覧ください。

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

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

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

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Eventarc API、Eventarc Publishing API、Workflows API、Workflow Executions API を有効にします。

    gcloud services enable eventarc.googleapis.com \
        eventarcpublishing.googleapis.com \
        workflows.googleapis.com \
        workflowexecutions.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)のロールまたは権限を付与します。詳細については、Workflows ターゲットのロールと権限をご覧ください。

トリガーを作成する

イベント レシーバとしてデプロイされたワークフローに Eventarc トリガーを作成するには、Google Cloud CLI(gcloud または Terraform)を使用するか、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. [イベントの宛先] リストで、[Workflows] を選択します。
  11. ワークフローを選択します。

    これは、イベントを渡すワークフローの名前です。ワークフロー実行用のイベントは、変換されてランタイム引数としてワークフローに渡されます。

    詳細については、Workflows のトリガーを作成するをご覧ください。

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

gcloud

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

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-workflow=DESTINATION_WORKFLOW  \
    --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=TOPIC_ID \
    --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"

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

  • TRIGGER: トリガーの ID または完全修飾識別子。
  • LOCATION: Eventarc トリガーのロケーション。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。
  • DESTINATION_WORKFLOW: トリガーからイベントを受け取る、デプロイ済みワークフローの ID。ワークフローは、Workflows でサポートされている任意のロケーションに配置できます。トリガーと同じロケーションに存在する必要はありません。ただし、ワークフローはトリガーと同じプロジェクトに存在する必要があります。
  • DESTINATION_WORKFLOW_LOCATION(省略可): 宛先ワークフローがデプロイされるロケーション。指定しない場合、ワークフローはトリガーと同じロケーションにあるとみなされます。

  • TOPIC_ID: 既存の Pub/Sub トピックの ID。トピックは、トリガーと同じプロジェクトに存在する必要があります。
  • SERVICE_ACCOUNT_NAME: Workflows で必要な特定のロールを付与した IAM サービス アカウントの名前。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID

注:

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

例:

  gcloud eventarc triggers create pubsub-workflows-trigger-existing \
      --location=us-central1 \
      --destination-workflow=my-workflow \
      --destination-workflow-location=europe-west4 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --transport-topic=${TOPIC_ID} \
      --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

これにより、${TOPIC_ID} で識別される Pub/Sub トピックに pubsub-workflows-trigger-existing というトリガーが作成されます。

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

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-workflow=DESTINATION_WORKFLOW  \
    --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"

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

  • TRIGGER: トリガーの ID または完全修飾識別子。
  • LOCATION: Eventarc トリガーのロケーション。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。
  • DESTINATION_WORKFLOW: トリガーからイベントを受け取る、デプロイ済みワークフローの ID。ワークフローは、Workflows でサポートされている任意のロケーションに配置できます。トリガーと同じロケーションに存在する必要はありません。ただし、ワークフローはトリガーと同じプロジェクトに存在する必要があります。
  • DESTINATION_WORKFLOW_LOCATION(省略可): 宛先ワークフローがデプロイされるロケーション。指定しない場合、ワークフローはトリガーと同じロケーションにあるとみなされます。
  • SERVICE_ACCOUNT_NAME: Workflows で必要な特定のロールを付与した IAM サービス アカウントの名前。
  • PROJECT_ID: 実際の Google Cloud プロジェクト ID

注:

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

例:

  gcloud eventarc triggers create pubsub-workflows-trigger-new \
      --location=us-central1 \
      --destination-workflow=my-workflow \
      --destination-workflow-location=europe-west4 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

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

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

Terraform

Terraform を使用して、ワークフローのトリガーを作成できます。詳細については、Eventarc と Terraform を使用してワークフローをトリガーするをご覧ください。

トリガーを一覧表示する

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

コンソール

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

    [トリガー] に移動

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

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

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

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

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

gcloud

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

gcloud eventarc triggers list --location=-

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

次のステップ