Terraform 0.12 系から重い腰をあげて 0.13 系にあげる作業を進めていましたが、いくつかエラーが発生したので、その対応の顛末について。
terraform の version constraint でエラーになる
0.13upgrade
コマンドを実行すれば良いんやろと雑に考えて、Batch update を以下のように実行するとエラーです。
$ find . -name '*.tf' | xargs -n1 dirname | uniq | xargs -n1 terraform 0.13upgrade -yes Error: Unsupported Terraform Core version on tests/aws/kohari/runtimes/development/cacheable_frontend/main.tf line 2, in terraform: 2: required_version = "0.12.29" This configuration does not support Terraform version 0.13.3. To proceed, either choose another supported Terraform version or update this version constraint. Version constraints are normally set for good reason, so updating the constraint may lead to other errors or unexpected behavior.
これを実行したのは terraform の 0.13.3 だったのですが、そもそも 0.12.29 を要求しているので 0.13upgrade
コマンドすら実行できない模様です。このため、まずは tfupdate を使って一気に version constraint を 0.13.3 にあげました。
$ cd $(git rev-parse --show-toplevel) $ tfupdate terraform -r -v 0.13.3 .
terraform init
で Failed to decode current backend config
エラー
0.13upgrade
コマンドを実行後、terraform init
を実行するとエラーになります。
$ terraform init Initializing modules... Initializing the backend... Error: Failed to decode current backend config The backend configuration created by the most recent run of "terraform init" could not be decoded: unsupported attribute "lock_table". The configuration may have been initialized by an earlier version that used an incompatible configuration structure. Run "terraform init -reconfigure" to force re-initialization of the backend.
lock_table
等、既にサポートされていないキーが .terraform/terraform.tfstate
に残っていることが原因のようです。以下のように、サポートされなくなった key-value を削除して terraform init
を再実行しましょう。
--- terraform.tfstate.orig 2020-09-22 08:19:52.000000000 +0900 +++ terraform.tfstate 2020-09-22 08:29:44.000000000 +0900 @@ -18,7 +18,6 @@ "iam_endpoint": null, "key": "ses/terraform.tfstate", "kms_key_id": null, - "lock_table": null, "max_retries": null, "profile": null, "region": null, @@ -27,10 +26,8 @@ "session_name": null, "shared_credentials_file": null, "skip_credentials_validation": null, - "skip_get_ec2_platforms": null, "skip_metadata_api_check": null, "skip_region_validation": null, - "skip_requesting_account_id": null, "sse_customer_key": null, "sts_endpoint": null, "token": null,
これで terraform init
が成功するようになります。