概要
Terraformでインスタンスなどを削除する際、普段xxx.tf
ファイルの該当箇所削除してterraform apply
で消してたんですが、あるとき消す順番の指定が必要になって「仕方ないから2回(消す順に)実行するかー」と思ってtarget
指定したのですが、何故かterraform plan
で変更点が出ませんでしたのでメモ。
環境
- Ubuntu 14.04
- Terraform 0.6.3
通常
xxx.tf
ファイルで該当箇所を消すterraform plan
terraform apply
これは通常の消し方ですね。
target指定
terraform plan -destroy -target=xxxx
terraform destroy -target=xxxx
xxx.tf
ファイルで該当箇所を消す
この場合順番が逆になります。変更点に出なかった原因はxxx.tfで該当箇所を消しているのにtarget指定したためでした。考えてみれば存在しないコードを参照しようとしてもできないですよね。
どんな時に使ったか
AutoScalingGroup(以下ASG)やLaunchConfig(以下LC)の更新をするときに使いました。
Terraformって、初回実行時はELBにASGのインスタンスを追加してくれるが、xxx.tfのELB設定にIDが登録されるわけではないため次回以降のapplyでASGのインスタンスが外されるという問題があります。
さらにASGがLCに依存していて、作成時はLC->ASGの順に作ってくれるため問題ないが、削除もLC->ASGの順に消そうとしてエラーになるという問題があります。
これら2点の問題があるため、ASGとLCを更新する際にtarget指定で消す必要が出てきたわけです。