gpt4 book ai didi

amazon-web-services - 将 EBS 从 Spot 队列附加到 EC2 实例

转载 作者:行者123 更新时间:2023-12-03 07:32:26 26 4
gpt4 key购买 nike

我希望在 Cloudformation 中创建一个 Spot 队列,一次运行一个游戏服务器;如果价格飙升并且服务器需要终止,它将使用 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

但是我如何在队列中引用它呢?您可以按照以下方式在机群内的 LaunchSpecifications 上定义 BlockDeviceMappings: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications-blockdevicemappings.html但从可用的属性来看,我似乎无法引用现有卷,因此我认为这些卷不会持久存在。

或者,我考虑通过 VolumeAttachment 将卷附加到 Spot 实例:

  VolumeAttachment:
Type: "AWS::EC2::VolumeAttachment"
Properties:
Device: "dev/server"
InstanceId: !Ref SpotFleet
VolumeId: !Ref Volume

但显然,此处的 SpotFleet 引用返回的是队列名称,而不是任何已创建实例的 ID。而且 !Ref 和 !GetAtt 似乎都无法从队列中提取这些 id。

我是否忽略了有关如何在 CloudFormation 中完成上述操作的任何关键事项,或者我是否应该考虑将 EC2:AttachVolume 和 EC2:DetachVolume 权限添加到 InstanceProfile 并简单地从 EC2 实例内手动附加卷?

非常感谢,

最佳答案

EC2 Spot 实例现在支持将“中断行为”设置为停止而不是终止的选项。

选择此选项后,竞价实例将保留其实例 ID、EBS 卷、私有(private)和弹性 IP 地址以及 EBS 卷,这些卷将保持在原位并附加。

某些实例类型还支持“休眠”选项,该选项将整个系统状态的快照写入 EBS,以允许实例在容量再次可用时“恢复”而不是重新启动。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html

关于amazon-web-services - 将 EBS 从 Spot 队列附加到 EC2 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com