本文へスキップ

コマンド: state rm

OpenTofu stateの主な機能は、構成内のリソースインスタンスアドレスと、それらが表すリモートオブジェクト間のバインディングを追跡することです。通常、OpenTofuは、プランの適用時に実行されるアクション(削除されたリモートオブジェクトのバインディングの削除など)に応じて、状態を自動的に更新します。

既存のリモートオブジェクトを最初に破棄せずにバインディングを削除したいという、あまり一般的ではない状況では、tofu state rmを使用できます。これにより、リモートシステムにオブジェクトが存在し続ける間、OpenTofuがそのオブジェクトを「忘れる」ことになります。

使用方法

使用方法: tofu state rm [オプション] ADDRESS...

OpenTofuは、指定されたリソースアドレスに一致するインスタンスを状態内で検索し、各インスタンスのレコードを削除します。これにより、OpenTofuは対応するリモートオブジェクトの追跡を停止します。

つまり、オブジェクトはリモートシステムに存在し続けますが、後続のtofu planには、「忘れられた」インスタンスごとに新しいオブジェクトを作成するアクションが含まれます。リモートシステムによって課せられた制約によっては、名前やその他の識別子がまだ存在する古いオブジェクトと競合する場合、それらのオブジェクトの作成が失敗する可能性があります。

このコマンドは、次のオプションも受け付けます。

  • -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\"]'