Terraform 0.12 から 0.13 へバージョンアップした

この記事は公開されてから半年以上経過しています (公開日2020年9月21日)。

Terraform 0.13 がリリースされて 1 ヶ月ほどたったので、今使っている 0.12 を 0.13 へバージョンアップした。


2020/09 時点で最新版の Terraform v0.13 系をダウンロードする。

Terraform のルートディレクトリへ移動する。

$ cd terraform

terraform planを実行して差分が出ない状態であることを確認する。

$ terraform plan


まず Terraform のバージョンを 0.13 へ変更する。
required_version が記載されている箇所を変更する。ここではversions.tfに記載されているのでそれを変更する。

terraform {
  required_version = ">= 0.13"


$ terraform 0.13upgrade
This command will update the configuration files in the given directory to use
the new provider source features from Terraform v0.13. It will also highlight
any providers for which the source cannot be detected, and advise how to

We recommend using this command in a clean version control work tree, so that
you can easily see the proposed changes as a diff against the latest commit.
If you have uncommited changes already present, we recommend aborting this
command and dealing with them before running this command again.

Would you like to upgrade the module in the current directory?
  Only 'yes' will be accepted to confirm.

  Enter a value: yes


Upgrade complete!

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.


$ terraform init -reconfigure

Initializing the backend...

Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.

Initializing provider plugins...
- Using previously-installed hashicorp/aws v3.6.0
- Using previously-installed -/aws v3.6.0

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, we recommend adding version constraints in a required_providers block
in your configuration, with the constraint strings suggested below.

* -/aws: version = "~> 3.6.0"
* hashicorp/aws: version = "~> 3.6.0"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.


$ terraform apply




元々 v0.12 のときには s3 のリソース作成時にリージョンを指定するようにしてたが、 v0.13 では以下のようなエラーが出た。
これは v0.13 では region の指定が不要になったためなので削除すれば良い。

Error: Computed attribute cannot be set

  on s3.tf line 48, in resource "aws_s3_bucket" "hogehoge":
  48:   region = "ap-northeast-1"


Error: Provider configuration not present

To work with aws_ssm_activation.hogehoge its original provider configuration
at provider["registry.terraform.io/-/aws"] is required, but it has been
removed. This occurs when a provider configuration is removed while objects
created by that provider still exist in the state. Re-add the provider
configuration to destroy aws_ssm_activation.lightsail, after which you can
remove the provider configuration again.



メールアドレスが公開されることはありません。 * が付いている欄は必須項目です