TF状態で見つかったdeposed
リソースをどのように処理する必要があるかを理解するのに苦労しています。
特に、適用を実行すると、次のようなエラーが発生します。
Error applying plan:
11 error(s) occurred:
* aws_instance.mongo-replica-01 (deposed #0): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-0f0bdc2c16e922fbc' does not exist
status code: 400, request id: 71b98708-cb06-4f11-ad14-8d3d160fbc1a
* aws_instance.mongo-replica-01 (deposed #1): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-080ef01dc84c09685' does not exist
status code: 400, request id: 07c96f82-1e32-4944-a1d6-ab0e6306b82e
* aws_instance.mongo-replica-02 (deposed #1): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-085b997daac742c1e' does not exist
status code: 400, request id: 20ff2b73-39c9-4d49-af41-f4ec542ec782
* aws_instance.mongo-replica-02 (deposed #0): Error terminating instance: InvalidInstanceID.NotFound: The instance ID 'i-00bc7fd15b04a3688' does not exist
status code: 400, request id: cdea3c4f-9bec-496a-aedd-bcfbf0a706d2
問題のAWSEC2インスタンスは実際には存在しませんが、削除しようとするとTFエラーが発生し(おそらく存在しないため)、その状態を維持します。
deposed
リソースを削除しようとしてterraform state
コマンドを使用しようとしましたが、deposed
インスタンスだけでなく、リソース全体を削除することしかできません...
単純に、手動でterraform状態ファイルに移動し、破棄されたセクションを削除する必要がありますか?
「deposed」状態に関するドキュメントを要求するGitHubの問題
「Deposed」は、Terraformがcreate_before_destroyを処理しているときにリソースが入る状態です...特定のリソースの「プライマリ」インスタンスは1つしか存在できないため、Terraformは最初に既存のインスタンスを破棄します(したがって、状態は引き続き追跡されますが、補間に使用されなくなった)、置き換えられたインスタンスを作成してから、最終的に破棄されたインスタンスを削除します。
Terraformはインスタンスを削除する前にそれらを追跡したくないため、そのプロセス中にエラーが発生すると、デポーズされたインスタンスが状態のままになる可能性があります。ただし、この動作は以前のTerraformバージョンでは少し一貫性がなく、Terraformは、配置されたインスタンスをプラン出力に含めるのではなく、サイレントに処理しました。
つまり、これらの破棄されたインスタンスは、これらのリソースをcreate_before_destroyに置き換えている間の障害の残り物です。 Terraform状態ファイル(リモート状態が有効になっているかどうかに応じてterraform.tfstateまたは.terraform/terraform.tfstateのいずれか)を見ると、deposedというWordを検索してこれらのレコードを見つける必要があります。 Terraformがこれらのために保存したデータを使用して、Terraformをここに進める前に、それらを削除しても安全かどうかを判断できます。
したがって、これらのリソースの「デポーズ」状態は、destroy
フェーズ中にエラーを引き起こした根本的な問題を示しているにすぎないと推測できます。引用で述べたように、次にterraform apply
を実行するときに、より適切な用語がないため、「破棄された」リソースは「解決」される必要があります。それまでの間、tfstate
ファイルでterraformに保存されている特定の情報を確認して、問題がどこにあるかを診断するのに安全かどうかを判断してください。
さらに、次のことを試して、ローカル状態を更新できます
terraform refresh Update local state file against real resources
また、
terraform debug Debug output management
terraform state Advanced state management