概要
- マネジメントコンソール(手動)で CloudFront 用に作成した AWS WAFv2 を terraform import したときにハマったこと。
- 最初から terraform で AWS WAFv2 を作成するときも同様にハマったと思う。
ハマったこと
AWS provider のバージョンが古かった
- エラー
- 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 import を実行するリージョンが違っていた
- エラー
- 東京リージョンから 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"
}