我有两个堆栈:myData
和myWorker
。工人使用数据。删除工作程序时出错。错误抱怨他对数据的依恋仍然有效。
myData
是长寿的,包含myVolume
,AWS::EC2::Volume
。
myWorker
仅偶尔出现,包含myServer
和myMountPoint
,AWS::EC2::Instance
和AWS::EC2::VolumeAttachment
。
这没有成功。 delete-stack
报告myWorker
:
DELETE_FAILED Volume detachment between volume-id vol-XXXX and instance-id i-YYYY at device /dev/sdX is in busy state
这似乎很合理。序列可能是:
create myWorker
create myServer
create myMountPoint
... later ...
delete-stack myWorker
delete myMountPoint
delete myServer
在这种情况下,服务器仍在运行,可能还在使用挂载点。
但这似乎不太可能。
create myWorker
create myServer
create myMountPoint
start up myServer
mount that mount point
start services including disk mounting
... later ...
delete-stack myWorker
stop up myServer
stop services & unmount disk
delete myMountPoint
delete myServer
那么,帮帮忙?这个序列实际记录在哪里,我该如何解决这个问题?
答案 0 :(得分:1)
这个序列实际记录在哪里[...]
您所描述的AWS::EC2::VolumeAttachment
行为会在资源的CloudFormation文档开头注明:
重要
在删除此资源(因此分离卷)之前,必须首先卸载实例中的卷。如果不这样做会导致卷在尝试分离时陷入忙碌状态,这可能会损坏文件系统或其包含的数据。
如果Amazon EBS卷是实例的根设备,则当实例位于"运行"时,它不能被分离。州。要分离根卷,请先停止实例。
[...]我该如何解决这个问题?
对于像您这样的典型用例,EC2实例在整个实例的生命周期中使用附加的EBS卷,您可以使用Volumes
上的AWS::EC2::Instance
属性声明您的EBS卷附件资源而不是单独的AWS::EC2::VolumeAttachment
资源。在从EC2实例分离卷之前,Volumes
属性允许实例首先正确关闭(卸载任何已安装的卷是关闭过程的一部分)。