tfstateファイルの保存先を変更する際に行ったこと
こんにちは、CURUCURU エンジニアの兄山です。 今日は Terraform における tfstate の保存先を変更した際に、再作成を走らせることなく変更する方法を記事にまとめます。
あまり経験することがなく、記事もあまりありませんでしたのでお役に立てれば幸いです。 ※tfstate はリモート(AWS、GCP、Terraform Cloud 等のクラウドストレージサービス)に管理している前提でお話しします。
tfstate とは
Terraform で管理しているリソースの現在の状態を表す JSON ファイルです。
リモート管理したい際は下記のように、terraform
ブロックにbackend
を指定するだけです。
次にterraform init
を実行するとモジュールがインストールされます。
terraform {
...
...
...
backend "gcs" {
bucket = "hoge"
prefix = "fuga/piyo"
}
}
リモート管理しているファイルの場所を変更したい
本題に入ります。
今回はリモート管理しているファイルの保存先を
fuga/piyo
-> fuga/piyo2
に変えたいです。
コードベースだと下記のようにして保存先を変更できます。
terraform {
...
...
...
backend "gcs" {
bucket = "hoge"
prefix = "fuga/piyo2"
}
}
上記のように変更してterraform init
を実行すると新しい保存先に tfstate ファイルが保存さます。
再作成(create)されることなく、tfstate の保存先だけ変更
変更後の tfstate で apply しようとすると前の terraform 管理下から外れてしまうため再作成が行われます。
では、再作成を行うことなく tfstate の保存先の変更だけ行いたい場合はどうしたら良いのでしょうか。
結論以下が手順になります。
- 元のフォルダ(
fuga/piyo
)の tfstate を指定し、terraform init
- tfstate をローカルに保存
backend
に保存したい保存先(fuga/piyo2
)を記載- ローカルに保存した tfstate をリモートのストレージに保存
.terraform
,terraform.lock.hcl
を削除し、terraform init
コードベースで書くと以下になります
terraform init
terraform state pull > hogera.tfstate
terraform {
...
...
...
backend "gcs" {
bucket = "hoge"
prefix = "fuga/piyo2"
}
}
terraform state push hogera.tfstate
terraform init
これで、再作成を行うことなく tfstate の保存先の変更だけできるようになりました。
まとめ
tfstate のフォルダ先だけ変更行う手順を紹介しました。
tfstate の管理は特に慎重に行わなければなりません。
terraform plan
で変更箇所もしっかりと確認するようにしましょう。
以上兄山でした。