【发布时间】:2017-07-18 09:03:20
【问题描述】:
我们在使用 AWS CloudFormation 时遇到了一个奇怪的问题。
我们使用 CloudFormation 来自动部署我们的一些机器;我们的 CloudFormation yml 描述了部署,其中包含一个在堆栈外部创建的持久 EBS 卷,我们不想沿着这样的堆栈删除或重新创建(它包含我们应用程序的很多状态)。
相关的 CloudFormation yml sn-p 是:
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
因此,根设备是“临时的”(每次更新堆栈时,都会删除此类卷并使用用户数据重新配置),而 /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}"
我已经验证了umount和detach成功。
使用我的模板和参数创建新堆栈成功。
然而,当我启动时
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.
即使我没有更改此类资源中的任何内容。
怎么了?我该如何解决或变通?
【问题讨论】:
标签: amazon-web-services amazon-ec2 amazon-ebs amazon-cloudformation