如何通过SAM CLI强制部署到Lambda

时间:2019-05-22 23:11:49

标签: amazon-web-services aws-lambda amazon-cloudformation

我正在使用sam deploy命令将lambda部署到AWS。有时我会收到此错误An error occurred (ValidationError) when calling the CreateChangeSet operation: Stack:arn:aws:cloudformation:ap-southeast-2:xxxx:stack/xxxx/xxxx is in ROLLBACK_COMPLETE state and can not be updated.,我知道先前的部署发生了故障。我可以在AWS cloundformation控制台中手动删除堆栈,然后重试该命令。但是我想知道是否有办法强制命令删除任何回滚状态堆栈?

我知道我可以通过aws cli或控制台删除失败的堆栈。但是我的deploy脚本位于CI上,我想让CI使用deploy命令来覆盖失败的堆栈。因此情况是:

1. CI failed on deploy lambda function
2. My team analysis the issue and fix the issue in cloudformation template file
3. Push the fix to github to tigger the CI
4. CI is triggered and use the latest change to override the failed stack.

我不希望团队手动删除堆栈。

1 个答案:

答案 0 :(得分:1)

仅在失败的堆栈创建之后,ROLLBACK_COMPLETE状态才存在。唯一的选择是删除堆栈。这使您有机会正确分析失败的原因。

您可以使用以下命令从命令行中删除堆栈:

aws cloudformation delete-stack --stack-name <value>

来自ROLLBACK_COMPLETE的{​​{3}}:

  

在失败的堆栈创建后或显式取消的堆栈创建后成功删除一个或多个堆栈。在创建堆栈操作期间创建的所有资源都将被删除。

     

此状态仅在失败的堆栈创建之后存在。它表示已部分清理了部分创建的堆栈中的所有操作。在这种状态下,只能执行删除操作。

通常ROLLBACK_COMPLETE不应在生产中发生。我建议您在开发环境中验证堆栈,或在生产环境中成功创建一个堆栈,然后再继续部署堆栈。

仍然,您的CI中可以有一个自定义脚本来检查堆栈状态(documentation),如果是ROLLBACK_COMPLETE则将其删除(DescribeStacks)。该脚本将在sam deploy之前运行。