0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

terraform state rm でリソースが見つからないエラー

Posted at

問題

for_eachでstring型をキーとするリソースを作成しました。terraform state rm でsteteファイルからリソースを削除しようとしたところ、エラーが出て削除ができませんでした。

main.tf
resource "random_pet" "main" {
  for_each = toset(["a", "b", "c"])
}
❯ terraform state list
random_pet.main["a"]
random_pet.main["b"]
random_pet.main["c"]

❯ terraform state rm random_pet.main["c"]
╷
│ Error: Index value required
│
│   on  line 1:
│   (source code not available)
│
│ Index brackets must contain either a literal number or a literal string.

原因

ダブルクォーテーションをエスケープしていないからです。
このエラーの原因は、コマンドライン引数の解釈にあります。Terraformは、リソース名に含まれるダブルクォーテーション(")をコマンドの一部として誤って解釈してしまいます。これは、シェルの引数解析メカニズムとTerraformの期待する入力形式の不一致から生じる問題です。

解決方法

Linux, macOSの場合、リソース名をシングルクォーテーション(')で囲ってください。
これにより、シェルがダブルクォーテーションを特別な文字として解釈することを防ぎ、Terraformに正しい形式でリソース名を渡すことができます。

正しいコマンド形式は以下の通りです:

❯ terraform state rm 'random_pet.main["c"]'
Removed random_pet.main["c"]
Successfully removed 1 resource instance(s).

まとめ

Terraformの terraform state rm コマンドを使用するときは、リソース名の正しい指定が重要です。特に、ダブルクォーテーションを含むリソース名を扱う場合は、シングルクォーテーションでコマンド全体を囲むことで、意図した通りの操作を実現できます。

確認をした環境

  • Terraform v1.9.2

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?