LoginSignup
0
0

More than 1 year has passed since last update.

Terraformでcountやfor_eachを使って定義したリソースをTerraform管理下から外す方法

Last updated at Posted at 2022-12-16

はじめに

みなさん、こんにちは。今回は既存のリソースをterraform state rmコマンドを使ってTerraform管理下から外す際の小ネタの紹介です。

Terraformで実装する際、たとえば複数複数のリージョンやアベイラビリティゾーンに同様のリソースを配置する際などのユースケースにおいてcountやfor_eachを活用されている方も多いかと思います。このcountやfor_eachを活用して定義したリソースに対して素直にterraform state rmコマンドを実行すると次のようにコマンドがエラーになってしまいます。今回はそんなときの解決方法を紹介したいと思います。

エラー時の出力例
$ terraform state rm google_compute_subnetwork.private["tokyo"]
Acquiring state lock. This may take a few moments...
╷
│ Error: Index value required
│ 
│   on  line 1:
│   (source code not available)
│ 
│ Index brackets must contain either a literal number or a literal string.
╵

Releasing state lock. This may take a few moments...

countやfor_eachで定義したリソースを管理外にする方法

結論から言いますと 「'(シングルクォーテーション)で定義したリソース名を囲む」 が1つの解となります。
出力例のように、Terraformリソース名を'(シングルクォーテーション)で囲んであげると期待通りに既存のリソースがTerraform管理外になる動きとなります。めでたしめでたし。

成功時の出力例
$ terraform state rm 'google_compute_subnetwork.private["tokyo"]'
Acquiring state lock. This may take a few moments...
Removed google_compute_subnetwork.private["tokyo"]
Successfully removed 1 resource instance(s).
Releasing state lock. This may take a few moments...

終わりに

いまさらの情報でしたがいかがだったでしょうか。「え、こんなユースケースなくない?」と思われるかもしれませんが、「ついつい、うっかり既存環境を間違って違うリソースにインポートしちゃいました」といったケースもあるかと思います。そんなときの手助けになれば幸いです。

以上、terraform state rmコマンドを使ってTerraform管理下から外す際の小ネタの紹介でした。


  • Terraform は、HashiCorp, Inc. の米国およびその他の国における商標または登録商標です。
  • その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0