我正在努力了解如何处理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
有问题的AWS EC2实例确实不存在,但在尝试删除它们时可能会出现TF错误(可能是因为它们不存在),并且仍然将它们保持在状态。
我尝试使用terraform state
命令尝试删除deposed
资源,但它只允许我删除整个资源,而不仅仅是deposed
实例。 。
我是否希望简单地手动进入terraform状态文件并删除废弃的部分?
答案 0 :(得分:4)
来自GitHub Issue requesting for Documentation about the "deposed" state
"废黜"是Terraform交易时资源进入的状态 使用create_before_destroy ...因为只能有一个" primary" 在给定资源的实例中,Terraform将首先废除现有资源 一个(所以它仍然在状态跟踪,但不再用于 插值),然后在最终之前创建替换实例 删除已废弃的实例。
该过程中的错误可能导致被废弃的实例粘入 国家,因为Terraform之前不想忘记它们 它可以删除它们。但是,这种行为有点不一致 在早期的Terraform版本中,以及Terraform处理废弃 静默实例,而不是将它们包含在计划输出中。
所有这一切都是说:这些被废弃的实例是来自a的剩余物 用这些资源替换这些资源时失败了 create_before_destroy。如果您查看Terraform状态文件(或者 terraform.tfstate或.terraform / terraform.tfstate取决于是否 你有远程状态启用)你应该找到这些记录 寻找被废除的词;你可以使用Terraform拥有的数据 为了这些而存储,以确定在出租之前是否可以安全删除 Terraform在这里继续。
所以,你可以推断出#34;被废#"这些资源的状态仅仅表示在destroy
阶段导致错误的潜在问题。如报价所述,"被废除"在下次运行terraform apply
时,由于缺少更好的术语,资源应该已经解决了#34;在此期间,请检查tfstate
文件中是否存在terraform已存储的任何/所有特定信息,以确定是否可以安全地继续和/或可能诊断出问题的位置。
此外,您可以尝试以下操作来刷新本地状态
terraform refresh Update local state file against real resources
此外,
terraform debug Debug output management
terraform state Advanced state management
答案 1 :(得分:1)
我在删除EC2实例时遇到了类似的问题,但是中途停止了该过程,最终我要做的是手动编辑Terraform tfstate
文件。
在其中,我找到了已废弃的项目,将tainted
更改为false
并清空了deposed
数组。
运行terraform plan
之后,实例从输出中消失。
答案 2 :(得分:1)
terraform state rm
后跟 terraform import
从状态中移除废弃的对象。