1. はじめに

Cloud Run を使用すると、フルマネージド環境でステートレス コンテナを実行できます。オープンソースの Knative をベースに構築されており、Cloud Run を使用してフルマネージド型でコンテナを実行するか、Cloud Run for Anthos を使用して Google Kubernetes Engine クラスタ内でコンテナを実行するかを選択できます。

Eventarc を使用すると、さまざまなサービス(Cloud Run、Cloud Functions、Workflows)をさまざまなソースからのイベントに簡単に接続できます。これにより、マイクロサービスが疎結合で分散されたイベント ドリブン アーキテクチャを構築できます。また、イベントの取り込み、配信、セキュリティ、認可、エラー処理も自動的に行われるため、デベロッパーのアジリティとアプリケーションの復元力が向上します。
この Codelab では、Eventarc について学習します。具体的には、Eventarc を使用して Pub/Sub、Cloud Storage、Cloud Audit Logs からイベントをリッスンし、Cloud Run サービスに渡します。
学習内容
- Eventarc のビジョン
- Eventarc でイベントを検出する
- Cloud Run シンクを作成する
- Pub/Sub のトリガーを作成する
- Cloud Storage のトリガーを作成する
- Cloud Audit Logs のトリガーを作成する
- Eventarc UI を探索する
2. Eventarc のビジョン
Eventarc は、さまざまな Google、Google Cloud、サードパーティのイベントソースから Google Cloud イベントの宛先にイベントを配信することを目的としています。

Google Cloud ソース | Google Cloud 所有のプロダクトであるイベントソース |
Google のソース | Gmail、ハングアウト、Android Management などの Google 所有のプロダクトであるイベントソース |
カスタムソース | Google 所有のプロダクトではなく、エンドユーザー自身が作成したイベントソース |
サードパーティのソース | Google 所有でも顧客作成でもないイベントソース。これには、サードパーティのプロバイダやパートナーが所有および管理する Check Point CloudGuard、Datadog、ForgeRock、Lacework などの一般的なイベントソースが含まれます。 |
イベントは、サービス間の相互運用性を確保するために CloudEvents v1.0 形式に正規化されます。CloudEvents は、イベントデータを一般的な形式で記述するベンダーニュートラルなオープン仕様であり、サービス、プラットフォーム、システム間の相互運用性を実現します。
3. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。



- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「
PROJECT_ID」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。 - 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。
始める前に
Cloud Shell で、プロジェクト ID が設定されていることを確認します。
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
4. Cloud Run サービスをデプロイする
イベントを受信する Cloud Run サービスをデプロイします。CloudEvents の内容をログに記録する Cloud Run の Hello コンテナをデプロイします。
まず、Cloud Run に必要なサービスを有効にします。
gcloud services enable run.googleapis.com
hello コンテナを Cloud Run にデプロイします。
REGION=us-central1 SERVICE_NAME=hello gcloud run deploy $SERVICE_NAME \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
成功すると、コマンドラインにサービス URL が表示されます。ブラウザ ウィンドウでサービス URL を開いて、サービスがデプロイされたことを確認できます。
5. イベント検出
Eventarc でトリガーを作成する前に、イベントソース、送信できるイベントのタイプ、イベントを消費するためのトリガーの構成方法を確認できます。
さまざまな種類のイベントのリストを表示するには:
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
各イベントタイプの詳細を取得するには:
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
特定のイベントタイプを発行するサービスのリストを表示するには:
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
各サービスが発行できるメソッド名(サブイベント)のリストを表示するには:
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
6. Pub/Sub トリガーを作成する
イベントを受信する方法の一つは、Cloud Pub/Sub を使用することです。任意のアプリケーションが Pub/Sub にメッセージをパブリッシュでき、これらのメッセージは Eventarc を介して Cloud Run に配信できます。
セットアップ
トリガーを作成する前に、Eventarc に必要なサービスを有効にします。
gcloud services enable eventarc.googleapis.com
また、トリガーで使用するサービス アカウントも必要です。サービス アカウントの作成:
SERVICE_ACCOUNT=eventarc-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
作成
Pub/Sub トピックにパブリッシュされるイベントを、デプロイした Cloud Run サービスにフィルタリングするトリガーを作成します。
TRIGGER_NAME=trigger-pubsub gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
テスト
Pub/Sub トリガーは、内部でトピックを作成します。これを調べて、変数に割り当ててみましょう。
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
gcloud を使用して、トピックにメッセージをパブリッシュします。
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
Cloud Run サービスは、受信したメッセージの本文をログに記録します。これは、Cloud Run インスタンスの [ログ] セクションで確認できます。

