LoginSignup
0
0

More than 1 year has passed since last update.

【Terraform】AWSの既存リソースをimportする際にデフォルトのリージョンとは別のリージョンを指定する

Posted at

環境

  • terraform 1.3.7
  • provider aws 4.51.0

概要

AWS CloudFrontでは、北部バージニア(us-east-1)のACM証明書しか使えない。
そのため、デフォルトのリージョンを東京(ap-northeast-1)等、北部バージニア以外で設定している場合は、Terraformでの既存リソースimport時にも、ACM用に個別のリージョン指定が必要となる。

今回はデフォルトのリージョンが東京のケースを想定。

初期設定

provider.tf
provider "aws" {
  access_key = var.access_key
  secret_key = var.secret_key
  region     = var.region

  assume_role {
    role_arn = var.role_arn
  }
}
variables.tf
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"
}
production.tfvars
access_key      = "XXXXX"
secret_key      = "XXXXX"
role_arn        = "XXXXX"
acm.tf
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.tf
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"
}
acm.tf
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.

最後に

より良い方法や間違い等ありましたらご指摘いただけますと幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0