あきろぐ

いろいろめもするよ

Terraform v0.12からv0.15にupgradeするときにつまったところ

やっとTerraformのアップグレードに手をつけました。 そのときにつまったときのメモを残しておきます。

リソースに存在しない属性がサポートされていない

aws_codedeploy_appリソースに存在しない属性がサポートされていないというエラーが0.13にアップグレードしたときにでました。 terraform state show aws_codedeploy_app.testで属性を確認してもunique_idは存在していません。 色々と調べたところ、AWSプロバイダv3のバグっぽかったので、AWSプロバイダを3.24->3.50.0まであげることで解決しました。

Instance aws_codedeploy_app.test data could not be decoded from the state:
unsupported attribute "unique_id".

github.com

プロバイダアドレスがレガシーで無効

terraform 0.13upgradeコマンドを実行しているのに、以下のエラーがでました。

Error: Invalid legacy provider address
This configuration or its associated state refers to the unqualified provider "aws".
You must complete the Terraform 0.13 upgrade process before upgrading to later versions.

よくよくUpgradeガイドを見てみると、v0.13以前とv0.14移行だとTerraformのステートスナップショットのフォーマットが異なるらしく、一度v0.13でterraform applyコマンドを差分がなくても実行しておく必要がありました。 このコマンドを実行し、v0.14にあげると上記のエラーは消えました。

Terraform v0.14 does not support legacy Terraform state snapshot formats from prior to Terraform v0.13, so before upgrading to Terraform v0.14 you must have successfully run terraform apply at least once with Terraform v0.13 so that it can complete its state format upgrades.

www.terraform.io

ignore_changesが無視されてリソースを削除しようとする

これは、v0.13->v.014にアップグレードするときに遭遇したエラーです。こちらも調べたところv0.14.0のバグでした。 ignore_changesのマップキーが複数存在すると、一部がignore_changesの対象にならないっぽいです。 v0.14.1のbug fixによってこの問題は解消されているので、アップグレードすることで解決しました。

github.com