コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
クイックスタート: Pub/Sub メッセージを使用してワークフローをトリガーする(Google Cloud CLI)

Pub/Sub メッセージを使用して Workflows をトリガーする(gcloud CLI)

このクイックスタートでは、Pub/Sub を使用してイベントを受信する Eventarc トリガーを使用してワークフローを実行する方法について説明します。トリガーは、Pub/Sub を介して配信されたイベントをランタイム引数として宛先ワークフローに渡すことにより、ワークフローを実行します。

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

  1. Workflows を使用して、Pub/Sub メッセージをデコードして返すワークフローを作成し、デプロイします。
  2. Pub/Sub トピックを Workflows イベント レシーバに接続する Eventarc トリガーを作成します。
  3. Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成します。このイベントは、ランタイム引数として宛先ワークフローに渡されます。
  4. ワークフローの実行結果として Pub/Sub メッセージを確認します。

始める前に

Google Cloud Workflows の非公開プレビューにプロジェクトを追加するようにリクエストして、この機能にアクセスできることを確認します。

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

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

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

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

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

  6. Google Cloud CLI をインストールします。
  7. gcloud CLI を初期化するには:

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

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

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

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

  10. gcloud コンポーネントを更新します。
    gcloud components update
  11. Eventarc API、Pub/Sub API、Eventarc API を有効にします。

    gcloud services enable eventarc.googleapis.com pubsub.googleapis.com workflows.googleapis.com workflowexecutions.googleapis.com
  12. このチュートリアルで使用する構成変数を設定します。
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
    
  13. サービス アカウントを作成して名前を付けます(例: my-service-account)。
    export MY_SERVICE_ACCOUNT=my-service-account
    gcloud iam service-accounts create ${MY_SERVICE_ACCOUNT}
  14. サービス アカウントに roles/workflows.invoker ロールを付与します。

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="serviceAccount:${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/workflows.invoker"

  15. ユーザーに roles/iam.serviceAccountTokenCreator ロールを付与します。

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member="PRINCIPAL" \
      --role='roles/iam.serviceAccountTokenCreator'

    PRINCIPAL は、ロールを付与する有効な ID に置き換えます。例:

    • Google アカウントのメールアドレス: user:test-user@gmail.com
    • Google グループ: group:admins@example.com
    • サービス アカウント: serviceAccount:test123@example.domain.com
    • Google Workspace または Cloud Identity ドメイン: domain:example.domain.com

ワークフローを作成してデプロイする

Pub/Sub トピックに公開されたメッセージが HTTP リクエストでワークフローをトリガーするときに実行されるワークフローを作成してデプロイします。
  1. ターミナルまたは Cloud Shell を開きます。
  2. ホーム ディレクトリで、myFirstWorkflow.yaml または myFirstWorkflow.json という名前の新しいファイルを作成します。
  3. 次の内容をコピーして新しいファイルに貼り付け、保存します。

    YAML

    main:
      params: [event]
      steps:
        - decode_pubsub_message:
            assign:
               - base64: ${base64.decode(event.data.message.data)}
               - message: ${text.decode(base64)}
        - return_pubsub_message:
            return: ${message}
          

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "decode_pubsub_message": {
              "assign": [
                {
                  "base64": "${base64.decode(event.data.message.data)}"
                },
                {
                  "message": "${text.decode(base64)}"
                }
              ]
            }
          },
          {
            "return_pubsub_message": {
              "return": "${message}"
            }
          }
        ]
      }
    }
  4. ワークフローをデプロイします。
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
    
    JSON バージョンのサンプル ワークフローをコピーした場合は、.yaml.json に置き換えます。

Eventarc トリガーを作成する

