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 initをせよと言われる。なるほどと言いつつ実行する。
エラーが発生する。なんでだ…?
とここでかなりハマった。
エラーで検索して調べることしばし、backendの認証情報を渡していないことに気付いた。そりゃ動かん。
このissueが非常に参考になる。
これでinitに成功し、最新のterraformの世界にくることができた。
0.10からはproviderもplugin化され、 .terraform/plugins/ 以下に配置されている。これがバージョン管理できるようになり、provider.aws にversion constraintを記述することで将来の変更で破壊されないようにできる。平和な世界が訪れた。
もちろんこのあとterraform自身のversion constraintも記述した。