EC2 フリートの作成 - Amazon Elastic Compute Cloud

EC2 フリートの作成

EC2 フリートを作成するには、JSON ファイルにフリート設定を定義し、 create-fleet マンドでそのファイルを参照してください。JSON ファイルでは、フリートの合計ターゲットキャパシティ、スポットインスタンスとオンデマンドインスタンスの個別のターゲットキャパシティ、および起動テンプレートを指定する必要があります。起動テンプレートにはフリート内のインスタンスの設定、例えば AMI、インスタンスタイプ、サブネットやアベイラビリティーゾーン、1 つ以上のセキュリティグループなどを定義します。必要に応じて、さらに別の設定を指定できます。例えば、起動テンプレート設定をオーバーライドするためのパラメータ、EC2 キャパシティプールからスポットインスタンスとオンデマンドインスタンスを選択するための配分戦略、フリートに対する最大支出金額などです。詳細については、「EC2 フリートまたはスポットフリートの設定オプション」を参照してください。

EC2 フリートは、キャパシティが使用可能であるときはオンデマンドインスタンスを起動し、最大料金がスポット料金を超えていてキャパシティが使用可能であるときはスポットインスタンスを起動します。

フリートにスポットインスタンスが含まれ、タイプが maintain である場合、Amazon EC2 はスポットインスタンスが中断したときにフリートのターゲットキャパシティを維持しようとします。

EC2 フリート の制限事項

以下の制限が EC2 フリート に適用されます。

  • EC2 フリートは、Amazon EC2 APIAWS CLIAWS SDK、および CloudFormation からのみ作成できます。

  • EC2 フリート リクエストは、AWS リージョンにまたがることはできません。リージョンごとに別個の EC2 フリート を作成する必要があります。

  • EC2 フリート リクエストは、同じアベイラビリティーゾーンから複数の異なるサブネットにまたがることはできません。

EC2 フリートの作成

EC2 フリートを使用して複数のインスタンスからなるフリートを起動する場合、必要な手順はフリートリクエストに以下のパラメータを指定することだけです。その他のパラメータには、デフォルト値が使用されます。

  • LaunchTemplateId または LaunchTemplateName — 使用する起動テンプレートを指定します (インスタンスタイプやアベイラビリティーゾーンなど、起動するインスタンスのパラメータを指定します)。

  • TotalTargetCapacity — フリートの合計ターゲット容量を指定します。

  • DefaultTargetCapacityType — デフォルトの購入オプションをオンデマンドにするかスポットにするかを指定します。

起動テンプレートに指定されているパラメータをオーバーライドするには、1 つ以上のオーバーライドを指定します。各オーバーライドはインスタンスタイプ、アベイラビリティーゾーン、サブネット、最大料金によって異なり、オーバーライドごとに加重キャパシティを変えることができます。インスタンスタイプを指定する代わりに、インスタンスに必要な属性を指定でき、Amazon EC2 はそうした属性ですべてのインスタンスタイプを識別します。詳細については、 を参照してください。EC2 フリートまたはスポットフリートのインスタンスタイプを選択するための属性を指定する

EC2 フリートのタイプが instant の場合、AMI ID ではなく Systems Manager パラメータを指定できます。Systems Manager パラメータは、オーバーライドまたは起動テンプレートに指定できます。詳細については、「AMI ID のかわりに Systems Manager パラメータを使用する」を参照してください。

JSON ファイルにフリートパラメータを指定できます。指定可能なすべてのパラメータについては、「EC2 フリートの設定オプションをすべて表示する」を参照してください。

フリート設定の例については、「EC2 フリートの CLI 設定の例」を参照してください。

EC2 フリートを作成するためのコンソールのサポートは現在ありません。

EC2 フリートを作成するには

create-fleet コマンドを使用して、フリートを作成し、フリート設定パラメータを記載した JSON ファイルを指定します。

aws ec2 create-fleet --cli-input-json file://file_name.json

タイプ request またはタイプ maintain のフリートの出力例を次に示します。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE" }

ターゲット容量を起動したタイプ instant のフリートの出力例を次に示します。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [], "Instances": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-1234567890abcdef0", "i-9876543210abcdef9" ], "InstanceType": "c5.large", "Platform": null }, { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-5678901234abcdef0", "i-5432109876abcdef9" ] ] }

ターゲット容量の一部を起動し、起動されなかったインスタンスをエラーとするタイプ instant のフリートの出力例を次に示します。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.xlarge", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientInstanceCapacity", "ErrorMessage": "" }, ], "Instances": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-1234567890abcdef0", "i-9876543210abcdef9" ] ] }

