メインコンテンツにスキップ

リソースの強制再作成

計画中に、デフォルトではOpenTofuは既存の各オブジェクトの最新状態を取得し、現在の構成と比較します。構成と一致しないオブジェクトに対してのみアクションを計画します。

ただし、リモートオブジェクトがOpenTofuが自動的に検出できない方法で破損または劣化する場合があります。たとえば、仮想マシン内で実行されているソフトウェアがクラッシュしたが、仮想マシン自体がまだ実行されている場合、OpenTofuはマシン全体を直接管理するため、問題を検出して対応する方法がありません。

オブジェクトが破損していることがわかっている場合、またはその他の理由でOpenTofuにオブジェクトの置き換えを強制する場合、tofu planまたはtofu applyを実行するときに `-replace = ...`計画オプションを使用してOpenTofuのデフォルトの動作をオーバーライドできます。

コードブロック
$ tofu apply -replace="aws_instance.example"
# ...

# aws_instance.example will be replaced, as requested
-/+ resource "aws_instance" "example" {
# ...
}

「汚染された」ステータス

OpenTofuは、オブジェクトが不完全または劣化状態にあることを自動的に推測できる場合があります。たとえば、複雑なオブジェクトの作成が失敗して、その一部がリモートシステムにすでに存在する場合、またはオブジェクトの作成は成功したが、プロビジョナーの手順が後続で失敗した場合、OpenTofuはオブジェクトが存在するが完全に機能していない可能性があることを記憶する必要があります。

OpenTofuは、状態のオブジェクトを「汚染された」とマークすることで、この状況を表します。オブジェクトにこのステータスがマークされている場合、上記の`-replace = ...`を使用してオブジェクトのアドレスを指定した場合と同様に、次のプランはそのオブジェクトの置き換えを強制します。

コードブロック
  # aws_instance.example is tainted, so it must be replaced
-/+ resource "aws_instance" "example" {
# ...
}

OpenTofuがオブジェクトを汚染済みとしてマークしたが、正しく動作していると見なし、置き換えたくない場合は、 `tofu untaint`コマンドを使用してOpenTofuの決定をオーバーライドできます。その後、OpenTofuは、オブジェクトがダウンストリームリソース宣言で使用できる状態になっていると見なします。

`tofu taint`コマンドを使用して、OpenTofuに特定のオブジェクトを汚染済みとしてマークすることを強制することもできますが、このアプローチは、汚染されたオブジェクトを含む中間状態スナップショットを作成する必要がない`-replace = ...`オプションを優先するため、非推奨です。