1. はじめに
Cloud Run を使用すると、フルマネージド環境でステートレス コンテナを実行できます。オープンソースの Knative から構築されており、Cloud Run を使用してフルマネージド型でコンテナを実行するか、Cloud Run for Anthos を使用して Google Kubernetes Engine クラスタ内でコンテナを実行するかを選択できます。
Eventarc を使用すると、さまざまなサービス(Cloud Run、Cloud Functions、Workfklows)をさまざまなソースからのイベントに簡単に接続できます。マイクロサービスが疎結合かつ分散されたイベント ドリブン アーキテクチャを構築できます。また、イベントの取り込み、配信、セキュリティ、認可、エラー処理も行うため、デベロッパーのアジリティとアプリケーションの復元力が向上します。
この 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 のソース | Google が所有するサービス(Gmail、ハングアウト、Android の管理など)のイベントソース |
カスタムソース | 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
作成
デプロイした Cloud Run サービスに Pub/Sub トピックにパブリッシュされたイベントをフィルタするトリガーを作成します。
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
eventarc.eventReceiver
ロールを付与して、Cloud Storage トリガーでサービス アカウントを使用できるようにします。
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 コンソールで Cloud Run サービスのログを確認すると、受信したイベントがあるはずです。
8. Cloud Audit Logs トリガーを作成する
Cloud Storage イベントをリッスンするには Cloud Storage トリガーのほうが適していますが、このステップでは同じ処理を行うために Cloud Audit Logs トリガーを作成します。
セットアップ
サービスからイベントを受信するには、Cloud Audit Logs を有効にする必要があります。Cloud コンソールで、左上のメニューから 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 コンソールで 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 を探索する