Pub/Sub トピックにメッセージが公開されると、イベントによってワークフローがトリガーされます。
  1. Pub/Sub メッセージをリッスンするトリガーを作成します。

    新しい Pub/Sub トピック

    gcloud eventarc triggers create events-pubsub-trigger \
      --destination-workflow=${MY_WORKFLOW} \
      --destination-workflow-location=${WORKFLOW_LOCATION} \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account="${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"

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

    既存の Pub/Sub トピック

    gcloud eventarc triggers create events-pubsub-trigger \
      --destination-workflow=${MY_WORKFLOW} \
      --destination-workflow-location=${WORKFLOW_LOCATION} \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account="${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
      --transport-topic=TOPIC_ID

    TOPIC_ID は、既存の Pub/Sub トピックの ID に置き換えます。

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

  2. トリガーが正常に作成されたことを確認します。
    gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}

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

Pub/Sub トピックにメッセージを公開してイベントを生成し、ワークフローをトリガーします。生成されたイベントは、ランタイム引数としてワークフローに渡されます。ワークフローは、ワークフローの実行の結果として Pub/Sub メッセージを返します。ワークフローに渡すイベントのサイズが 512 KB を超えないようにしてください。

  1. 新しい Pub/Sub トピックのトリガーを作成した場合は、作成した Pub/Sub トピックを検索して、環境変数として設定します。

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
    
  2. ワークフローをトリガーするには、Pub/Sub トピックにメッセージを送信します。

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

    生成されたイベントはランタイム引数としてワークフローに渡され、ワークフローから「Hello where」というメッセージが返されます。

  3. ワークフローの実行がトリガーされたことを確認するには、直近の 5 つの実行を一覧表示します。

    gcloud workflows executions list ${MY_WORKFLOW} --limit=5
    

    出力は次のようになります。ワークフローを実行するたびに SUCCEEDED と等しい NAME と STATE が表示されます。

    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T19:15:10.275677049Z
    END_TIME: 2021-09-13T19:15:10.963136883Z
    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T17:28:51.492864252Z
    END_TIME: 2021-09-13T17:28:52.227212414Z
    
    上記の例の NAME フィールドで、a6319d9d-36a6-4117-904e-3d1118bdc90a はワークフロー実行の ID です。実行 ID をコピーして、次の手順で使用します。

  4. イベント メッセージを表示するには:

    1. 実行ステータスを表示するには:

      gcloud workflows executions describe WORKFLOW_EXECUTION_NAME
      WORKFLOW_EXECUTION_NAME は、Pub/Sub トピックの公開時間に対応するワークフロー実行の名前に置き換えます。出力は次のようになります。
      argument: {"data":{"message":{"data":"aGVsbG8gd29ybGQ=","messageId":"1234567","publishTime":"2022-01-24T17:42:49.133Z"},"subscription":"projects/my-project/subscriptions/my-subscription"},"datacontenttype":"application/json","id":"1234567","source":"//pubsub.googleapis.com/projects/my-project/topics/my-topic","specversion":"1.0","time":"2022-01-24T17:42:49.133Z","type":"google.cloud.pubsub.topic.v1.messagePublished"}
      endTime: '2021-09-13T17:28:47.301012152Z'
      name: projects/1234567/locations/us-central1/workflows/myFirstWorkflow/executions/f72bc6d4-5ea0-4dfb-bb14-2dae82303120
      result: 'Hello there'
      startTime: '2021-09-13T17:28:51.492864252Z'
      state: SUCCEEDED
      workflowVersionId: '1'
      Pub/Sub メッセージが公開される "publish_time": "2021-09-13T17:28" とワークフロー実行の startTime が互いに対応していることを確認します。

    2. result: "Hello there!" イベント メッセージを探します。

これで、Eventarc を使用して Workflows イベント レシーバをトリガーする Pub/Sub トピックにより、イベントが正常に生成されました。

クリーンアップ

  1. 作成したワークフローを削除します。
    gcloud workflows delete ${MY_WORKFLOW}

    続行を確認するメッセージが表示されたら、「y」と入力します。

  2. このチュートリアルで作成したワークフローを削除します。
    gcloud eventarc triggers delete events-pubsub-trigger
    

次のステップ