このチュートリアルでは、Cloud Audit Logs を使用して Cloud Storage からイベントを受信する、認証済みの Cloud Run サービスをデプロイする方法について説明します。このチュートリアルを使用して、本番環境ワークロードをデプロイします。Eventarc トリガーは、Cloud Audit Logs エントリに基づいてイベントをフィルタします。詳細については、Cloud Audit Logs のイベント フィルタを決定するをご覧ください。
このチュートリアルは、 Google Cloud コンソールまたは Google Cloud CLI のいずれを使用しても行うことができます。
Artifact Registry 標準リポジトリを作成する
コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。コンソール
- Google Cloud コンソールで、[リポジトリ] ページに移動します。
- [ リポジトリを作成] をクリックします。
- リポジトリを構成します。
- 一意の [名前] を入力します。
- [形式] は [Docker] を選択します。
- [モード] は [標準] を選択します。
- [ロケーション タイプ] は [リージョン] を選択します。
- [リージョン] リストで、[us-central1(アイオワ)] を選択します。
- その他のデフォルト値はそのままにして、[作成] をクリックします。
gcloud
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
REPOSITORY
は、Artifact Registry リポジトリの一意の名前に置き換えます。
Cloud Storage バケットを作成する
このチュートリアルでは、イベントソースとして Cloud Storage を使用します。ストレージ バケットを作成するには:
コンソール
- Google Cloud コンソールで、[バケット] ページに移動します。
- [ バケットを作成] をクリックします。
- バケット情報を入力し、[続行] をクリックして各ステップを完了します。
- 一意の名前を入力します。例:
eventarcbucket
- [ロケーション タイプ] で [Region] を選択します。
- [ロケーション] で [us-central1(アイオワ)] を選択します。
- [デフォルトのストレージ クラス] として [Standard] を選択します。
- [アクセス制御] で [均一] を選択します。
- 一意の名前を入力します。例:
- [作成] をクリックします。
gcloud
gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION
イベントソースの作成後、Cloud Run にイベント レシーバ サービスをデプロイできます。
イベント レシーバー サービスを Cloud Run にデプロイする
イベントを受信してロギングする Cloud Run サービスをデプロイします。サンプル イベント レシーバ サービスをデプロイするには:
コンソール
- GitHub アカウントにサンプル リポジトリのクローンを作成します。
- GitHub で、GoogleCloudPlatform/golang-samples に移動します。
- [Fork] をクリックします。
- プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。
- GitHub で GoogleCloudPlatform/java-docs-samples に移動します。
- [Fork] をクリックします。
- プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。
- GitHub で GoogleCloudPlatform/dotnet-docs-samples に移動します。
- [Fork] をクリックします。
- プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。
- GitHub で GoogleCloudPlatform/nodejs-docs-samples に移動します。
- [Fork] をクリックします。
- プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。
- GitHub で GoogleCloudPlatform/python-docs-samples に移動します。
- [Fork] をクリックします。
- プロンプトが表示されたら、リポジトリをフォークするロケーションを選択します。
- Google Cloud コンソールで、[サービス] ページに移動します。
- [ サービスの作成] をクリックして、[サービスの作成] フォームを表示します。
- [リポジトリから継続的にデプロイする] を選択します。
GitHub リポジトリに対する変更は、Artifact Registry のコンテナ イメージに自動的に反映され、Cloud Run にデプロイされます。
- [Cloud Build の設定] をクリックし、[Cloud Build の設定] フォームを開きます。
- 指示が表示された場合は、Cloud Build API と Artifact Analysis API を有効にします。
- [リポジトリ プロバイダ] で [GitHub] を選択します。 まだ認証されていない場合は、[認証] をクリックし、指示に沿って Cloud Build GitHub アプリを使用してリポジトリに接続します。
- プロンプトが表示されたら、[Google Cloud Build のインストール] をクリックします。
- [リポジトリ] で、フォークした GitHub リポジトリを選択します。
- [次へ] をクリックします。
- [ブランチ] フィールドに「
^main$
」と入力します。 - [ビルドタイプ] で [Dockerfile] を選択し、Dockerfile のソースの場所を指定します。
eventarc/audit-storage/Dockerfile
or
eventarc/audit_storage/Dockerfile
(Go)
- [保存] をクリックします。
- [サービスの作成] フォームに、サービス名を入力します。例:
helloworld-events
- サービスを配置する [リージョン] として [us-central1(アイオワ)] を選択します。
- Cloud Run サービスで許可する上り(内向き)トラフィックに基づいて、[Ingress] オプションのいずれかを選択します。
- [認証が必要] を選択します。
- [作成] をクリックします。
Go
![[Fork] ボタンのスクリーンショット](https://docs.cloud.google.com/static/run/docs/images/fork-repo.png?hl=ja)
Java
![[Fork] ボタンのスクリーンショット](https://docs.cloud.google.com/static/run/docs/images/fork-repo.png?hl=ja)
.NET
![[Fork] ボタンのスクリーンショット](https://docs.cloud.google.com/static/run/docs/images/fork-repo.png?hl=ja)
Node.js
![[Fork] ボタンのスクリーンショット](https://docs.cloud.google.com/static/run/docs/images/fork-repo.png?hl=ja)
Python
![[Fork] ボタンのスクリーンショット](https://docs.cloud.google.com/static/run/docs/images/fork-repo.png?hl=ja)
gcloud
- GitHub リポジトリのクローンを作成します。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
- コンテナをビルドして、Cloud Build にアップロードします。
gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
- コンテナ イメージを Cloud Run にデプロイします。
gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
未認証の呼び出しの許可を求めるメッセージには、「
n
」と入力します。デプロイに成功すると、コマンドラインにサービスの URL が表示されます。
これで helloworld-events
というイベント レシーバ サービスが Cloud Run にデプロイされたので、トリガーを設定できます。
Eventarc トリガーを作成する
Eventarc トリガーは、Cloud Storage バケットから helloworld-events
Cloud Run サービスにイベントを送信します。
コンソール
- Google Cloud コンソールで、[トリガー] ページに移動します。
- [ トリガーを作成] をクリックします。
- トリガー名を入力します。
これはトリガーの ID で、先頭は英字にする必要があります。63 文字以下の小文字、数字、ハイフンで構成します。
- トリガーのタイプを選択します。
- 自社: Google Cloudプロバイダから(直接または Cloud Audit Logs エントリを介して)送信されたイベント、または Pub/Sub メッセージを使用してプロバイダから送信されたイベントをフィルタリングします。
- サードパーティ: サードパーティ プロバイダから送信されるイベントを除外します。
- [イベント プロバイダ] リストで、イベントのソースとして [Cloud Storage] を選択します。
- [イベントタイプ] リストで [storage.objects.create] を選択します。
- [リージョン] リストで、イベントを受信するリージョンとして [us-central1] を選択します。
- 作成したサービス アカウントを選択します。例:
SERVICE_ACCOUNT_ID@PROJECT_ID
。iam.gserviceaccount.com - [イベントの宛先] リストで、[Cloud Run] を選択します。
- [Cloud Run サービスを選択] リストで、[helloworld-events] を選択します。
- [作成] をクリックします。 Cloud Run コンソール ページを使用して Eventarc トリガーを作成することもできます。
gcloud
- Cloud Storage イベントをフィルタし、作成したサービス アカウントを使用するトリガーを作成します。
gcloud eventarc triggers create events-tutorial-trigger \ --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" \ --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
PROJECT_ID
は、 Google Cloudプロジェクト ID に置き換えます。ここで
type
: トリガーのフィルタ条件が満たされたときに監査ログが作成されるよう指定します。serviceName
: 監査ログを書き込むサービス(Cloud Storage)。methodName
: 監査対象のオペレーション(storage.objects.create
)。
events-tutorial-trigger
というトリガーが作成されます。 events-tutorial-trigger
が正常に作成されたことを確認するには、次のコマンドを実行します。gcloud eventarc triggers list --location=$REGION
トリガー
events-tutorial-trigger
が helloworld-events
のターゲットとともに表示されます。イベントを生成して表示する
- イベントを生成するには:
コンソール
- 「Hello World」というテキストを含むテキスト ファイルを
random.txt
という名前で保存します。 - Google Cloud コンソールで、[バケット] ページに移動します。
- 作成したストレージ バケットを選択します。
- [オブジェクト] タブで、[ファイルをアップロード] をクリックして
random.txt
ファイルをアップロードします。
gcloud
Cloud Storage にファイルをアップロードします。
echo "Hello World" > random.txt gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
- 「Hello World」というテキストを含むテキスト ファイルを
- ログエントリを表示するには:
- Google Cloud コンソールで、[サービス] ページに移動します。
- サービスの一覧から、作成したサービスの名前をクリックして、[サービスの詳細] ページに移動します。
- このサービスのすべてのリビジョンのリクエストログとコンテナログを取得するには、[ログ] タブをクリックします。ログの重大度でフィルタリングできます。
- 次のようなログエントリを探します。
ここで、Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
は、Cloud Storage バケットの名前です。 -
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
- 次のようなログエントリを探します。
ここで、Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
は、Cloud Storage バケットの名前です。
コンソール
gcloud
イベント レシーバ サービスを Cloud Run にデプロイし、Eventarc トリガーを作成して、Cloud Storage からイベントを生成し、それを Cloud Run ログで確認できました。