Carpe Diem

備忘録

Terraformでtarget指定の削除

概要

Terraformでインスタンスなどを削除する際、普段xxx.tfファイルの該当箇所削除してterraform applyで消してたんですが、あるとき消す順番の指定が必要になって「仕方ないから2回(消す順に)実行するかー」と思ってtarget指定したのですが、何故かterraform planで変更点が出ませんでしたのでメモ。

環境

  • Ubuntu 14.04
  • Terraform 0.6.3

通常

  1. xxx.tfファイルで該当箇所を消す
  2. terraform plan
  3. terraform apply

これは通常の消し方ですね。

target指定

  1. terraform plan -destroy -target=xxxx
  2. terraform destroy -target=xxxx
  3. 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指定で消す必要が出てきたわけです。

参考