- コマンドライン
- 基本的なCLI機能
- コマンド: state
- コマンド: state rm
コマンド: state rm
OpenTofu stateの主な機能は、構成内のリソースインスタンスアドレスと、それらが表すリモートオブジェクト間のバインディングを追跡することです。通常、OpenTofuは、プランの適用時に実行されるアクション(削除されたリモートオブジェクトのバインディングの削除など)に応じて、状態を自動的に更新します。
既存のリモートオブジェクトを最初に破棄せずにバインディングを削除したいという、あまり一般的ではない状況では、tofu state rm
を使用できます。これにより、リモートシステムにオブジェクトが存在し続ける間、OpenTofuがそのオブジェクトを「忘れる」ことになります。
使用方法
使用方法: tofu state rm [オプション] ADDRESS...
OpenTofuは、指定されたリソースアドレスに一致するインスタンスを状態内で検索し、各インスタンスのレコードを削除します。これにより、OpenTofuは対応するリモートオブジェクトの追跡を停止します。
つまり、オブジェクトはリモートシステムに存在し続けますが、後続のtofu plan
には、「忘れられた」インスタンスごとに新しいオブジェクトを作成するアクションが含まれます。リモートシステムによって課せられた制約によっては、名前やその他の識別子がまだ存在する古いオブジェクトと競合する場合、それらのオブジェクトの作成が失敗する可能性があります。
モジュールソース、バックエンド設定、または暗号化ブロックでの変数の使用には、tofu state rm
を実行する際にルートモジュールの変数に値を割り当てる必要があります。
このコマンドは、次のオプションも受け付けます。
-
-dry-run
- 実際に「忘れる」ことなく、指定されたアドレスに一致するすべてのリソースインスタンスを報告します。 -
-lock=false
- 操作中に状態ロックを保持しません。これは、他のユーザーが同じワークスペースに対して同時にコマンドを実行する可能性がある場合、危険です。 -
-lock-timeout=DURATION
--lock=false
でロックが無効になっていない限り、OpenTofuはエラーを返す前に一定期間ロックの取得を再試行するように指示します。期間の構文は、数値の後に時間単位の文字(3秒の場合は「3s」など)を続けたものです。 -
-var 'NAME=VALUE'
- 構成のルートモジュールで宣言された単一の入力変数の値を設定します。複数の変数を設定するには、このオプションを複数回使用します。詳細については、コマンドラインでの入力変数を参照してください。 -
-var-file=FILENAME
- "tfvars"ファイルの定義を使用して、構成のルートモジュールで宣言された複数の入力変数の値を設定します。複数のファイルの値を含めるには、このオプションを複数回使用します。
-var
および-var-file
オプション以外にも、ルートモジュールの入力変数の値を設定する方法はいくつかあります。詳細については、ルートモジュール変数への値の割り当てを参照してください。
cloud
バックエンドまたはremote
バックエンドを使用する構成の場合のみ、tofu state rm
は-ignore-remote-version
オプションも受け付けます。
local
state rmを使用する構成の場合のみ、tofu state rm
はレガシーオプション-state
、-state-out
、および-backup
も受け付けます。
例: リソースのすべてのインスタンスを削除する
次の例では、OpenTofuは、「worker」という名前のpacket_device
リソースのすべてのインスタンスを「忘れる」ようになります。
$ tofu state rm 'packet_device.worker'
count
またはfor_each
を使用しないリソースにはインスタンスが1つだけなので、これはその単一インスタンスを選択するための適切な構文でもあります。
例: モジュール内のリソースのすべてのインスタンスを削除する
子モジュールで定義したリソースを選択するには、そのモジュールのパスをリソースアドレスの一部として指定する必要があります。
$ tofu state rm 'module.foo.packet_device.worker'
例:モジュール内のすべてのリソースのすべてのインスタンスを削除
次の例では、OpenTofu が`foo`という名前のモジュールのすべてのインスタンスで定義されているすべてのリソースに関連付けられているすべてのインスタンスを「忘れる」ようになります。
$ tofu state rm 'module.foo'
例:count
を使用してリソースの特定のインスタンスを削除
count
メタ引数で定義されたリソースには、それぞれ整数を識別子とする複数のインスタンスがあります。指定されたアドレスに明示的なインデックスを含めることで、特定のインスタンスを選択できます。
$ tofu state rm 'packet_device.worker[0]'
角括弧([
、]
)は一部のシェルで特別な意味を持つため、OpenTofu にリテラルに渡すには、アドレスを引用符で囲むか、エスケープする必要がある場合があります。上記は、Unix スタイルのシェルの一般的な引用構文を示しています。
例:for_each
を使用してリソースの特定のインスタンスを削除
for_each
メタ引数で定義されたリソースには、それぞれ文字列で識別される複数のインスタンスがあります。指定されたアドレスに明示的なキーを含めることで、特定のインスタンスを選択できます。
ただし、文字列の構文には引用符が含まれており、引用符記号はコマンドシェルで多くの場合特別な意味を持つため、使用しているシェルに適した引用符と/またはエスケープ構文を使用する必要があります。例えば
Linux や macOS のような Unix スタイルのシェル
$ tofu state rm 'packet_device.worker["example"]'
Windows コマンドプロンプト(cmd.exe
)
$ tofu state rm packet_device.worker[\"example\"]
PowerShell
$ tofu state rm 'packet_device.worker[\"example\"]'