18
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

terraformのimportブロックを使ってみての感想

Last updated at Posted at 2023-12-01

メタップスアドベントカレンダー二日目の記事です。

terraformのバージョン1.6が出て約2カ月が経ちました。
今回のメジャーアップデートの注目ポイントとして、importブロックがありました。
こちらを使用してみての感想を書いてみます。
正直舐めてました。

importブロックとは

terraformにはimportという機能があります。terraformの管理下に無いリソースを管理下に置きたい場合使用します。
importブロックとは、terraform importコマンドと同等のことをコードに書けるというものです。
importブロックは

import {
  to = xxx.xxx
  id = yyy
}

のように記載し、importコマンド

terraform import xxx.xxx yyy

と同じ結果になります。

利点

利点としては、

  • importのし忘れを防げる
  • importしていない状態でコードとの差分が見られる
  • 実際にimportされるのはapplyコマンド実行時

が挙げられます。

importのし忘れを防げる

apply前にimportをしなければならず、その作業を忘れてしまう可能性は大いにあります。
それを防ぐことができるのは大きな利点と言えそうです。

importしていない状態でコードとの差分が見られる

importコマンドの場合、実際にimportしなければコードとの差分を確認することはできませんでした。
しかし、importブロックを使えば、実際にimportしていないにも関わらず差分を確認することができます。

実際にimportされるのはapplyコマンド実行時

importコマンドの場合、import作業とapply作業には多少なりとも間が空いてしまいますが、importブロックではimportとapplyが1操作でほとんど時間を開けず実行できます。

欠点

欠点としては、

  • 一度applyしてしまうと不要なブロックになってしまう
  • terraform importコマンドと大して手間は変わらない

が挙げられます。

一度terraform applyしてしまうと不要なブロックになってしまう

一旦applyしてしまえば不要なコードになってしまうため、どこかのタイミングで消した方が良いです。

terraform importコマンドと対して手間は変わらない

importブロックによって劇的に手間が省けるようになるかと言われると、特にそういう訳では無いです。
むしろ後々ブロックを消す手間の分余計な作業が増えてしまいます。

ユースケース

importブロックの恩恵を一番受けられる場面は
複数人が並行でコードを変更している
時です。

terraform importコマンドの最も怖い部分は、importした後コードに適切な変更が加わらないままapplyしてしまうところだと思います。
これはimportしたリソースを意図せず削除もしくは変更してしまうことになってしまうので避けなければなりません。

ただ、複数人が同時にコードに手を加えている場合、

  1. Aの変更のためにterraform importコマンドを実行
  2. Bの変更を適用する
  3. Aの変更を適用する

のような順番になってしまうとimportしたリソースが削除されてしまいます。
しかし、importしなければコードとの差分を見れないため、importとコード修正をほぼノータイムでできる場面は限られます。

また、PRをmergeしたタイミングで自動で変更が適用されるようなパイプラインを組んでいる場合、他の人がimportしていることに気づかずmergeしてしまうことも十分あり得ます。

このような場合、importブロックは有用です。

実際経験したこととして、リソースをimportしてPRを作成している間に緊急リリースをしなければならない時があり、慌てて緊急リリース用のPRをmergeしたところimportしたリソースが消えるという事がありました。

できるなら…

terraform state rmコマンドもコード化できるようにしてほしい

まとめ

importブロックは複数人で開発している場合とても便利なものであることがわかりました。

感想

最初この新機能を知った時、大して手間が変わらないのになぜこの機能が実装されたのか疑問でしたが、使ってみるとなるほどと唸りました。正直舐めてました。
(リリースノート読めよというツッコミはなしでお願いします)

18
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?