the*_*ist 18 amazon-ec2 amazon-rds amazon-cloudformation
是否可以使用 cloudformation 堆栈强制重新创建 EC2 或 RDS 实例?
我的堆栈卡在一个点上,简单地销毁和创建资源就可以修复它,而不是我必须删除整个堆栈才能继续工作。
编辑:
这个问题打了我两次。首先,我创建了一个具有一些默认值的 AWS::RDS::Instance,然后尝试将其降级为 "EngineVersion" : "5.5"。更改它应该会发生一些中断,但是 mysql 实例无法从 5.6 降级到 5.5,因此堆栈处于 UPDATE_FAILED 状态,我无法在没有讨厌的技巧的情况下重新创建 RDS。
另一种情况是,我有几个“AWS::EC2::Instance”,它们显然从“UserData”下载并执行脚本,如果 Y 更改下载的脚本,我必须重新构建实例,而没有办法这样做。我再一次使用相同的讨厌的技巧来重新创建机器。
讨厌的伎俩:
我没有使用一台机器的自动缩放组,而是解决了更改属性中的可用区的两个问题......但让我感觉很糟糕
mar*_*usk 13
对于实例存储支持的 EC2 实例,一个技巧是向包含版本号、日期或类似内容的用户数据脚本添加注释,然后在您想要重新创建实例时进行更改:
{
"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 ...
]]}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对 的任何更改都UserData
将导致实例被替换(即,重新生成)。不过,用户数据脚本的行为应该是相同的,因为唯一的修改是注释。请注意,这不适用于 EBS 支持的实例。
对于 RDS,您可以拍摄当前 RDS 实例的数据库快照,然后修改您的模板以使用该快照DBSnapshotIdentifier
:
{
"Resources" : {
"MyDB" : {
"Type" : "AWS::RDS::DBInstance",
"Properties" : {
// ... other properties ...
"DBSnapshotIdentifier": "<db snapshot ID>"
}
}
}
Run Code Online (Sandbox Code Playgroud)
每当DBSnapshotIdentifier
更改时,数据库实例将被替换。使用快照还可以让您保留创建快照时的数据。(如果您想擦除数据,您可以创建一个空快照并将其作为输入传递。或者删除并重新创建整个 CloudFormation 堆栈。)
更通用的方法是更改资源的逻辑名称。从 CloudFormation 文档中的修改堆栈模板:
对于大多数资源,更改资源的逻辑名称等同于删除该资源并用新资源替换它。依赖重命名资源的任何其他资源也需要更新,并可能导致它们被替换。其他资源需要您更新属性(不仅仅是逻辑名称)才能触发更新。
归档时间: |
|
查看次数: |
10985 次 |
最近记录: |