📦
複数の Terraform リソースを一度に別の tfstate ファイルに移動する
Terraform の tfstate ファイル間のリソースの移動方法は,基本的には以下の記事の通りです。
この記事では複数リソースを移動したい場合の方法を書きます。
方法
やることはシンプルで,リソースをファイルで列挙して xargs
で terraform state mv
を繰り返すだけです。
- 移動元ディレクトリで
terraform state list
を実行することで,その tfstate ファイル内の全リソースを取得できるので,そこから移動対象のリソースを抜き出して resources.txt ファイルに保存する。 - 移動元ディレクトリで以下を実行し,移行するリソースを export.tfstate に取り出す。
cat resources.txt | xargs -I {} terraform state mv -state-out=export.tfstate {} {}
- export.tfstate ファイルを移動先ディレクトリに移動する。
- 移動先ディレクトリで以下を実行し,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