【问题标题】:Can't edit CloudFormation stack after failed update?更新失败后无法编辑 CloudFormation 堆栈?
【发布时间】:2016-07-20 08:02:09
【问题描述】:

我的 CloudFormation 堆栈似乎爆炸了。我尝试快速更改以调整 EC2 实例的大小,但更新失败并出现错误:

Invalid value 'm4.large' for instanceType. LaunchPlan instance type does not match attribute value m4.xlarge

回滚也因错误而失败:

The following resource(s) failed to update: [TC2, TC1, TC3].

右键单击堆栈时,我唯一的选择是删除,并尝试通过操作菜单强制继续更新:

This instance 'i-e5e8b063' is not in a state from which it can be stopped.

查看 EC2 实例控制台,我可以看到这条消息至少是正确的:所有实例都列为已终止。

这里所有关于如何处理失败更新的建议似乎都基于我实际上能够修改堆栈以首先修复错误,而我无法做到:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-update-rollback-failed

除了清除堆栈并从我的备份中设计一个新堆栈之外,我还有什么办法吗?我完全不知所措。

【问题讨论】:

  • 您在哪里应用了更改?
  • 我最初点击“更新堆栈”并使用亚马逊提供的“设计模板”GUI 功能。
  • 尝试一件事,点击堆栈,然后点击“继续更新回滚”,看看会发生什么
  • 我已经做到了。这就是我试图从“操作”菜单强制更新的意思。结果是我帖子中的第三个错误;我可以看到所有实例都已终止,因此 CloudFormation 认为它所做的与实际所做的之间似乎存在脱节。
  • 因此您只剩下两个选项联系 AWS Support 或删除堆栈并重建一个新堆栈。

标签: amazon-web-services amazon-ec2 amazon-cloudformation


【解决方案1】:

CloudFormation 尝试声明性并尝试能够从您开始的任何位置移动到模板中的状态。有时,它会进入不一致的状态(当给定错误的模板或在 CloudFormation 之外进行手动更改时)。当这种情况发生在我身上时,CloudFormation 通常会正确回滚,但如果没有,我只能成功地删除堆栈并从头开始。

因此,CloudFormation 中有两件事很重要:

  1. 使用多层。例如,FooDev 和 FooProd CloudFormation 堆栈,以便您可以在 Dev 中进行测试(尤其是升级等),而不是破坏 Prod。
  2. 使用多个堆栈。例如,您的数据库堆栈应该是长期存在且有状态的,因此它可能会拥有自己的堆栈,您应该小心处理它们,而您的 EC2 实例应该是短暂且无状态的,因此如果您搞砸了,那就更好了。部署其中之一。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html

详细介绍了这些最佳实践以及其他最佳实践

【讨论】:

  • 感谢您的建议。幸运的是,我确实有备份并且能够从那里恢复。由于您的回答最有帮助,我会接受它。
猜你喜欢
  • 1970-01-01
  • 2017-10-18
  • 2021-06-27
  • 1970-01-01
  • 2017-07-18
  • 2020-10-23
  • 2023-01-29
  • 2023-02-15
  • 2021-06-29
相关资源
最近更新 更多