将EBS附加到Spot Fleet的EC2实例
我期待在Cloudformation中创建一个Spot Fleet,它一次运行单个游戏服务器; 如果价格高涨并且服务器需要终止,它将使用2分钟抬头来正常关机并存储要在EBS卷上保留的任何内容。 然后,由队伍启动的下一个实例将挂载该卷并从前一个停止的位置重新启动游戏服务器。
SpotFleet:
Type: "AWS::EC2::SpotFleet"
Properties:
SpotFleetRequestConfigData:
IamFleetRole: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-ec2-spot-fleet-tagging-role
TargetCapacity: 1
LaunchSpecifications:
- InstanceType: "m5.large"
ImageId: "ami-abcd1234"
IamInstanceProfile: !GetAtt InstanceProfile.Arn
WeightedCapacity: 1
现在我坚持在cf模板中定义持久卷。 最初我只是将它添加为资源:
Volume:
Type: "AWS::EC2::Volume"
Properties:
Size: 10
AvailabilityZone: !Ref AWS::Region
但是,我如何在船队中引用它? 您可以根据http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html在LaunchSpeficiations上定义BlockDeviceMappings,但可以从可用属性I似乎无法参考现有卷,因此我们认为这些卷不会持续存在。
或者我想通过VolumeAttachment将音量附加到现场实例:
VolumeAttachment:
Type: "AWS::EC2::VolumeAttachment"
Properties:
Device: "dev/server"
InstanceId: !Ref SpotFleet
VolumeId: !Ref Volume
但很显然,SpotFleet引用在此处返回队列名称,而不是任何已创建实例的标识。 而且,既不!Ref也不!!GetAtt似乎能够从车队中提取这些ID。
我忽略了如何在CloudFormation中完成上述任何操作,或者我应该考虑将EC2:AttachVolume和EC2:DetachVolume权限添加到InstanceProfile,并且只需从EC2实例内手动添加卷?
非常感谢,
EC2竞价型实例现在支持将“中断行为”设置为stop
而不是terminate
。
选择此选项后,现货实例会保留其实例ID,EBS卷,其专用和弹性IP地址及其EBS卷,这些卷保持原位并连接。
某些实例类型还支持“hybernate”选项,该选项将整个系统状态的快照写入EBS,以便在容量再次可用时允许实例“恢复”而不是重新启动。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html
您在寻找的是BlockDeviceMappings属性,该属性位于SpotFleet SpotFleetRequestConfigData LaunchSpecifications中,该属性是SpotFleetRequestConfigData的属性,该属性是AWS :: EC2 :: SpotFleet资源类型的属性。
BlockDeviceMappings
属性将允许您定义附加的EBS卷以附加到启动规范。 这是在启动时控制设备映射的规范。
例如:
"BlockDeviceMappings" : [{
"DeviceName" : "/dev/sdf",
"Ebs" : {"VolumeSize": "10", "VolumeType" : "gp2", "DeleteOnTermination" : "true"}
}],
将在您的现场车队实例的/ dev / sdf设备上指定一个10GB的卷。
链接地址: http://www.djcxy.com/p/67175.html上一篇: Attaching an EBS to an EC2 instance from a Spot Fleet
下一篇: Amazon EC2 spot instance fleet using AMI and common files