Terraform0.9.0からremote configがdeprecatedになる
remote config
がdeprecatedになる
terraform0.9.0からterraformコマンド実行するとdeprecated warningがでてきます。
💁 3行
remote config
コマンドがなくなってinit
コマンドが導入されるbackend
という概念が導入されterraform.tfstateファイルを保存する設定をtfファイル側に書くようになってlocalのtfstateは更新されなくなる- ざっくりmigrationする際は、tfstateは一応バックアップしといて、tfファイルにbackendの設定書いて
terraform init
すればOK
設定の書き方
https://www.terraform.io/docs/backends/types/index.html ここの左ペインにStandard Backendsに色々なタイプがあるのでそこを見る。
例: S3
terraform { backend "s3" { bucket = "mybucket" key = "path/to/my/key" region = "us-east-1" } }
例: local
terraform { backend "local" { path = "relative/path/to/terraform.tfstate" } }
そもそもなんでbackendというものを導入しようとしたのか、メリット的なものについて詳しく :pencil2:
該当のPR#11286に詳しく書いてある
remote config
をより一般的な考え方にするために、backend
という概念を導入した- 今ってterraform applyってやるタイミングでインフラ担当一人って感じだけど本当はいろんな箇所から複数同時に実行されることだってあるはず、将来はそうなるはず、そんな時のために、stateをlockしてくれる機能も自動的についてくる
- remote configはコマンドラインベースでオプションを渡す形で設定していたのでわかりにくい、それをファイルベースで明示的に書くことでより基本的な設定とした
init
コマンドに統合してmoduleのdownloadとかも一気にやってくれるようになる- 今まではremote configを見に行くコマンドと見に行かないコマンドがあったけど全部共通して
backend
を通してコマンドを実行するようになる - localにキャッシュされてたtfstateファイルにsecret情報が書かれてしまってたがそもそもlocalにキャッシュされてたtfstateファイルはもう更新されなくなるのでgitに含めなくてOK
- なので.gitignoreに
.terraform/
を追加しよう:exclamation: - localのtfstateのserialがremoteより高いとダメみたいなことが起きなくなる
Lineage
というUUID的なものが導入されてこの値が変わると別のinfraとみなされエラーが出るようになる。具体的なユースケースは間違って別環境のものでapplyしようとしたときとかだろうか 😐