AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

terraform import 実行時に変数読み込みファイル (var-file) を指定する

追記: これルートドメインを管理しようとしているけど、ルートドメインのホストゾーンは Terraform で管理しないほうが良いらしい (結果として管理やめたので救われた感

-var-file を指定してから terraform の各種第 2 引数にあたるコマンドを書くのだと思っていて、だいぶ苦しんでしまった。 このような順番で指定する。

terraform import -var-file=${ファイルパス} aws_route53_zone.zone zone_id

aws_route53_zone.zone は、実行前に自分で resource "aws_route53_zone" "zone" {} のように、扱うための空リソースを作成しておく。

zone_id はマネジメントコンソールなりから確認して転記する。

+ files/
  - terraform.tfvars.minimal
+ plan_output/
- main.tf
- variables.tf
- route53.tf

こんな感じで組んでいて、 編集させたい値を記述した外部ファイルとして files/terraform.tfvars.staging が存在する。

(variables.tf は変数の宣言 variables "prefix" {} みたいに記述だけしている)

で,例えば onamae.com とかでドメイン取得していて、ネイキッドドメインのホストゾーンだけ手動で作成してしまったのでインポートしたい、とかの場合、以下のようにやる。

❯ terraform import -var-file=./files/terraform.tfvars.minimal aws_route53_zone.zone zone_id

前述したけど、レジストラが Route53 とは限らないパターンがあるので。 ちょっとつらみありますね。

特に .dev ドメインが取得できなかったり、会計とか日本語サービスがいい! という理由でお名前.com が選ばれることはわりとあると思うので。

まあここまでやって、結局僕は import 使うのやめました。 data "aws_route53_zone" "zone" {} で事足りそうなのと、 backend がリモートとはいえ、初回セットアップする人が覚えてないといけないワンステップ増えてしまう! というのが邪悪になりそうだったので。

うーん、マネジメントコンソールって実は意外と頑張ってるんだなあ。