我们遇到了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
因此,根设备是"瞬态" (每次更新堆栈时,此类卷将被删除并使用userdata重新配置),而/ dev / xvdm应包含我们的持久数据;这样的设备安装在userdata的末尾,并添加到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}"
我已经验证了umount和分离成功。
使用我的模板和参数创建新堆栈成功。
但是,当我启动时
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.
即使我没有在这样的资源中改变任何东西。
什么了?我该如何解决或解决?
答案 0 :(得分:0)
似乎事情没有问题。
CloudFormation受到耗尽的t2 cpu信用(我们已经用尽,我们试图为了使用m3或m4而尝试更改实例类型)的影响,或者我们在爱尔兰的EC2 / CloudFormation度过了糟糕的一天。今天,使用完全相同的设置,每次更新都会成功。