AWS プログラミング

workspaceを作成したのに、terraform_remote_stateがdefalt環境を参照してしまう。

Terraformでworkspaceを使って構築を進めることは非常に多いと思います。

 

また、その中で他のプロジェクトとの兼ね合いでterraform_remote_stateを使用する場合(現時点では、可能な限りDataSourceの使用が推奨)

に少し詰まったのでそのメモです。

 

以下のqiitaの記事を参考にさせていただきました。

https://qiita.com/atty303/items/d4bf46857dfdb610e3a2

 

仕様の確認

TerraformでtfstateをS3で管理する場合、仮に以下のバケット名とキーで管理すると仮定します。

 

  • バケット名:tfstate-bucket
  • キー:/file/terraform.tfstate

 

この時に、workspace作成済みかどうかで以下のような仕様の差があると思われます。

 

workspace作成済(仮にdevを作成したとする)workspace未作成(defaultのみ)
tfstate-bucket/:env/dev/file/terraform.tfstateを参照tfstate-bucket/file/terraform.tfstate

 

つまり、workspaceを作成している場合「:env/ワークスペース名」が自動で補完されるという感じです。

 

この仕様は、terraform_remote_stateでバックエンドを指定する際も同様と思われます。

 

注意点

上記の仕様はおそらく正しいと思われるのですが、ここで注意点として

workspaceを作成済みにも関わらず、:envと同階層に指定したキーとマッチするtfstateが存在する場合、そちらを参照してしまうようです。

 

 

つまり、workspaceとしてdevを作成しているにも関わらず

 

tfstate-bucket/:env/dev/file/terraform.tfstate

tfstate-bucket/file/terraform.tfstate

 

上記二つのファイルが存在している場合、

 

tfstate-bucket/file/terraform.tfstate

 

こちらを参照してしまうということです。

 

対策

対策としては、冒頭記載したQiitaの記事にもありますが、明示的にキーを指定すれば良いです。

 

:env/${terraform.workspace}/file/terraform.tfstate

 

こんな感じにすればOKです。もし私の作業環境に依存した内容だったらすみません。

 

Terraformを学びたい方へ

Terraformをきちんと学びたい方はUdemyのLearn DevOps: Infrastructure Automation With Terraform がとてもおすすめです。コスパ最高です。

よければ参考にしてみてください。

 

-AWS, プログラミング
-, ,

© 2020 クラインの備忘壺