0

私は、一度に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インスタンス内からボリュームを手動で追加する必要がありますか?あなたが探している

+1

メモがありませんでしたか?「中断動作」を「停止」に設定するだけで、スポットインスタンスが同じアイデンティティーとEBSボリューム添付をフルフィルメント間で魔法のように保持することができます。 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html –

+0

あなたは絶対に正しいです、最初に作成するためにsnapshotIdを使ってBlockDeviceMappingにEbsを指定してから、バックアップを取る。ありがとうございました! – fishb6nes

答えて

1

EC2スポットインスタンスでは、terminateではなく、「割り込み動作」をstopに設定するオプションがサポートされるようになりました。

このオプションを選択すると、インスタンスインスタンス、EBSボリューム、プライベートおよびエラスティックIPアドレス、およびそのEBSボリュームが保持され、そのまま残ります。

インスタンスタイプによっては、システム状態全体のスナップショットをEBSに書き込んで、容量が再び利用可能になったときに再起動するのではなく、インスタンスを「再開」できるようにするオプションもサポートしています。

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

+1

私は何をしようとしていたのですか(艦隊のインスタンスに既存の音量を付ける)ことは、艦隊が複数のインスタンスを維持することを前提としていなければならないことではありません。代わりのソリューションを提供していただきありがとうございます。これは、私のユースケースにとってさらに優れたアプローチとなりました。 – fishb6nes

0

多くのおかげで、AWS::EC2::SpotFleet resource typeの財産であるSpotFleetRequestConfigDataの財産であり、SpotFleet SpotFleetRequestConfigData LaunchSpecificationsで見つかったBlockDeviceMappingsプロパティ、です。

プロパティBlockDeviceMappingsを使用すると、起動仕様に追加する追加のEBSボリュームを定義できます。これは、起動時にデバイスのマッピングを制御する仕様です。 exmampleについては

"BlockDeviceMappings" : [{ 
    "DeviceName" : "/dev/sdf", 
    "Ebs" : {"VolumeSize": "10", "VolumeType" : "gp2", "DeleteOnTermination" : "true"} 
}], 

は、あなたのスポット艦隊インスタンスのは/ dev /自衛隊デバイス上で10ギガバイトのボリュームを指定します。

関連する問題