タイトルのようなことがあって困ったので、忘れないようにメモ。
Terraformのtargetオプション
Terraformを使っていると「このresourceに関するところだけ差分を見たい」「あのモジュールに関するところだけapplyしたい」ということが時々ある。いつもあっては困るのだが、例外的な取り扱いをしている場合とかにたまにある。そうした場合、target
オプションはスコープを狭めることができるので便利。
% terraform plan -target hoge.fuga
targetで指定した以外のリソースも差分として出てくる場合
が、targetで指定したもの以外が差分として検知されてしまう場合がある。どういう時かというと
- xxxをtargetに指定
- xxxが依存しているリソースにyyyやzzzがある
- yyyやzzzにも差分がある
というケース。この場合、terraform plan -target xxx
とやっても、yyyやzzzに関する差分が検出されてしまう。targetの指定の仕方が悪いのかと思ってしばらくはまっていた。理由を知ると「それはそうか...」という気持ちになるが、気付かないと結構分からなくて困った。
depends_on
などで明示的に依存関係を書いているときはまだ気付けるが、var
などで参照しているだけというときは結構気付きにくい。terraformのstateファイルをterraform state pull | jq .
などと見ると、明示的でない依存関係も
"dependencies": [ "module.hoge.fuga", "abc" ]
などという風に列挙されているので、この辺をヒントに紐解いていくことができそう。あと、一応helpコマンドには以下のようにdependenciesのこともちゃんと言及されてあり、ヘルプをちゃんと読め...という話でもあった。
-target=resource Limit the planning operation to only the given module, resource, or resource instance and all of its dependencies. You can use this option multiple times to include more than one object. This is for exceptional use only.