Eventarc を使用して Cloud Storage からイベントを受信する

このチュートリアルでは、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 サービスをデプロイします。

  1. 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 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。

  2. 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/
  3. 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
  4. コンテナ イメージを Cloud Run にデプロイします。

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  5. 「Allow public access to helloworld-events (y/N)?」と入力を求めるメッセージには n(No)と答えます。

Cloud Run サービスの URL が表示されたら、デプロイは完了しています。

Eventarc トリガーを作成する

Eventarc トリガーは、Cloud Storage バケットから helloworld-events Cloud Run サービスにイベントを送信します。このサービスでは認証が必要です。リソースの使用に必要な IAM のロールと権限を持つサービス アカウントを持つ呼び出し元によってイベントがトリガーされる必要があります。

  1. 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. トリガーが正常に作成されたことを確認します。トリガーはすぐに作成されますが、トリガーが完全に機能するまでに 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 サービスによってサービスログに記録されます。

  1. イベントを生成するには:

    Cloud Storage にテキスト ファイルをアップロードします。

     echo "Hello World" > random.txt
     gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    アップロードによりイベントが生成され、Cloud Run サービスはイベントのメッセージをロギングします。

  2. ログエントリを表示するには:

    1. ログエントリをフィルタして、JSON 形式で出力を返します。

      gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
      
    2. 次のようなログエントリを探します。

      "textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
      

ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、1 分後に再度確認してください。