このページでは、Eventarc Advanced の使用時に発生する可能性のある問題を解決する方法について説明します。
CMEK の問題
顧客管理の暗号鍵(CMEK)を使用して、Eventarc を保護できます。鍵は Cloud Key Management Service(Cloud KMS)で作成され、管理されます。次の表に、Cloud KMS を Eventarc で使用する場合のさまざまな CMEK の問題とその解決方法を示します。Eventarc リソースの作成または更新時に発生する問題
| CMEK の問題 | エラー メッセージ | 説明 |
|---|---|---|
| 無効なキー | $KEY is not enabled, current state is: DISABLED |
指定された Cloud KMS 鍵が Eventarc リソースで無効になっています。リソースに関連付けられているイベントやメッセージは保護されなくなります。 ソリューション:
|
| 割り当てを超過しました | Quota exceeded for limit |
Cloud KMS リクエストの割り当て上限に達しました。 ソリューション:
|
| リージョンが一致しない | Key region $REGION must match the resource to be protected |
指定された KMS 鍵のリージョンがリソースのリージョンと異なります。 ソリューション: 同じリージョンの Cloud KMS 鍵を使用します。 |
| 組織のポリシーの制約 | project/PROJECT_ID violated org policy constraint |
Eventarc は、組織全体で CMEK が使用されるように、次の 2 つの組織のポリシーの制約と統合されています。既存の Eventarc リソースは、リソースの作成後に設定されたポリシーの対象になりませんが、リソースの更新が失敗する可能性があります。
|
イベント配信中に発生する問題
| CMEK の問題 | エラー メッセージ | 説明 |
|---|---|---|
| 無効なキー | $KEY is not enabled, current state is: DISABLED |
指定された Cloud KMS 鍵が Eventarc リソースで無効になっています。リソースに関連付けられているイベントやメッセージは保護されなくなります。 ソリューション:
|
| 割り当てを超過しました | Quota exceeded for limit |
Cloud KMS リクエストの割り当て上限に達しました。 ソリューション:
|
| 権限エラー | Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on
resource $KEY (or it may not exist) |
指定された Cloud KMS 鍵が存在しないか、Identity and Access Management(IAM)の権限が適切に構成されていません。 ソリューション:
|
Cloud External Key Manager(Cloud EKM)を介して外部管理鍵を使用する場合に発生する可能性のある問題を解決するには、Cloud EKM エラー リファレンスをご覧ください。
HTTP 400 Bad Request エラー
パイプラインで一般的な HTTP 400 Bad Request エラーが発生した場合、多くの場合、変換またはメッセージ バインディングの問題、またはターゲット エンドポイントに関連する問題を示しています。次のことを行ってください。
- CEL 式に構文エラーや論理エラーがないか確認します。たとえば、このドキュメントの変換に関する問題をご覧ください。
- イベント メッセージが想定されるスキーマに準拠していることを確認します。たとえば、このドキュメントのリクエスト形式が無効ですをご覧ください。
- イベントの宛先自体がエラーを返している場合は、ターゲット エンドポイントを確認します。
HTTP 503 Service Unavailable エラー
DNS アドレス(Cloud Run など)を使用してメッセージを Google の宛先に転送するパイプラインで HTTP 503 Service Unavailable エラーが発生した場合は、ネットワーク アタッチメントで使用されるサブネットでプライベート Google アクセスが有効になっていることを確認してください。有効になっていないと、DNS アドレスを解決できません。
Eventarc サービス エージェントの使用中に権限が拒否されました
Eventarc Advanced リソースの作成中に次のエラーが発生した場合は、数分(場合によっては 7 分)待ってからリソースを再度作成してください。
Permission denied while using the Eventarc Service Agent. If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. Otherwise, verify that it has Eventarc Service Agent role.
サービス エージェントは、特定のプロジェクトの特定の Google Cloud サービスの ID として機能します。詳細については、サービス エージェントで、Eventarc サービス エージェントのロール(roles/eventarc.serviceAgent)の Identity and Access Management(IAM)権限をご覧ください。
リソースの作成を再度試行しても、前のエラーが引き続き発生する場合は、次の手順に沿って、Eventarc サービス エージェントが Google Cloud プロジェクトに存在し、必要なロールが付与されていることを確認します。
Cloud Run ジョブへの公開に関する問題
このセクションでは、Cloud Run ジョブにイベントをパブリッシュするときに発生する可能性のある問題を解決する方法について説明します。エンドツーエンドのデモについては、クイックスタートをご覧ください。
HTTP 403 Forbidden エラー
ジョブ構成をオーバーライドする Cloud Run ジョブ(メッセージ バインディングの定義など)の実行中に HTTP 403 Forbidden エラーが発生した場合は、Eventarc パイプラインで使用される OAuth サービス アカウントに Cloud Run デベロッパー(roles/run.developer)または Cloud Run ジョブのオーバーライド付き実行者(roles/run.jobsExecutorWithOverrides)の IAM ロールが付与されていることを確認してください。詳細については、特定の実行のジョブ構成をオーバーライドするをご覧ください。
リクエスト形式が無効です
メッセージ バインディングを定義するときは、http_endpoint_message_binding_template キーを使用して、Cloud Run Admin API で想定される形式({"body": ""} など)にイベントを変換する必要があります。
キーがない場合や空の場合、ジョブに転送されるイベント メッセージは Cloud Run ジョブ エンドポイントの想定されるスキーマに準拠しないため、イベント メッセージがジョブの実行を正常にトリガーできません。
変換に関する問題
メッセージ バインディングを指定したときにイベントデータが期待どおりに変換されない場合は、CEL 式の構文が正しいことを確認してください。
CEL 式が正しくない
たとえば、次の式では、CEL 拡張関数を使用する必要がある場合に、引用符付きの文字列置換(\"${message.data}\" など)を使用して変数の値を評価して挿入します。
cel_expression: "{\"body\":{\"overrides\":{\"containerOverrides\":[{\"env\":[{\"name\":\"CLOUD_EVENT_PAYLOAD\",\"value\":\"${message.data}\"},{\"name\":\"CLOUD_EVENT_ATTRIBUTES\",\"value\":\"${message.attributes}\"}]}]}}}"
また、イベント属性はメッセージ オブジェクトの最上位フィールドであり、message.attributes などの個別の属性フィールドには含まれていません。受信した CloudEvents メッセージの各属性には、message.key 値を使用してアクセスする必要があります。ここで、key は属性の名前です。
正しい CEL 式
これらの問題を解決するには、toJsonString() 関数をオブジェクトに直接追加して、メッセージ データを JSON 文字列として渡します。ペイロードを除外してイベント属性を JSON 文字列としてキャプチャするには、message.removeFields(["data"]).toJsonString() を使用します。次に例を示します。
cel_expression: "{\"body\":{\"overrides\":{\"containerOverrides\":[{\"env\":[{\"name\":\"CLOUD_EVENT_PAYLOAD\",\"value\":\"message.data.toJsonString()\"},{\"name\":\"CLOUD_EVENT_ATTRIBUTES\",\"value\":\"message.removeFields(['data']).toJsonString()\"}]}]}}}"
詳細については、受信したイベントを変換するをご覧ください。