既存の Pub/Sub トピックを使用して作成する
デフォルトでは、Pub/Sub トリガーを作成すると、Eventarc が内部でトピックを作成して、アプリケーションと Cloud Run サービス間のトランスポート トピックとして使用できるようになります。これは、Pub/Sub 使用のトリガーを簡単かつ迅速に作成する場合に便利ですが、既存のトピックを使用したい場合もあります。Eventarc では、--transport-topic gcloud フラグを使用して、同じプロジェクト内の既存の Pub/Sub トピックを指定できます。
この仕組みを確認するには、転送トピックとして使用する Pub/Sub トピックを作成します。
TOPIC_ID=eventarc-topic gcloud pubsub topics create $TOPIC_ID
トリガーを作成する
TRIGGER_NAME=trigger-pubsub-existing gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
トピックにメッセージを送信して、トリガーをテストできます。
gcloud pubsub topics publish $TOPIC_ID --message="Hello again"
7. Cloud Storage トリガーを作成する
このステップでは、Cloud Storage からのイベントをリッスンするトリガーを作成します。
セットアップ
まず、イベントを受信するバケットを作成します。
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
サービス アカウントを Cloud Storage トリガーで使用できるように、eventarc.eventReceiver ロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Cloud Storage トリガーの Cloud Storage サービス アカウントに pubsub.publisher ロールを追加する必要もあります。
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
--role roles/pubsub.publisher
作成
バケットからサービスに新しいファイル作成イベントを転送するトリガーを作成します。
TRIGGER_NAME=trigger-storage gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
テスト
すべてのトリガーを一覧表示して、トリガーが正常に作成されたことを確認します。
gcloud eventarc triggers list
ファイルを Cloud Storage バケットにアップロードします。
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET_NAME/random.txt
Cloud Console で Cloud Run サービスのログを確認すると、受信したイベントが表示されます。

8. Cloud Audit Logs トリガーを作成する
Cloud Storage イベントをリッスンするには Cloud Storage トリガーを使用する方が適していますが、この手順では、同じ処理を行う Cloud Audit Logs トリガーを作成します。
セットアップ
サービスからイベントを受信するには、Cloud Audit Logs を有効にする必要があります。Cloud Console で、左上のメニューから IAM & Admin と Audit Logs を選択します。サービスリストで [Google Cloud Storage] をオンにします。

右側で Admin、Read、Write が選択されていることを確認し、Save をクリックします。

作成
バケットからサービスに新しいファイル作成イベントを転送するトリガーを作成します。
TRIGGER_NAME=trigger-auditlog-storage gcloud eventarc triggers create $TRIGGER_NAME\ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
テスト
監査ログのトリガーの初期化には少し時間がかかります。すべてのトリガーを一覧表示して、トリガーが作成されたことを確認できます。
gcloud eventarc triggers list
ACTIVE フィールドが Yes になっていることを確認します。
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage google.cloud.audit.log.v1.written Cloud Run service: hello Yes
先ほど行ったように、同じファイルを Cloud Storage バケットにアップロードします。
gsutil cp random.txt gs://$BUCKET_NAME/random.txt
Cloud Console で Cloud Run サービスのログを確認すると、受信したイベントが表示されます。

9. Eventarc UI を探索する
この手順では、Google Cloud コンソールの Eventarc UI を確認します。Eventarc UI では、すべてのトリガーの概要を取得し、トリガーの編集と削除を行い、Google Cloud コンソールから新しいトリガーを作成できます。
Google Cloud の Eventarc セクションに移動します。

以前に作成したトリガーのリストが表示されます。

トリガーをクリックすると、トリガーの詳細を表示したり、編集または削除したりできます。

Create trigger を選択して、トリガーの詳細を入力することで、新しいトリガーを作成することもできます。

10. 完了
以上で、この Codelab は完了です。
学習した内容
- Eventarc のビジョン
- Eventarc でイベントを検出する
- Cloud Run シンクを作成する
- Pub/Sub のトリガーを作成する
- Cloud Storage のトリガーを作成する
- Cloud Audit Logs のトリガーを作成する
- Eventarc UI を探索する