![当自定义资源 lambda 损坏时,CloudFormation 堆栈会在创建或删除时挂起](https://linux22.com/image/711993/%E5%BD%93%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B5%84%E6%BA%90%20lambda%20%E6%8D%9F%E5%9D%8F%E6%97%B6%EF%BC%8CCloudFormation%20%E5%A0%86%E6%A0%88%E4%BC%9A%E5%9C%A8%E5%88%9B%E5%BB%BA%E6%88%96%E5%88%A0%E9%99%A4%E6%97%B6%E6%8C%82%E8%B5%B7.png)
我注意到,如果模板包含自定义资源 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