Cloud Storage からの直接イベントで Workflows をトリガーする(gcloud CLI)
このクイックスタートでは、Cloud Storage からイベントを受け取る Eventarc トリガーを使用してワークフローを実行する方法について説明します。
トリガーは、Cloud Storage バケット内のオブジェクト作成イベントをリッスンしてワークフローを実行し、そのイベントをランタイム引数として宛先ワークフローに渡します。
このクイックスタートでは、以下の操作を行います。
イベントソースとして Cloud Storage バケットを作成します。
Workflows により、ストレージ バケットの名前とアップロードされたファイルの名前を抽出して返すワークフローを作成してデプロイします。
Cloud Storage バケットを Workflows イベント レシーバに接続する Eventarc トリガーを作成します。
テキスト ファイルを Cloud Storage バケットにアップロードしてイベントを生成します。このイベントは、ランタイム引数として宛先ワークフローに渡されます。
ワークフローの実行結果でバケットの名前とテキスト ファイルの名前を確認します。
このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。
始める前に
組織が Google Cloud 環境に制約を適用すると、このドキュメントの一部の手順が正しく機能しない場合があります。その場合、パブリック IP アドレスやサービス アカウント キーを作成するようなタスクを完了できない場合があります。制約に関するエラーを返すリクエストを行う場合は、制約がある Google Cloud 環境でアプリケーションを開発する方法をご覧ください。
- 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 プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
Eventarc API、Pub/Sub API、Workflows API を有効にします。
gcloud services enable eventarc.googleapis.com pubsub.googleapis.com workflows.googleapis.com workflowexecutions.googleapis.com
gcloud
コンポーネントを更新します。gcloud components update
- 自分のアカウントでログインします。
gcloud auth login
環境変数を設定する
このクイックスタートで使用する環境変数を設定します。
export PROJECT_ID=PROJECT_ID
export WORKFLOW_LOCATION=us-central1
export TRIGGER_LOCATION=us-central1
gcloud config set project ${PROJECT_ID}
gcloud config set workflows/location ${WORKFLOW_LOCATION}
gcloud config set eventarc/location ${TRIGGER_LOCATION}
プロジェクト ID は、Google Cloud コンソールの [ダッシュボード] ページで確認できます。
サービス アカウントを設定する
このクイックスタートで使用するサービス アカウントに必要な権限を付与します。
Cloud Storage サービス アカウントに
pubsub.publisher
ロールを付与します。SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p ${PROJECT_ID})" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'
2021 年 4 月 8 日以前に Pub/Sub サービス アカウントを有効にした場合は、Pub/Sub サービス アカウントに
iam.serviceAccountTokenCreator
ロールを付与します。gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" \ --role='roles/iam.serviceAccountTokenCreator'
PROJECT_NUMBER
は、実際の Google Cloud プロジェクトの番号に置き換えます。プロジェクト番号は、Google Cloud コンソールの [ダッシュボード] ページで確認できます。
サービス アカウントを作成して名前を付けます(例:
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'
Cloud Storage バケットを作成する
イベントソースとして使用する Cloud Storage バケットを作成します。
gsutil mb -l us-central1 gs://${PROJECT_ID}-bucket/
ワークフローを作成してデプロイする
Cloud Storage バケットで作成されたオブジェクトが HTTP リクエストでワークフローをトリガーするときに実行されるワークフローを作成してデプロイします。
ホーム ディレクトリで、
myEventWorkflow.yaml
またはmyEventWorkflow.json
という名前の新しいファイルを作成します。次の内容をコピーして新しいファイルに貼り付け、保存します。
YAML
main: params: [event] steps: - log_event: call: sys.log args: text: ${event} severity: INFO - extract_bucket_object: assign: - bucket: ${event.data.bucket} - object: ${event.data.name} - return_bucket_object: return: bucket: ${bucket} object: ${object}
JSON
{ "main": { "params": [ "event" ], "steps": [ { "log_event": { "call": "sys.log", "args": { "text": "${event}", "severity": "INFO" } } }, { "extract_bucket_object": { "assign": [ { "bucket": "${event.data.bucket}" }, { "object": "${event.data.name}" } ] } }, { "return_bucket_object": { "return": { "bucket": "${bucket}", "object": "${object}" } } } ] } }
ワークフローをデプロイします。
export MY_WORKFLOW=myEventWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myEventWorkflow.yaml
JSON バージョンのサンプル ワークフローをコピーした場合は、
.yaml
を.json
に置き換えます。
Eventarc トリガーを作成する
Eventarc トリガーは、Cloud Storage バケットから Workflows の宛先にイベントを送信します。
Cloud Storage イベントをフィルタするトリガーを作成します。
gcloud eventarc triggers create storage-events-trigger \ --destination-workflow=${MY_WORKFLOW} \ --destination-workflow-location=${WORKFLOW_LOCATION} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=${PROJECT_ID}-bucket" \ --service-account="${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"
これにより、
storage-events-trigger
というトリガーが作成されます。storage-events-trigger
が正常に作成されたことを確認するには、次のコマンドを実行します。gcloud eventarc triggers describe storage-events-trigger --location=${TRIGGER_LOCATION}
イベントを生成して表示する
イベントを生成するには、Cloud Storage にテキスト ファイルをアップロードします。
echo "Hello World" > random.txt gsutil cp random.txt gs://${PROJECT_ID}-bucket/random.txt
アップロードにより、ランタイム引数としてワークフローに渡されるイベントが生成されます。これにより、ストレージ バケットとアップロードされたファイルの名前が返されます。
ワークフローの実行がトリガーされたことを確認するには、直近の 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-10-13T03:38:03.019148617Z END_TIME: 2021-10-13T03:38:03.249705805Z NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a STATE: SUCCEEDED START_TIME: 2021-10-13T17:28:51.492864252Z END_TIME: 2021-10-13T17:28:52.227212414Z
上記の例の
NAME
フィールドで、a6319d9d-36a6-4117-904e-3d1118bdc90a
はワークフロー実行の ID です。次のステップで使用するため、実行 ID をコピーします。イベント メッセージを表示するには:
実行ステータスを確認します。
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
WORKFLOW_EXECUTION_ID
は、ファイルがバケットにアップロードされた時刻に対応するワークフロー実行の ID に置き換えます。出力は次のようになります。
argument: '{"bucket":"PROJECT_ID-bucket","data":{"bucket":"PROJECT_ID-bucket","[...]","timeCreated":"2021-10-13T03:38:01.735Z"," [...]","subject":"objects/random.txt","time":"2021-10-13T03:38:01.735384Z","type":"google.cloud.storage.object.v1.finalized"}' endTime: '2021-10-13T03:38:03.249705805Z' name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/86d2567b-0f1e-49b3-8b10-cdac5d0f6239 result: '{"bucket":"PROJECT_ID-bucket","object":"random.txt"}' startTime: '2021-10-13T03:38:03.019148617Z' state: SUCCEEDED workflowVersionId: '1'
Cloud Storage バケットが更新されている時刻
"timeCreated": "2021-10-13T03:38"
と、ワークフロー実行のstartTime
が互いに対応していることを確認します。次のようなイベント メッセージを探します。
result: '{"bucket":"PROJECT_ID-bucket","object":"random.txt"}'
これで、Eventarc を使用した Workflows イベント レシーバをトリガーする Cloud Storage イベントが正常に生成されました。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースと一緒に Cloud プロジェクトを削除します。
作成したワークフローを削除します。
gcloud workflows delete ${MY_WORKFLOW}
続行を確認するメッセージが表示されたら、「
y
」と入力します。ストレージ バケットを削除します。
gsutil rm -r gs://${PROJECT_ID}-bucket/
このチュートリアルで作成したワークフローを削除します。
gcloud eventarc triggers delete storage-events-trigger
あるいは、Google Cloud プロジェクトを削除して、プロジェクト内で使用しているすべてのリソースへの課金を停止することもできます。
プロジェクトを削除するには、次のようにします。
gcloud projects delete PROJECT_ID_OR_NUMBER
PROJECT_ID_OR_NUMBER
は、Google Cloud プロジェクト ID またはプロジェクト番号に置き換えます。