概要
- AWS WAFにて手動でリソース(WebAcl)を作成した
- WAF ACLはCloudFront用
- importしようとしたがうまく行かなくてハマった
- 解決したのでメモ
詳細
- 以下のようなリソースに対してimportを行う
エラー例
- 以下のようなエラーが出た
╷
│ Error: WAFInvalidParameterException: Error reason: The scope is not valid., field: SCOPE_VALUE, parameter: CLOUDFRONT
│ {
│ RespMetadata: {
│ StatusCode: 400,
│ RequestID: "74801f48-cfdc-41f8-adfd-99db932e64e7"
│ },
│ Field: "SCOPE_VALUE",
│ Message_: "Error reason: The scope is not valid., field: SCOPE_VALUE, parameter: CLOUDFRONT",
│ Parameter: "CLOUDFRONT",
│ Reason: "The scope is not valid."
│ }
設定例
- 調査したところScopeが"CLOUDFRONT"の場合はリージョンをus-east-1に設定してimportする必要がある
# ---------------------------------------------
# Main Setting
# ---------------------------------------------
//最低限の設定を記述
provider "aws" {
#region = "ap-northeast-1"
region = "us-east-1" # <--New!
}
terraform {
required_version = ">= 1.1"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.16.0"
}
}
}
//importする対象の空リソース定義を記載
resource "aws_wafv2_web_acl" "app_stg_waf_acl_cf_wafcharm_cloudfront" {}
成功例
コマンドラインでオブジェクトを指定しない場合
$ terraform import
aws_wafv2_web_acl.app_stg_waf_acl_cf_wafcharm_cloudfront a26d77b6-3654-4e67-b5bd-182771b1e521/app-stg-waf-acl-wafcharm-cloudfront/CLOUDFRONT
aws_wafv2_web_acl.app_stg_waf_acl_cf_wafcharm_cloudfront: Importing from ID "a26d77b6-3654-4e67-b5bd-11111111111/app-stg-waf-acl-wafcharm-cloudfront/CLOUDFRONT"...
aws_wafv2_web_acl.app_stg_waf_acl_cf_wafcharm_cloudfront: Import prepared!
Prepared aws_wafv2_web_acl for import
aws_wafv2_web_acl.app_stg_waf_acl_cf_wafcharm_cloudfront: Refreshing state... [id=a26d77b6-3654-4e67-b5bd-11111111111]
Import successful!
- 以下のようにimport完了
$ cat terraform.tfstate
{
"version": 4,
"terraform_version": "1.2.0",
"serial": 1,
"lineage": "1f1b97e2-dc7d-45fe-c119-0d8f161db2a7",
"outputs": {},
"resources": [
{
"mode": "managed",
"type": "aws_wafv2_web_acl",
"name": "stg_waf_acl_cf_wafcharm_cloudfront",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
:
:
}
コマンドラインでオブジェクトを指定する場合
- 以下の作成済みAWSリソース(WAF)をインポートする場合
main.tf
provider "aws" {
region = "ap-northeast-1"
}
provider "aws" {
alias = "virginia"
region = "us-east-1"
}
waf.tf
resource "aws_wafv2_web_acl" "stg_waf_acl_wafcharm_cf" {
}
$ terraform import aws_wafv2_web_acl.stg_waf_acl_wafcharm_cf a26d77b6-3654-xxxxxxxxx-182771b1e521/stg-waf-acl-wafcharm-cloudfront/CLOUDFRONT
Import successful!
- 他にも
//rule groupの場合
$ terraform import aws_wafv2_rule_group.stg_waf_rule_group 83911eed-XXXXXXXXXX-1ab44516b7ac/stg-waf-rule-group-ip-set/CLOUDFRONT
感想
- terraform importをするとコード化の助けになる場合が多いが、特殊なimport方法があると難しい場合もあり、逆に時間がかかったかもしれない。