📦

複数の Terraform リソースを一度に別の tfstate ファイルに移動する

2022/11/25に公開

Terraform の tfstate ファイル間のリソースの移動方法は,基本的には以下の記事の通りです。

https://www.karakaram.com/moving-terraform-resources-to-another-tfstate-file/

この記事では複数リソースを移動したい場合の方法を書きます。

方法

やることはシンプルで,リソースをファイルで列挙して xargsterraform state mv を繰り返すだけです。

  1. 移動元ディレクトリで terraform state list を実行することで,その tfstate ファイル内の全リソースを取得できるので,そこから移動対象のリソースを抜き出して resources.txt ファイルに保存する。
  2. 移動元ディレクトリで以下を実行し,移行するリソースを export.tfstate に取り出す。
cat resources.txt | xargs -I {} terraform state mv -state-out=export.tfstate {} {}
  1. export.tfstate ファイルを移動先ディレクトリに移動する。
  2. 移動先ディレクトリで以下を実行し,export.tfstate にあるリソースを移動先 tfstate ファイルに移動する。
terraform state pull > terraform.tfstate
cat resources.txt | xargs -I {} terraform state mv -state=export.tfstate -state-out=terraform.tfstate {} {}
terraform state push terraform.tfstate

バックアップファイルの取り扱い

terraform state mv を実行するごとに(リソースを1個ずつ移動するごとに),操作対象となったローカルファイルのバックアップが作成されます。移行が正常に完了していることが確認されていれば,全部削除して問題ありません。

万が一途中で失敗した場合,バックアップファイルを元に復元を試みましょう。

Discussion