インスタンスを起動しなかったタイプ instant のフリートの出力例を次に示します。

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.xlarge", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientCapacity", "ErrorMessage": "" }, { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientCapacity", "ErrorMessage": "" }, ], "Instances": [] }

異常なスポットインスタンスを置き換える EC2 フリートを作成する

EC2 フリート は、2 分ごとにフリートのインスタンスのヘルスステータスをチェックします。インスタンスのヘルスステータスは healthy または unhealthy です。

EC2 フリート は Amazon EC2 によって提供されるステータスチェックを使用して、インスタンスのヘルスステータスを判断します。インスタンスステータスチェックまたはシステムステータスチェックのいずれかのステータスが 3 回の連続したヘルスステータスチェックで impaired の場合、インスタンスは unhealthy と判断されます。詳細については、「Amazon EC2 インスタンスのステータスチェック」を参照してください。

フリートを設定して、異常のある スポットインスタンス を置き換えることができます。ReplaceUnhealthyInstancestrue に設定した後、unhealthy として報告されたときにスポットインスタンスが置き換えられます。異常のあるスポットインスタンスを置き換えている間、最大数分間、フリートがターゲット容量を下回る場合があります。

要件
  • ヘルスチェックによる置き換えは、タイプ request または instant のフリートではなく、ターゲットキャパシティを維持している EC2 フリート (タイプ maintain のフリート) でのみサポートされます。

  • ヘルスチェックによる置き換えは、スポットインスタンス でのみサポートされます。この機能は オンデマンドインスタンス ではサポートされていません。

  • 作成時のみ異常なインスタンスを置き換えるよう EC2 フリート を設定できます。

  • ユーザーは、ec2:DescribeInstanceStatus アクションを呼び出す許可を持っている場合のみ、ヘルスチェックの置き換えを使用できます。

異常のある スポットインスタンス を置き換えるように EC2 フリート を設定するには
  1. EC2 フリートの作成」で EC2 フリートを作成するための情報を使用します。

  2. 異常のあるスポットインスタンスを置き換えるようにフリートを設定するには、JSON ファイルの ReplaceUnhealthyInstancestrue を指定します。

EC2 フリートの設定オプションをすべて表示する

フリート設定パラメータの詳細なリストを見るには、JSON ファイルを次のように作成できます。各パラメータの説明については create-fleet を参照してください。

使用可能なすべての EC2 フリートパラメータを含めて JSON ファイルを生成するには

create-fleet AWS CLIコマンドと --generate-cli-skeleton パラメータを使用して、EC2 フリート JSON ファイルを生成し、出力のファイルへの保存を指示します。

aws ec2 create-fleet \ --generate-cli-skeleton input > ec2createfleet.json

以下は出力の例です。

{ "DryRun": true, "ClientToken": "", "SpotOptions": { "AllocationStrategy": "price-capacity-optimized", "MaintenanceStrategies": { "CapacityRebalance": { "ReplacementStrategy": "launch" } }, "InstanceInterruptionBehavior": "hibernate", "InstancePoolsToUseCount": 0, "SingleInstanceType": true, "SingleAvailabilityZone": true, "MinTargetCapacity": 0, "MaxTotalPrice": "" }, "OnDemandOptions": { "AllocationStrategy": "prioritized", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" }, "SingleInstanceType": true, "SingleAvailabilityZone": true, "MinTargetCapacity": 0, "MaxTotalPrice": "" }, "ExcessCapacityTerminationPolicy": "termination", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateId": "", "LaunchTemplateName": "", "Version": "" }, "Overrides": [ { "InstanceType": "r5.metal", "MaxPrice": "", "SubnetId": "", "AvailabilityZone": "", "WeightedCapacity": 0.0, "Priority": 0.0, "Placement": { "AvailabilityZone": "", "Affinity": "", "GroupName": "", "PartitionNumber": 0, "HostId": "", "Tenancy": "dedicated", "SpreadDomain": "", "HostResourceGroupArn": "" }, "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 0 }, "MemoryMiB": { "Min": 0, "Max": 0 }, "CpuManufacturers": [ "amd" ], "MemoryGiBPerVCpu": { "Min": 0.0, "Max": 0.0 }, "ExcludedInstanceTypes": [ "" ], "InstanceGenerations": [ "previous" ], "SpotMaxPricePercentageOverLowestPrice": 0, "OnDemandMaxPricePercentageOverLowestPrice": 0, "BareMetal": "included", "BurstablePerformance": "required", "RequireHibernateSupport": true, "NetworkInterfaceCount": { "Min": 0, "Max": 0 }, "LocalStorage": "excluded", "LocalStorageTypes": [ "ssd" ], "TotalLocalStorageGB": { "Min": 0.0, "Max": 0.0 }, "BaselineEbsBandwidthMbps": { "Min": 0, "Max": 0 }, "AcceleratorTypes": [ "inference" ], "AcceleratorCount": { "Min": 0, "Max": 0 }, "AcceleratorManufacturers": [ "amd" ], "AcceleratorNames": [ "a100" ], "AcceleratorTotalMemoryMiB": { "Min": 0, "Max": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 0, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 0, "DefaultTargetCapacityType": "on-demand", "TargetCapacityUnitType": "memory-mib" }, "TerminateInstancesWithExpiration": true, "Type": "instant", "ValidFrom": "1970-01-01T00:00:00", "ValidUntil": "1970-01-01T00:00:00", "ReplaceUnhealthyInstances": true, "TagSpecifications": [ { "ResourceType": "fleet", "Tags": [ { "Key": "", "Value": "" } ] } ], "Context": "" }