Terraform:如果父级部分完成并出现错误,是否会创建依赖资源?
请注意,这是一个关于自定义生成提供程序如何处理错误流的可能性的设计问题。无论流动是否良好。。。这是另一个问题 假设有两种资源(A和B),其中B依赖于A 当我运行terraform apply时,资源A被创建(意味着后端创建了一个ID为的对象),但在创建任务后处于错误(error)状态。我想建立的是一个能够识别这种不良状态的提供者,在它继续尝试创建资源B之前,就停止它。不过,我也希望Terraform能够在不良状态下清理资源(通过销毁或污染),甚至在我手动修复后端的问题后,继续前进而不重新创建它 也许还有其他流动的可能性,但我可以想到以下两种:Terraform:如果父级部分完成并出现错误,是否会创建依赖资源?,terraform,Terraform,请注意,这是一个关于自定义生成提供程序如何处理错误流的可能性的设计问题。无论流动是否良好。。。这是另一个问题 假设有两种资源(A和B),其中B依赖于A 当我运行terraform apply时,资源A被创建(意味着后端创建了一个ID为的对象),但在创建任务后处于错误(error)状态。我想建立的是一个能够识别这种不良状态的提供者,在它继续尝试创建资源B之前,就停止它。不过,我也希望Terraform能够在不良状态下清理资源(通过销毁或污染),甚至在我手动修复后端的问题后,继续前进而不重新创建它
应用
或销毁
操作期间,Terraform都会尽可能地进行。它将遍历配置中所有资源的图表,如果发生错误(即,从C/R/U/D方法返回),它将只继续创建/更新/销毁那些不受错误影响的资源,基本上是所有不依赖失败资源的资源。您可以通过terraformgraph
查看Terraform做出决策的完全依赖关系图
例如,如果您有aws_s3_bucket_对象
依赖于aws_s3_bucket
,并且aws_s3_bucket
的创建/更新/销毁因任何原因失败,则aws_s3_bucket_对象
将保持不变
不过,我也希望Terraform能够在糟糕的状态下清理该资源(通过销毁或污染),甚至在我手动修复后端问题后不重新创建它而继续前进
在发生故障时执行任何自动回滚(如在“失败”状态下销毁资源)或多或少是一种设计选择而不是。任何操作都会有很多失败的方式,而对什么是最佳回滚策略的看法也会因上下文而异,因此Terraform有意将此留给操作员/用户
然而,污染是另一回事,因为它不会直接影响资源,而且最终还是由用户决定
目前没有办法从CRUD/schema接口自动污染资源,但至少有人在讨论这个想法
可能相关:有时资源操作需要多个API调用,其中任何调用都可能失败。Terraform有一个称为“部分状态”的概念来解决中所述的部分故障
基本上,它总是确保在返回错误之前甚至存储了部分状态
我想要构建的是一个能够识别这种糟糕状态的提供者,并在它继续尝试创建资源B之前停止
这就是HashiCorp、供应商和社区维护的大多数(如果不是全部的话)提供商的工作方式
资源ID的存在(或缺乏)对错误处理没有任何影响
即使资源处于挂起/失败状态,它也有一个ID。资源代码应始终尽可能快地设置ID(通常在API第一次成功响应之后,在任何重试逻辑之前)。资源实际上随其ID一起生存和死亡。移除其ID意味着将资源从状态中移除,并且只有在资源实际消失时才会发生(例如,API返回404)
在任何应用
或销毁
操作期间,Terraform都会尽可能地进行。它将遍历配置中所有资源的图表,如果发生错误(即从C/R/U/D方法返回),它将继续创建/更新/销毁