是否有可能在亚马逊云计算中强制重新创buildEC2 :: Instance或RDS :: DBInstance?

有可能强制使用云形成堆叠来重新创buildEC2或RDS实例?

我的堆栈陷入了一个简单的破坏和创build资源将修复它的地步,而不是我不得不删除整个堆栈继续工作。

编辑:

这个问题打了我两次。 首先,我创build了一个默认的AWS :: RDS :: Instance,然后尝试将其降级到“EngineVersion”:“5.5”。 改变这种情况是因为发生了一些干扰,但是mysql实例不能从5.6降级到5.5,所以堆栈处于UPDATE_FAILED状态,我不能在没有恶意诡计的情况下重新创buildRDS。

另一种情况是,我有几个“AWS :: EC2 :: Instance”,它显然下载并执行“UserData”脚本,如果Y更改下载的脚本,我必须重新创build实例,并且无法这样做。 我再次使用相同的恶劣技巧来重新创build机器。

讨厌的把戏:

我没有使用一台机器的自动缩放组,而是解决了更改属性中的可用性区域的两个问题…但给我留下了一个不好的味道

例如,商店支持的EC2实例,一个技巧是向包含版本号,date或类似的用户数据脚本添加注释,然后在需要重新创build实例时更改该注释:

 { "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { // ... other properties ... "UserData": { "Fn::Base64" : { "Fn::Join" : [ ":", [ "#!/bin/bash\n", "# Version: 1.0\n", // ... rest of user data ... ]]} } } } } 

UserData任何更改都会导致实例被replace(即重新生成)。 用户数据脚本的行为应该是相同的,因为唯一的修改是注释。 请注意,这不适用于EBS支持的实例。

对于RDS,您可以获取当前RDS实例的数据库快照 ,然后修改模板以使用具有DBSnapshotIdentifier快照:

 { "Resources" : { "MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { // ... other properties ... "DBSnapshotIdentifier": "<db snapshot ID>" } } } 

每当DBSnapshotIdentifier更改时,数据库实例将被replace。 使用快照还可以让您保存快照创build时的数据。 (如果擦除数据,可以创build一个空的快照并将其作为input传递,或者删除并重新创build整个CloudFormation堆栈。)

更通用的方法是更改​​资源的逻辑名称。 在CloudFormation文档中修改堆栈模板 :

对于大多数资源,更改资源的逻辑名称相当于删除该资源并将其replace为新资源。 依赖于重命名的资源的任何其他资源也需要更新,并可能导致它们被replace。 其他资源要求您更新一个属性(不只是逻辑名称)以触发更新。

如果将它放到AutoScalingGroup中,可以将AutoScalingGroup的最小/最大/默认值编辑为0,那么只要开始销毁旧实例,就可以将最小/最大/默认值设置为1/1/1, presto:新实例。