我注意到,如果模板包含自定义资源 lambda,而该 lambda 已损坏(存在运行时错误,或者未正确发送响应主体),则 CloudFormation 堆栈会挂在该特定资源的创建阶段。
当您尝试强制删除堆栈时 - 它会挂在相同的自定义资源上(因为它在删除时调用相同的 lambda 并收到相同的错误)。
需要 1 小时才能收到“DELETE_FAILED”状态,之后您可以使用自定义资源 lambda 强制删除堆栈并忽略此错误。
我的问题是:是否有可能以某种方式避免或减少这种巨大的(1小时)延迟?
这种行为难道不是 CloudFormation 的一个错误吗?因为从我的角度来看,如果自定义 lambda 因错误而失败,则等待是没有意义的。
答案1
我认为没有办法。不过,在设计自定义资源时,您可以记住一些事项,以便在开始时避免这些问题。
查看https://aws.amazon.com/premiumsupport/knowledge-center/best-practices-custom-cf-lambda/了解设计自定义资源的最佳实践。
另一件事是在部署之前进行单元测试。我主要编写 c# lambda 函数,并且我总是在部署之前进行单元测试。这很简单。
您可以在此处找到自定义资源的示例 lambda:https://github.com/turjachaudhuri/CF-custom-resources