Cloud Audit Logs を使用してワークフローをトリガーする(gcloud CLI)
このクイックスタートでは、BigQuery から Cloud Audit Logs イベントを受信する Eventarc トリガーを使用してワークフローを実行する方法について説明します。BigQuery は、アクセスしてアプリケーションに統合できる一般公開データセットをホストしています。トリガーは、一般公開データセットに対してクエリを実行する BigQuery ジョブをリッスンしてワークフローを実行します。次に、イベントをランタイム引数として宛先ワークフローに渡します。
このクイックスタートでは Google Cloud CLI を使用します。
- Workflows を使用して、イベントからデータを抽出して返すワークフローを作成してデプロイします。
- BigQuery ジョブを Workflows イベント レシーバに接続する Eventarc トリガーを作成します。
- bq コマンドライン ツールを使用して BigQuery ジョブを実行し、イベントを生成します。このイベントは、ランタイム引数として宛先ワークフローに渡されます。
- ワークフロー実行出力でイベントデータを確認します。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
gcloud
コンポーネントを更新します。gcloud components update
- アカウントを使用してログインします。
gcloud auth login
- Compute Engine、Eventarc、Pub/Sub、Workflows API を有効にします。
gcloud services enable \ compute.googleapis.com \ 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}
-
プロジェクト作成者には、オーナーロール(
roles/owner
)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへの完全アクセス権に必要な権限が含まれており、この手順は省略できます。プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。詳細については、イベントの宛先のロールと権限のページをご覧ください。
必要な権限
このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Eventarc 管理者(
roles/eventarc.admin
) -
ログ表示アクセス者(
roles/logging.viewAccessor
) -
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
) - サービス アカウント管理者(
roles/iam.serviceAccountAdmin
) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) -
Service Usage 管理者 (
roles/serviceusage.serviceUsageAdmin
) -
ワークフロー管理者(
roles/workflows.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
Eventarc 管理者(
Compute Engine のデフォルトのサービス アカウントをメモしておいてください。テスト目的で、Eventarc トリガーに関連付けて、トリガーの ID を示すためです。このサービス アカウントは、Compute Engine を使用する Google Cloud サービスを有効にするか、使用すると自動的に作成されます。メールアドレスの形式は次のとおりです。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
は、実際の Google Cloud プロジェクトの番号に置き換えます。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。gcloud projects describe PROJECT_ID --format='value(projectNumber)'
本番環境では、新しいサービス アカウントを作成して、必要最小限の権限を含む、最小権限の原則に従った 1 つ以上の IAM ロールを付与することを強くおすすめします。
- プロジェクトの Eventarc イベント レシーバーのロール(
roles/eventarc.eventReceiver
)を Compute Engine のデフォルト サービス アカウントに付与して、Eventarc トリガーがイベント プロバイダからイベントを受信できるようにします。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- プロジェクトのワークフロー起動元ロール(
roles/workflows.invoker
)を Compute Engine のデフォルト サービス アカウントに付与し、ワークフローをトリガーする権限を付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
- ワークフローが Cloud Logging にログを送信できるように、プロジェクトの Logging ログ書き込みロール(
roles/logging.logWriter
)を Compute Engine のデフォルト サービス アカウントに付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/logging.logWriter
- 2021 年 4 月 8 日以前に、認証済みの Pub/Sub push リクエストをサポートするために Cloud Pub/Sub サービス エージェントを有効にした場合は、サービス アカウント トークン作成者のロール(
roles/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
ワークフローを作成してデプロイする
BigQuery ジョブの完了時に実行され、HTTP リクエストでワークフローをトリガーするワークフローを作成してデプロイします。
- ターミナルまたは Cloud Shell を開きます。
- ホーム ディレクトリで、
myFirstWorkflow.yaml
またはmyFirstWorkflow.json
という名前の新しいファイルを作成します。 - 次の内容をコピーして新しいファイルに貼り付け、保存します。
YAML
main: params: [event] steps: - log_event: call: sys.log args: text: ${event} severity: INFO - extract_data: assign: - data: ${event.data.protoPayload} - return_data: return: data: ${data}
JSON
{ "main": { "params": [ "event" ], "steps": [ { "log_event": { "call": "sys.log", "args": { "text": "${event}", "severity": "INFO" } } }, { "extract_data": { "assign": [ { "data": "${event.data.protoPayload}" } ] } }, { "return_data": { "return": { "data": "${data}" } } } ] } }
- ワークフローをデプロイします。
export MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
JSON バージョンのサンプル ワークフローをコピーした場合は、
.yaml
を.json
に置き換えます。
Eventarc トリガーを作成する
BigQuery から Workflows の宛先にイベントを転送する Eventarc トリガーを作成するには、gcloud eventarc triggers create
コマンドを実行します。
BigQuery イベントをフィルタするトリガーを作成します。
gcloud eventarc triggers create events-cal-trigger \ --destination-workflow=${MY_WORKFLOW} \ --destination-workflow-location=${WORKFLOW_LOCATION} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=bigquery.googleapis.com" \ --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
これにより、
events-cal-trigger
というトリガーが作成されます。Google Cloud プロジェクトで初めて Eventarc トリガーを作成する場合、Eventarc サービス エージェントのプロビジョニングに遅延が発生することがあります。この問題は通常、トリガーを再度作成することで解決できます。詳細については、権限拒否エラーをご覧ください。
events-cal-trigger
が正常に作成されたことを確認するには、次のコマンドを実行します。gcloud eventarc triggers describe events-cal-trigger --location=${TRIGGER_LOCATION}
出力には、トリガーの作成時刻とロケーションが次のように表示されます。
createTime: '2021-10-14T15:15:43.872360951Z' [...] name: projects/PROJECT_ID/locations/us-central1/triggers/events-cal-trigger
イベントを生成して表示する
bq コマンドライン ツールから BigQuery ジョブを実行し、イベントを生成してワークフローをトリガーします。
ワークフローをトリガーするには、一般公開データセットにアクセスして情報を取得する BigQuery ジョブを実行します。
bq query --nouse_legacy_sql \ 'SELECT COUNT(*) FROM `bigquery-public-data`.samples.shakespeare'
生成されたイベントは、ランタイム引数としてワークフローに渡されます。ワークフローは、ワークフローの実行の結果としてペイロード データを返します。
ワークフローがトリガーされたことを確認するには、最後の 2 つの実行を一覧取得します。
gcloud workflows executions list ${MY_WORKFLOW} --limit=2
BigQuery ジョブによって 2 つのワークフロー実行がトリガーされます(イベントの 1 つはジョブの変更、もう 1 つはジョブ挿入そのものを示すものです)。出力には、実行ごとに
SUCCEEDED
に等しいNAME
とSTATE
がリストされ、次のようになります。NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2 STATE: SUCCEEDED START_TIME: 2024-02-06T14:16:14.390549813Z END_TIME: 2024-02-06T14:16:14.870102511Z NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179 STATE: SUCCEEDED START_TIME: 2024-02-06T14:16:14.389882601Z END_TIME: 2024-02-06T14:16:14.829942525Z
出力で、
NAME
フィールドのa073ad6a-c76b-4437-8d39-2ab3ade289d2
がワークフロー実行の ID です。実行 ID をコピーして、次の手順で使用します。実行ステータスを表示するには、次のコマンドを実行します。
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
WORKFLOW_EXECUTION_ID
は、BigQuery ジョブの完了時刻に対応するワークフロー実行の ID に置き換えます。出力例を以下に示します。
argument: [...] duration: 0.277917625s endTime: '2024-02-06T14:16:14.870102511Z' name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2 result: '{"data": [...]}' startTime: '2024-02-06T14:16:14.390549813Z' state: SUCCEEDED
BigQuery ジョブが完了した
startTime
とワークフロー実行のSTART_TIME
が互いに対応していることを確認します。
これで、Eventarc を使用して Workflows イベント レシーバーをトリガーする BigQuery イベントが正常に生成されました。
クリーンアップ
- 作成したワークフローを削除します。
続行を確認するメッセージが表示されたら、「gcloud workflows delete ${MY_WORKFLOW}
y
」と入力します。 - 作成したトリガーを削除します。
gcloud eventarc triggers delete events-cal-trigger
- また、Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID