更新失败后无法编辑CloudFormation堆栈?

时间:2016-07-19 17:27:49

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

我的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

除了从我的备份中清除堆栈并设计新堆栈之外,我还有任何办法吗?我完全失去了。

1 个答案:

答案 0 :(得分:3)

CloudFormation尝试声明并尝试从您开始的任何地方移动到模板中的状态。有时,它会进入不一致状态(当给出错误的模板或在CloudFormation之外进行手动更改时)。当我遇到这种情况时,CloudFormation通常会正常回滚,但是当它没有成功时,我只是成功地删除了堆栈并从头开始。

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

  1. 使用多个层。例如,FooDev和FooProd CloudFormation堆栈,以便您可以在Dev中测试(特别是升级等)而不是破坏Prod。
  2. 使用多个堆栈。例如,你的数据库堆应该是长寿和有状态的,所以它可能会得到它自己的堆栈,你应该小心它们,而你的EC2实例应该是短暂的和无状态的,所以如果它更好,如果你弄乱了其中一个的部署。
  3. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html

    详细介绍了这些最佳做法以及其他做法