Pub/Sub メッセージを使用して Workflows をトリガーする(gcloud CLI)
このクイックスタートでは、Pub/Sub を使用してイベントを受信する Eventarc トリガーを使用してワークフローを実行する方法について説明します。トリガーは、Pub/Sub を介して配信されたイベントをランタイム引数として宛先ワークフローに渡すことにより、ワークフローを実行します。
このクイックスタートでは、以下のことを行います。
- Workflows を使用して、Pub/Sub メッセージをデコードして返すワークフローを作成し、デプロイします。
- Pub/Sub トピックを Workflows イベント レシーバに接続する Eventarc トリガーを作成します。
- Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成します。このイベントは、ランタイム引数として宛先ワークフローに渡されます。
- ワークフローの実行結果として Pub/Sub メッセージを確認します。
始める前に
Google Cloud Workflows の非公開プレビューにプロジェクトを追加するようにリクエストして、この機能にアクセスできることを確認します。
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
-
作成した Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
-
作成した Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- gcloud コンポーネントを更新します。
gcloud components update
Eventarc API、Pub/Sub API、Eventarc API を有効にします。
gcloud services enable eventarc.googleapis.com pubsub.googleapis.com workflows.googleapis.com workflowexecutions.googleapis.com
- このチュートリアルで使用する構成変数を設定します。
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}
- サービス アカウントを作成して名前を付けます(例:
my-service-account
)。export MY_SERVICE_ACCOUNT=my-service-account gcloud iam service-accounts create ${MY_SERVICE_ACCOUNT}
- サービス アカウントに
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"
- ユーザーに
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
- Google アカウントのメールアドレス:
ワークフローを作成してデプロイする
Pub/Sub トピックに公開されたメッセージが HTTP リクエストでワークフローをトリガーするときに実行されるワークフローを作成してデプロイします。- ターミナルまたは Cloud Shell を開きます。
- ホーム ディレクトリで、
myFirstWorkflow.yaml
またはmyFirstWorkflow.json
という名前の新しいファイルを作成します。 - 次の内容をコピーして新しいファイルに貼り付け、保存します。
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}" } } ] } }
- ワークフローをデプロイします。
export MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
JSON バージョンのサンプル ワークフローをコピーした場合は、.yaml
を.json
に置き換えます。
Eventarc トリガーを作成する
Pub/Sub トピックにメッセージが公開されると、イベントによってワークフローがトリガーされます。- 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
というトリガーが作成されます。 - トリガーが正常に作成されたことを確認します。
gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}
イベントを生成して表示する
Pub/Sub トピックにメッセージを公開してイベントを生成し、ワークフローをトリガーします。生成されたイベントは、ランタイム引数としてワークフローに渡されます。ワークフローは、ワークフローの実行の結果として Pub/Sub メッセージを返します。ワークフローに渡すイベントのサイズが 512 KB を超えないようにしてください。
新しい Pub/Sub トピックのトリガーを作成した場合は、作成した Pub/Sub トピックを検索して、環境変数として設定します。
export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
ワークフローをトリガーするには、Pub/Sub トピックにメッセージを送信します。
gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
生成されたイベントはランタイム引数としてワークフローに渡され、ワークフローから「Hello where」というメッセージが返されます。
ワークフローの実行がトリガーされたことを確認するには、直近の 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 をコピーして、次の手順で使用します。イベント メッセージを表示するには:
実行ステータスを表示するには:
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
が互いに対応していることを確認します。result: "Hello there!"
イベント メッセージを探します。
これで、Eventarc を使用して Workflows イベント レシーバをトリガーする Pub/Sub トピックにより、イベントが正常に生成されました。
クリーンアップ
- 作成したワークフローを削除します。
gcloud workflows delete ${MY_WORKFLOW}
続行を確認するメッセージが表示されたら、「
y
」と入力します。 - このチュートリアルで作成したワークフローを削除します。
gcloud eventarc triggers delete events-pubsub-trigger