🚀
terraform state rmコマンドの生成を効率化したい
背景
- 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