chr*_*ris 10 amazon-ec2 amazon-web-services aws-cloudformation
我正在使用CloudFormation来创建我的环境.堆栈的一部分包括从快照创建卷,将其与EC2实例关联,然后安装它.
"Resources" : {
"EBSData" : {
"Type" : "AWS::EC2::Volume",
...snip...
},
"MountPoint" : {
"Type" : "AWS::EC2::VolumeAttachment",
...snip...
},
"myTestInstance" : {
"Type" : "AWS::EC2::Instance",
...snip...
}
},
Run Code Online (Sandbox Code Playgroud)
当我尝试调用delete-stack时,它会因为仍然挂载卷而失败:
"StackStatusReason": "The following resource(s) failed to delete: [EBSData, MountPoint].",
"CreationTime": "2013-12-03T13:40:58.646Z",
"StackName": "myTestStack",
"StackStatus": "DELETE_FAILED",
"DisableRollback": false
Run Code Online (Sandbox Code Playgroud)
第二次调用delete-stack成功,因为实例已经被破坏了.
是否有任何钩子进入正在运行的实例,由cloudformation delete-stack调用,我可以卸载卷?还有其他办法吗?
小智 6
为了使这个工作,我不得不改变我附加音量的方式.AWS::EC2::VolumeAttachment您可以指定EBS卷以附加到该实例的属性中的实例,而不是使用;
"Resources" : {
"EBSData" : {
"Type" : "AWS::EC2::Volume",
...snip...
},
"myTestInstance" : {
"Type" : "AWS::EC2::Instance",
"Properties": {
"Volumes": [ { "VolumeId": { "Ref": "EBSData" }, "Device": "<device mount point>" }]
...snip...
},
...snip...
}
},
Run Code Online (Sandbox Code Playgroud)
以这种方式附加卷似乎使CloudFormation以正确的顺序删除实例和卷.也就是说,在删除卷之前关闭实例.
确保EBSData不使用任何引用,myTestInstance否则您将获得循环依赖.
我在这里通过“DependsOn”资源属性找到了问题的答案。
本质上,这能够解决我的问题(在对您的问题的评论中描述):
"Resources" : {
"EBSData" : {
"Type" : "AWS::EC2::Volume",
"DependsOn": "myTestInstance",
...snip...
},
"MountPoint" : {
"Type" : "AWS::EC2::VolumeAttachment",
...snip...
},
"myTestInstance" : {
"Type" : "AWS::EC2::Instance",
...snip...
}
},
Run Code Online (Sandbox Code Playgroud)
"DependsOn": "myTestInstance"请注意在 Volume 资源中添加了。由于 VolumeAttachment 资源具有内置的“DependsOn”卷,因此一切都应该很好。
附加说明:尚未经过测试,但测试后将更新。
| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |