👽

terraformerのtfstateがv0.13以降のtfstateとフォーマット違う場合の対処法

2021/10/14に公開

tfstateにはバージョンがある

tfstateにはv1とv2の二つのバージョンがあります。
tfstate/v1
tfstate/v2

v1はv0.12以前でv2はv0.13以降のフォーマットです。
ちなみに上記のページはv0.12のために特別に作られたものらしいです

Note: This is documentation for the next version of the tfstate Sentinel import, designed specifically for Terraform 0.12. This import requires Terraform 0.12 or higher, and must currently be loaded by path, using an alias, example: import "tfstate/v2" as tfstate.

注:これは、Terraform0.12用に特別に設計されたtfstateSentinelインポートの次のバージョンのドキュメントです。このインポートにはTerraform0.12以降が必要であり、現在、エイリアスを使用してパスでロードする必要があります。例:import "tfstate / v2" astfstate。.

terraformerではv0.12のフォーマットで出力される

それでterraformerを使った際にv1(v0.12.31)のバージョンでtfstateが生成されます

例えば以下のようなtfstateが出力されます

{
    "version": 3,
    "terraform_version": "0.12.31",
    "serial": 1,
    "lineage": "d88f2d80-21a3-7e13-37f0-34cccf7b1cc2",
    "modules": [
    ...

そのため、v2のフォーマットに変更しないと、v0.13以降のTerraformで使う際に使えないです。

で、フォーマットの変更は普通にバージョンアップでできます、以下、解決法です

解決法

terraformer使うと生成されるgenerateの中のtfstateファイルある部分でterraform initします。

そして、バージョンv0.13で以下のコマンドうってバージョンアップします。

terrraform 0.13upgrade

それで成功したら、以下のコマンドでプロバイダー変更します

terraform state replace-provider registry.terraform.io/-/aws hashicorp/aws

そうすると、フォーマット変わってtfstate/v2になります。

これで、v0.13以降のバージョン使っている場合でもterraformerで取り込んだtfstateを使えるようになります。

あれ?Terraformerで取り込んだtfstateなんか違うぞ、と思った人はこれやれば良いと思います。

Discussion