AWS CloudFormation:如果指定了 VolumeAttachment,则更新堆栈失败

AWS CloudFormation: update-stack fails if VolumeAttachment specified

我们遇到了 AWS CloudFormation 的一个奇怪问题。

我们正在使用 CloudFormation 来自动部署我们的一些机器;我们的 CloudFormation yml 描述了部署,它包含一个在堆栈外创建的持久 EBS 卷,我们不想沿着这样的堆栈删除或重新创建(它包含我们应用程序的很多状态)。

相关的 CloudFormation yml 片段是:

DataVolumeAttachment01: Type: AWS::EC2::VolumeAttachment Properties: Device: "/dev/xvdm" InstanceId: !Ref EC2Instance01 VolumeId: !Ref DataVolumeId EC2Instance01: Type: "AWS::EC2::Instance" Properties: ImageId: "ami-6f587e1c" KeyName: !Ref "KeyName" InstanceType: !Ref "InstanceType" BlockDeviceMappings: # Root device - DeviceName: "/dev/sda1" Ebs: VolumeType: "gp2" DeleteOnTermination: "true" VolumeSize: 20

因此,根设备是 "transient"(每次更新堆栈时,都会删除此类卷并使用用户数据重新配置),而 /dev/xvdm 应该包含我们的持久数据;这样的设备安装在用户数据的末尾,并添加到 fstab。

AWS own documentation 之后,我创建了一个脚本来从 VM 中卸载这样的卷,我什至尝试从 EC2 实例中分离这样的卷,例如:

${SSH_CMD} "cd /home/application && application stop && sudo umount /data && echo data volume unmounted" echo "detaching data volume" VOLID=$(aws ec2 describe-volumes --filters Name=tag-key,Values="Name" Name=tag-value,Values=persistent-volume --query 'Volumes[*].{ID:VolumeId}' --output text) aws ec2 detach-volume --volume-id "${VOLID}"

已验证卸载成功,分离成功

使用我的模板和参数创建新堆栈成功。

然而,当我启动时

aws cloudformation update-stack --capabilities CAPABILITY_IAM --stack-name $STACK_NAME --template-body file://single_ec2_instance.yml --parameters file://$AWS_PARAMETERS_FILE

更新失败,出现以下错误:

Update to resource type AWS::EC2::VolumeAttachment is not supported.

即使我没有更改此类资源中的任何内容。

怎么了?我该如何解决或变通?

看来这件事不是问题。

要么 CloudFormation 受到用尽的 t2 cpu 积分的影响(我们已经用尽了,我们试图更改实例类型正是出于这个原因,以便使用 m3 或 m4)或者我们遇到了糟糕的一天EC2/CloudFormation 在爱尔兰。今天,使用完全相同的设置,每次更新都成功了。