在使用Terraform处理AWS WAFv2时需要注意的要点是什么

总结

    • マネジメントコンソール(手動)で CloudFront 用に作成した AWS WAFv2 を terraform import したときにハマったこと。

 

    最初から terraform で AWS WAFv2 を作成するときも同様にハマったと思う。

迷上了追捧的事物。

AWS提供者的版本过旧。

    • エラー

AWS provider 2.48.0 で terraform import すると、次のようなエラーが出る

Error: unknown resource type: aws_wafv2_web_acl

原因

aws_wafv2_web_acl は、AWS provider 2.67.0 から使えるようになったhttps://github.com/terraform-providers/terraform-provider-aws/pull/12688

対処

AWS provider を 2.67.0 へ上げた
AWS provider を上げた後は、terrafrom init を実行

执行 Terraform 导入的区域与之前不同。

    • エラー

東京リージョンから terraform import すると、次のようなエラーが出る

Error: WAFInvalidParameterException: Error reason: The scope is not valid., field: SCOPE_VALUE, parameter: CLOUDFRONT
{
  RespMetadata: {
    StatusCode: 400,
    RequestID: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  },
  Field: "SCOPE_VALUE",
  Message_: "Error reason: The scope is not valid., field: SCOPE_VALUE, parameter: CLOUDFRONT",
  Parameter: "CLOUDFRONT",
  1 resource "aws_wafv2_web_acl" "example" {
  Reason: "The scope is not valid."
}

原因

AWS WAFv2 の terraform 実行は、us-east-1 (バージニア北部)で実行する必要があるらしい。
ここが参考になったhttps://dev.classmethod.jp/articles/cloudformation-webacl-cloudfront-error/

対処

us-east-1 から terraform import を実行する

$ terraform import -provider="aws.virginia" aws_wafv2_web_acl.example xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/example/CLOUDFRONT

terraform配置示例

構成

└── wafv2
├── backend.tf
├── example.tf
└── provider.tf

provider.tf 抜粋


provider "aws" {
  version                 = "2.67.0"
  shared_credentials_file = "credentials"
  profile                 = "terraform"
  region                  = "ap-northeast-1"
}
provider "aws" {
  version                 = "2.67.0"
  shared_credentials_file = "credentials"
  profile                 = "terraform"
  alias                   = "virginia"
  region                  = "us-east-1"
}
bannerAds