読者です 読者をやめる 読者になる 読者になる

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しようとしたときとかだろうか 😐