gcloud beta terraform vet のトラブルシューティング

想定した違反でエラーがスローされないのはなぜですか?

検証ロジックをテストして、制約でエラーがスローされていないことがわかった場合は、次のいずれかが原因となっている可能性があります。

  • ポリシー ライブラリは正しく設定されていますか?ポリシー ライブラリに policies/constraints ディレクトリが含まれていることを確認します。このディレクトリには、違反を引き起こすことが想定される制約が含まれています。
  • 違反を含んでいる Terraform リソースは、サポート対象のリソースですか?gcloud beta terraform vet は、そのバージョンでサポートされているリソースの違反のみをチェックできます。--verbosity=debug を付けてコマンドを再実行し、「unsupported resource: google_resource_name」のようなメッセージを探します。または、サポートされているリソースの一覧にリソースが記載されているかどうかを確認します。
  • 制約で正しい Terraform リソースが対象になっていますか?

    1. 制約の kind フィールドを確認します。GCPAppengineLocationConstraintV1 のような形です。
    2. policies/templates ディレクトリで、spec.crd.spec.names.kind と同じ値を持つポリシーを検索します。
    3. rego フィールドで、「asset.asset_type == "appengine.googleapis.com/Application"」のような記述を探します。これは、制約の対象となる CAI アセットタイプです。
    4. その CAI アセットタイプが、サポートされているリソースのリストに含まれていることを確認します。

プロジェクトが定義されていないというエラーが表示されるのはなぜですか?

Resource Ancestry が、正確な CAI アセット名を作成するために使用されます。gcloud beta terraform vet が CAI アセットの祖先を自動的に判別できない場合は、「project: required field is not set」というエラーを返します。--project フラグを使用するか、gcloud config を使用してプロジェクトを設定することで、デフォルト プロジェクトを指定できます。

getting resource ancestry for project PROJECT_ID: googleapi: Error 403: The caller does not have permission, forbidden」というエラーが表示されるのはなぜですか?

--verbosity=debug を付加してコマンドを実行し、「Terraform is using this identity:」のようなメッセージを探します。この後には、API リクエストに使用しているアカウントであるメールアドレスが表示されます。