このチュートリアルでは、未認証の Cloud Run サービスへ Cloud Audit Logs を使用して Cloud Storage から Eventarc を使用してイベントを転送するときに発生するランタイム エラーのトラブルシューティング方法について説明します。
Artifact Registry 標準リポジトリを作成する
コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
REPOSITORY
は、リポジトリの一意の名前に置き換えます。
Cloud Storage バケットを作成する
Cloud Run サービスのイベントソースとして、2 つのリージョンに Cloud Storage バケットを作成します。
us-east1
にバケットを作成します。export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
us-west1
にバケットを作成します。export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
イベントソースの作成後、イベント レシーバ サービスを Cloud Run にデプロイします。
イベント レシーバーをデプロイする
イベントを受信してロギングする Cloud Run サービスをデプロイします。
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
このチュートリアルのコードが、次の内容を含んでいることを確認します。
HTTP
POST
リクエスト内で受信イベントを CloudEvent として受け取るイベント ハンドラ:Go
Java
.NET
Node.js
Python
イベント ハンドラを使用するサーバー:
Go
Java
.NET
Node.js
Python
サービスの運用環境を定義する Dockerfile。Dockerfile の内容は言語によって異なります。
Go
Java
.NET
Node.js
Python
Cloud Build でコンテナ イメージをビルドし、イメージを Artifact Registry にアップロードします。
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service 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-unauthenticated
デプロイに成功すると、コマンドラインにサービスの URL が表示されます。
トリガーを作成する
Cloud Run サービスをデプロイした後は、監査ログを使用して Cloud Storage からのイベントをリッスンするトリガーを設定します。
Cloud Audit Logs を使用して転送された Cloud Storage イベントをリッスンする Eventarc トリガーを作成します。
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
これにより、
troubleshoot-trigger
というトリガーが作成されます。troubleshoot-trigger
が作成されたことを確認するには、次のコマンドを実行します。gcloud eventarc triggers list
出力例を以下に示します。
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
イベントを生成して表示する
サービスが正常にデプロイされ、Cloud Storage からイベントを受信できることを確認します。
ファイルを作成して、
BUCKET1
ストレージ バケットにアップロードします。echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txt
ログをモニタリングして、サービスがイベントを受信するかどうかを確認します。ログエントリを表示するには、次の手順を行います。
ログエントリをフィルタして、JSON 形式で出力を返します。
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
次のようなログエントリを探します。
"textPayload": "Detected change in Cloud Storage bucket: ..."
最初はログエントリが返されません。これは、セットアップに問題があり、調査する必要があることを意味します。
問題を調査する
サービスがイベントを受信しない原因を調査するプロセスを行います。
初期化時間
トリガーはすぐに作成されますが、トリガーが伝播されてイベントがフィルタされるまでに最大で 2 分かかることがあります。次のコマンドを実行して、トリガーが有効であることを確認します。
gcloud eventarc triggers list
出力は、トリガーのステータスを示します。次の例では、troubleshoot-trigger
が 14:16:56 までに有効になります。
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
トリガーが有効になったら、ファイルをストレージ バケットに再度アップロードします。イベントは Cloud Run サービスログに書き込まれます。サービスがイベントを受信しない場合は、イベントサイズに関連している可能性があります。
監査ログ
このチュートリアルでは、Cloud Audit Logs を使用して Cloud Storage イベントが転送され、Cloud Run に送信されます。Cloud Storage の監査ログが有効になっていることを確認します。
Google Cloud コンソールで、[監査ログ] ページに移動します。
- [Google Cloud Storage] チェックボックスをオンにします。
- [管理読み取り]、[データ読み取り]、[データ書き込み] のログタイプが選択されていることを確認します。
Cloud Audit Logs を有効にしたら、ファイルをストレージ バケットに再度アップロードして、ログを確認します。サービスがまだイベントを受信していない場合は、トリガーのロケーションに関連している可能性があります。
トリガーのロケーション
ロケーションが異なる複数のリソースが存在している可能性があります。Cloud Run ターゲットと同じリージョン内のソースからのイベントをフィルタする必要があります。詳細については、Eventarc でサポートされているロケーションと Eventarc のロケーションについてをご覧ください。
このチュートリアルでは、Cloud Run サービスを us-central1
にデプロイしました。eventarc/location
を us-central1
に設定したため、同じロケーションにトリガーも作成しました。
しかし、2 つの Cloud Storage バケットは、us-east1
と us-west1
のロケーションに作成しました。これらのロケーションからイベントを受信するには、各ロケーションで Eventarc トリガーを作成する必要があります。
us-east1
に Eventarc トリガーを作成します。
既存のトリガーのロケーションを確認します。
gcloud eventarc triggers describe troubleshoot-trigger
ロケーションとリージョンを
us-east1
に設定します。gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
コンテナ イメージをビルドして Cloud Run にデプロイし、再度イベント レシーバをデプロイします。
us-east1
に新しいトリガーを作成します。gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
トリガーが作成されたことを確認します。
gcloud eventarc triggers list
トリガーが初期化され、イベントの転送が開始するまでに 2 分ほどかかることがあります。
トリガーが正しくデプロイされたことを確認するには、イベントを生成し表示します。
発生する可能性がある他の問題
Eventarc の使用時に、他の問題が発生することがあります。
イベントサイズ
送信するイベントは、イベントサイズの上限を超えないようにする必要があります。
以前にイベントを配信したトリガーが停止している
ソースがイベントを生成していることを確認します。Cloud Audit Logs で、モニタリング対象サービスがログを出力していることを確認します。ログが記録されていてもイベントが配信されない場合は、サポートにお問い合わせください。
同じトリガー名の Pub/Sub トピックが存在することを確認します。 Eventarc は、Pub/Sub をトランスポート層として使用します。既存の Pub/Sub トピックを使用するか、トピックを自動的に作成して管理します。
- トリガーを一覧取得するには、
gcloud eventarc triggers list
をご覧ください。 Pub/Sub トピックを一覧取得するには、次のコマンドを実行します。
gcloud pubsub topics list
Pub/Sub トピック名に、作成されたトリガーの名前が含まれていることを確認します。例:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Pub/Sub トピックがない場合は、特定のプロバイダ、イベントタイプ、Cloud Run の宛先のトリガーを再度作成します。
- トリガーを一覧取得するには、
サービスにトリガーが構成されていることを確認します。
Google Cloud コンソールで、[サービス] ページに移動します。
サービスの名前をクリックして、[サービスの詳細] ページを開きます。
[トリガー] タブをクリックします。
サービスに関連付けられた Eventarc トリガーが表示されます。
Pub/Sub 指標タイプを使用して、Pub/Sub トピックとサブスクリプションの健全性を確認します。
subscription/dead_letter_message_count
指標を使用して、転送済みの配信不能メッセージをモニタリングできます。この指標は、Pub/Sub がサブスクリプションから転送する配信不能メッセージの数を示します。トピックにメッセージが公開されていない場合は、Cloud Audit Logs で、モニタリング対象サービスがログを出力していることを確認します。ログが記録されていてもイベントが配信されない場合は、サポートにお問い合わせください。
subscription/push_request_count
指標を使用してプッシュ サブスクリプションをモニタリングし、指標をresponse_code
とsubcription_id
でグループ化できます。push エラーが報告された場合は、Cloud Run サービスログを確認します。受信エンドポイントが OK 以外のステータス コードを返した場合、Cloud Run コードが期待どおりに機能していません。この場合、サポートにお問い合わせいただく必要があります。
詳細については、指標しきい値のアラート ポリシーを作成するをご覧ください。