🐈
Terraformでリソース不整合になったときにはstate rmで解決するかもしれない
※注意 terraform state rm で解決するのはおそらく場合によります
状況
tfファイルでresourceAとresourceBが同じ実リソースを向いてしまってて、その状態でplanがno change
になる状況。
具体的なイメージはこんな感じ。
同じ名前のDBユーザを作ろうとしてしまった感じですね(これ自体は設定ミス)
# resourceA
resource "google_sql_user" "dbuserA" {
name = "hoge" # > 同じユーザを作ろうとしてしまっている!
instance = "instance1"
password = "hogepass"
}
# resourceB
resource "google_sql_user" "dbuserB" {
name = "hoge" # > 同じユーザを作ろうとしてしまっている!
instance = "instance1"
password = "hogepass"
}
片方を消そうとすると…
上記の状態で普通に片方(ex. dbuserB) を消そうとすると、同じDBユーザの hoge
ユーザを消そうとしてしまいます。
hoge
ユーザは残すのが正しいので、消されてしまっては困りますね。。
解決方法: terraform state rm
この状態になった場合、terraformが管理しているstateファイルからdbuserBだけを消しちゃえばOK。実リソースには影響が無いので気にせず実行してしまって大丈夫です。
# dry runで `google_sql_user.db_userB` を消そうとしてみる
terraform state rm -dry-run google_sql_user.db_userB
# tfファイルとstateから指定したリソースを消してしまいます(実リソースには影響なし)
terraform state rm google_sql_user.db_userB
# moduleバージョンはこちら
terraform state rm module.[モジュール名].google_sql_user.db_userB
これで無事不整合解消できました 🎉
Discussion