我正尝试使用CloudFormation将现有卷挂载到新的EC2 Windows实例。 这似乎应该是可能的。
大图片
我有供应商提供AMI,它安装了一些预configuration的软件。 我们希望创build一个实例,并且偶尔会更改EC2实例大小以进行性能testing。 我们不想丢失从AMI创build的单个EBS磁盘上的数据。
由于我们使用的是CloudFormation,如果我们简单地更改AWS :: EC2 :: Instance.InstanceType属性并上传已修改的堆栈,CloudFormation将从AMI中新build一个实例和卷。 这没有帮助,因为我们将丢失从现有磁盘上传的数据。
卷方法
我先试了这个脚本。
WindowsVolume: Type: AWS::EC2::Volume Properties: AutoEnableIO: true AvailabilityZone: "ap-southeast-2b" Encrypted: true Size: 30 SnapshotId: snap-0008f111111111 Tags: - Key: Name Value: Ref: AWS::StackName VolumeType: gp2 EC2Instance: Type: AWS::EC2::Instance InstanceType: t2.micro ImageId: ami-663bdc04 # Windows Server stock image KeyName: removed IamInstanceProfile: removed InstanceInitiatedShutdownBehavior: stop SecurityGroupIds: Fn::Split: [",", "Fn::ImportValue": StackName-ServerSecurityGroup] SubnetId: !ImportValue StackName-Subnet1 Volumes: - Device: "/dev/sda1" VolumeId: Ref: WindowsVolume
我收到了错误信息
对于unixDevice,值“/ dev / sda1”无效。 连接点/ dev / sda1已在使用中
BlockDeviceMappings方法
接下来我尝试使用BlockDeviceMappings
BlockDeviceMappings: - DeviceName: "/dev/sda1" Ebs: Ref: WindowsVolume
这次的错误信息是
财产价值Ebs必须是一个客体
VolumeAttachment方法
我也尝试使用VolumeAttachment而不是Volumes属性或BlockDeviceMapping。
VolAttach: Type: AWS::EC2::VolumeAttachment Properties: Device: "/dev/sda1" InstanceId: !Ref EC2Instance VolumeId: !Ref WindowsVolume
这给了我和上面一样的信息
对于unixDevice,值“/ dev / sda1”无效。 连接点/ dev / sda1已在使用中
关键问题
有没有人成功将现有的根卷或快照挂载到新的EC2实例? 如果可能的话,什么是正确的方法?
备用方法
很高兴听到替代方法。 例如,我考虑的选项是:
启动EC2实例时,无法挂载现有的EBS卷。
启动EC2实例时,EBS卷将始终从AMI的关联EBS快照中新build。
有一些解决方法: