環境
- terraform 1.3.7
- provider aws 4.51.0
概要
AWS CloudFrontでは、北部バージニア(us-east-1)のACM証明書しか使えない。
そのため、デフォルトのリージョンを東京(ap-northeast-1)等、北部バージニア以外で設定している場合は、Terraformでの既存リソースimport時にも、ACM用に個別のリージョン指定が必要となる。
今回はデフォルトのリージョンが東京のケースを想定。
初期設定
provider "aws" {
access_key = var.access_key
secret_key = var.secret_key
region = var.region
assume_role {
role_arn = var.role_arn
}
}
variable "access_key" {
description = "AWS Access Key"
}
variable "secret_key" {
description = "AWS Secret Key"
}
variable "role_arn" {
description = "AWS Role Arn"
}
variable "region" {
default = "ap-northeast-1"
}
access_key = "XXXXX"
secret_key = "XXXXX"
role_arn = "XXXXX"
resource "aws_acm_certificate" "static" {
domain_name = "static.my-app.com"
validation_method = "DNS"
lifecycle {
create_before_destroy = false
}
}
この状態で、importを実行
terraform import aws_acm_certificate.static arn:aws:acm:us-east-1:XXXXXXXXXXXX:certificate/XXXXXXX
すると、
Cannot import non-existent remote object
のエラーが発生する。
個別にリージョンを指定
そこで、設定を追記し、デフォルトとは別のリージョンを個別で指定する。
provider "aws" {
access_key = var.access_key
secret_key = var.secret_key
region = var.region
assume_role {
role_arn = var.role_arn
}
}
+ provider "aws" {
+ alias = "acm_provider"
+ region = "us-east-1"
}
resource "aws_acm_certificate" "static" {
+ provider = aws.acm_provider
domain_name = "static.my-app.com"
validation_method = "DNS"
lifecycle {
create_before_destroy = false
}
}
これにより、acm.tfのaws_acm_certificate.staticだけは、us-east-1のリージョンを対象としてくれる。import時にもここで指定したリージョンでリソース情報を取りに行くようなので、これでimportすることが可能。
尚、こちらの記事を参考に、
公式ドキュメントに記載のある-provider=provider
オプションを使ってimportを試みたが、そちらはうまくいかなかった。
-provider=provider - Deprecated Override the provider configuration to use when importing the object. By default, Terraform uses the provider specified in the configuration for the target resource, and that is the best behavior in most cases.
最後に
より良い方法や間違い等ありましたらご指摘いただけますと幸いです!