🚀

terraform state rmコマンドの生成を効率化したい

2024/03/17に公開

背景

  • Terraformで既存コードをリファクタリングしたい場合(冗長なコードをfor_eachを用いて短縮する等)
  • 既存resourceをterraform管理外にした上で、terraform importする必要がある
  • 対象ファイルに対してterraform state rmコマンドを逐一生成するのがめんどくさい

結論

以下シェルファイルを作成した。
generate_tf_state_rm_commands.sh

#!/bin/bash
echo "カレントディレクトリのファイル一覧:"
select TF_FILE in $(ls *); do
    echo "選択されたファイル: $TF_FILE"
    break
done
STATE_FILE=$TF_FILE

# "resource"行を抽出し、terraform state rmコマンドを生成
grep "^resource" $TF_FILE | while read -r line ; do
    resource_type=$(echo $line | cut -d '"' -f 2)
    resource_name=$(echo $line | cut -d '"' -f 4)
    echo "terraform state rm $resource_type.$resource_name"
done

利用方法

  • コマンド生成したいディレクトリにshファイルを配置
  • 以下コマンドを実行
$ sh generate_tf_state_rm_commands.sh
  • コマンド生成したいファイルを選択
カレントディレクトリのファイル一覧:
 1) LICENSE
 2) README.md
 3) data.tf
 4) ec2.tf
 5) generate_tf_state_rm_commands.sh
 6) main.tf
 7) network.tf
#? 7
  • terraform state rmコマンドが自動生成される
選択されたファイル: network.tf
terraform state rm aws_subnet.private_1a

その他

  • terraform importコマンドの生成も効率化したい

Discussion