このチュートリアルでは、Eventarc を介してイベントを受け取る認証済みの Cloud Run サービスを使用して、コンテナ化されたアプリケーションをデプロイする方法について説明します。
Eventarc トリガーのフィルタを指定すると、イベントソースやイベント ターゲットなど、イベントの転送を構成できます。この場合、Cloud Storage バケットが更新されるとイベントがトリガーされ、リクエストが HTTP リクエストの形式で Cloud Run サービスに送信されます。
Artifact Registry 標準リポジトリを作成する
コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
REPOSITORY
は、リポジトリの一意の名前に置き換えます。
Cloud Storage バケットを作成する
イベントソースとして使用する Cloud Storage バケットを作成します。
gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1
イベントソースの作成後、Cloud Run にイベント レシーバー サービスをデプロイできます。
Cloud Run にイベント レシーバをデプロイする
イベントを受信してロギングする Cloud Run サービスをデプロイします。
GitHub リポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Cloud Run のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/eventarc/audit-storage/
Python
cd python-docs-samples/eventarc/audit-storage/
Go
cd golang-samples/eventarc/audit_storage/
Java
cd java-docs-samples/eventarc/audit-storage/
C#
cd dotnet-docs-samples/eventarc/audit-storage/
Cloud Run サービスのコンテナをビルドします。
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=helloworld-events 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
「Allow public access to helloworld-events (y/N)?」と入力を求めるメッセージには
n
(No)と答えます。
Cloud Run サービスの URL が表示されたら、デプロイは完了しています。
Eventarc トリガーを作成する
Eventarc トリガーは、Cloud Storage バケットから helloworld-events
Cloud Run サービスにイベントを送信します。このサービスでは認証が必要です。リソースの使用に必要な IAM のロールと権限を持つサービス アカウントを持つ呼び出し元によってイベントがトリガーされる必要があります。
Cloud Storage イベントをフィルタするトリガーを作成します。
gcloud eventarc triggers create ${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
これにより、
helloworld-events
というトリガーが作成されます。Google Cloud プロジェクトで初めて Eventarc トリガーを作成する場合は、Eventarc サービス エージェントのプロビジョニングに遅延が発生する可能性があります。この問題は通常、トリガーを再度作成することで解決できます。詳細については、権限拒否エラーをご覧ください。
トリガーが正常に作成されたことを確認します。トリガーはすぐに作成されますが、トリガーが完全に機能するまでに 2 分ほどかかることがあります。
gcloud eventarc triggers list --location=${REGION}
出力例を以下に示します。
NAME: helloworld-events TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: helloworld-events ACTIVE: Yes
イベントを生成して表示する
テキスト ファイルを Cloud Storage バケットにアップロードして、Cloud Run サービスに転送されるイベントを生成します。このイベントは、Cloud Run サービスによってサービスログに記録されます。
イベントを生成するには:
Cloud Storage にテキスト ファイルをアップロードします。
echo "Hello World" > random.txt gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
アップロードによりイベントが生成され、Cloud Run サービスはイベントのメッセージをロギングします。
ログエントリを表示するには:
ログエントリをフィルタして、JSON 形式で出力を返します。
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
次のようなログエントリを探します。
"textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、1 分後に再度確認してください。