Terraform import / state rm

terraform import

AWS MGNで移行したAmazon EC2インスタンスをTerraformで管理する | NHN テコラス Tech Blog | AWS、機械学習、IoTなどの技術ブログ 2022

Terraform で既存のインフラリソースをインポートする方法 | 株式会社ビヨンド 2020

Route53

awsのコンソールなどからIDを持ってきて、それを引数にimportをたたく

$ terraform import aws_route53_zone.mydomain Z1W0SAOSERTYU

recordをimportするときは若干特殊なID指定になる

Route53 Records can be imported using ID of the record. The ID is made up as ZONEID_RECORDNAME_TYPE_SET-IDENTIFIER

こんな感じ

Z4KAPRWWNC7JR_dev.example.com_NS_dev

Terraform Registry

$ terraform import aws_route53_record.www--mydomain QT9WXXXXXXXX_www.mydomain.com_A

terraformでroute53の管理 2020

1.5.0 以降のimport blockだと

import {
  to = aws_route53_record.www--mydomain
  id = "QT9WXXXXXXXX_www.mydomain.com_A"
}

Weighted routing policyの場合はSET-IDENTIFIER(レコードID)が必要

$ terraform import aws_route53_record.www--mydomain QT9WXXXXXXXX_www.mydomain.com_A_id


Terraform管理外の既存のレコードがあると以下のエラー

│ Error: creating Route 53 Record: InvalidChangeBatch: [Tried to create resource record set [name='dev.example.com.', type='A'] but it already exists]

この場合は import する。allow_overwrite での上書きは推奨されていない。

プログラマーの雑記: terraformでRoute53にレコードを追加しようとしたら、「but it already exist」のエラーが発生しました 2019

terraform state rm

Terraform管理下から特定のリソースを外す
作成済みのAWSリソース・削除済みのAWSリソースを、Terraform管理下から外す場合、 terraform state rm コマンドを使用します。

$ terraform state rm <リソースタイプ>.<リソース名>

https://blog.mmmcorp.co.jp/2020/08/30/aws-terraform-sate/

Terraform管理下のリソースを差し替えて辻褄をあわせる場合 state rm 後に import をする。