私は、一度に1つのゲームサーバーを実行する雲の艦隊を作成しようとしています。価格が急上昇し、サーバーを停止する必要がある場合は、EBSボリュームに永続化されるものを正常にシャットダウンして格納するために2分のヘッドアップを使用します。その後、艦隊によって開始された次のインスタンスは、ボリュームをマウントし、以前のものが残っていた場所からゲームサーバーを再起動します。スポット艦隊からEC2インスタンスへの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を定義することはできますが、利用可能な属性からは既存のボリュームを参照できないように見えるため、これらのボリュームは永続化されません。
VolumeAttachment:
Type: "AWS::EC2::VolumeAttachment"
Properties:
Device: "dev/server"
InstanceId: !Ref SpotFleet
VolumeId: !Ref Volume
をしかし、明らかにSpotFleet参照はここ艦隊名ではなく、任意の作成されたインスタンスのIDを返します。
代わりに私がVolumeAttachmentを経由して、スポットインスタンスにボリュームを取り付ける考え。そしてどちらも!RefもGetAttも艦隊からこれらのIDを抽出できるようです。
CloudFormationで上記を達成する方法を見落としていますか?または、EC2:AttachVolumeとEC2:DetachVolume権限をInstanceProfileに追加し、単にEC2インスタンス内からボリュームを手動で追加する必要がありますか?あなたが探している
メモがありませんでしたか?「中断動作」を「停止」に設定するだけで、スポットインスタンスが同じアイデンティティーとEBSボリューム添付をフルフィルメント間で魔法のように保持することができます。 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html –
あなたは絶対に正しいです、最初に作成するためにsnapshotIdを使ってBlockDeviceMappingにEbsを指定してから、バックアップを取る。ありがとうございました! – fishb6nes