limitusus’s diary

主に技術のことを書きます

terraformのバージョンを上げようとしたらハマったのでメモしておく

terraform 0.9.11を使っていたが、あるとき0.10系がリリースされたのでバージョンアップを試みたところ、かなりハマってしまったのでメモ。

tl;dr

terraform init -backend-config=/path/to/config -reconfigure

 

今までterraform 0.9系を使ってきたときは単にバイナリを差し替えればよかったのだが、0.10系に上がったことで設定ファイルの形式が変更されたため、よくわかっていない部分でハマったというだけなのだけど。

前提

  • providerはAWSで、AWS accountA上にいろいろ構築
  • backendは別のAWS accountB上にあるS3 bucket内にstateを置くようにしている
  • accountAは普段はSTS AssumeRoleにより利用していて、環境変数をexportしてある。
  • accountBはIAM userであり、認証情報は my-backend.tf に記述してある

ハマった手順

まずバイナリを差し替える。これは簡単。

次にterraform planを試す。

バージョンアップ直後のterraform plan

terraform initをせよと言われる。なるほどと言いつつ実行する。

何も考えずにterraform initした

エラーが発生する。なんでだ…?

とここでかなりハマった。

エラーで検索して調べることしばし、backendの認証情報を渡していないことに気付いた。そりゃ動かん。

github.com

このissueが非常に参考になる。

 

正しくterraform initした

これでinitに成功し、最新のterraformの世界にくることができた。

0.10からはproviderもplugin化され、 .terraform/plugins/ 以下に配置されている。これがバージョン管理できるようになり、provider.aws にversion constraintを記述することで将来の変更で破壊されないようにできる。平和な世界が訪れた。

もちろんこのあとterraform自身のversion constraintも記述した。