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

EC2 フリートの操作

EC2 フリート を使用開始するには、合計ターゲット容量、オンデマンド容量、スポット容量、インスタンスの 1 つ以上の起動仕様、希望上限価格などを指定したリクエストを作成します。フリートリクエストには、フリートがインスタンスの起動に必要とする情報 (AMI、インスタンスタイプ、サブネットまたはアベイラビリティーゾーン、そして 1 つ以上のセキュリティグループ) を定義する起動テンプレートを含める必要があります。お客様は、インスタンスタイプ、サブネット、アベイラビリティーゾーン、支払い上限価格の起動条件オーバーライドを指定でき、各起動条件オーバーライドに加重容量を割り当てることができます。

EC2 フリート は、使用可能な容量があるときは オンデマンドインスタンス を起動し、上限価格がスポット料金を超えていて容量が利用可能なときは スポットインスタンス を起動します。

フリートに スポットインスタンス が含まれている場合、Amazon EC2 はスポット料金の変更に応じてフリートのターゲット容量を維持しようと試みることができます。

タイプ maintain または request の EC2 フリート リクエストは、期限切れになるかお客様によって削除されるまで、アクティブのままになります。タイプ maintain または request のフリートを削除するときは、削除によってそのフリートのインスタンスを終了するかどうかを指定できます。それ以外の場合、オンデマンドインスタンスは、終了されるまで実行され、スポットインスタンス は中断されるか終了されるまで実行されます。

EC2 フリート リクエストの状態

EC2 フリート リクエストは、次に示す状態のいずれかになります。

submitted

EC2 フリート リクエストは評価中です。Amazon EC2 は目標数のインスタンスを起動する準備をしています。リクエストには オンデマンドインスタンス または スポットインスタンス、あるいはその両方を含めることができます。フリートの上限を超えたリクエストは、即時削除されます。

active

EC2 フリート リクエストは検証済みです。Amazon EC2 は実行中のインスタンスをターゲット数分、確保しようとしています。リクエストは、変更または削除されるまで、この状態のままになります。

modifying

EC2 フリート リクエストは変更中です。リクエストは、変更が完全に処理されるか、 リクエストが削除されるまで、この状態のままになります。maintain フリートタイプのみを変更できます。この状態はその他のリクエストタイプには適用されません。

deleted_running

EC2 フリート リクエストが削除され、追加のインスタンスは起動されません。その既存のインスタンスは、手動で中断または終了されるまで実行され続けます。リクエストは、すべてのインスタンスが中断されるか終了されるまで、この状態のままになります。EC2 フリートリクエストが削除された後、タイプ maintain または request の EC2 フリート のみがインスタンスを実行できます。実行中のインスタンスを持つ削除した instant フリートはサポートされていません。この状態は instant フリートには適用されません。

deleted_terminating

EC2 フリートリクエストが削除され、そのインスタンスが終了します。リクエストは、すべてのインスタンスが終了されるまで、この状態のままになります。

deleted

EC2 フリートが削除され、実行中のインスタンスはありません。リクエストは、そのインスタンスが終了されてから 2 日後に削除されます。

EC2 フリートの前提条件

起動テンプレート

起動テンプレートには、インスタンスタイプ、アベイラビリティーゾーン、支払い上限価格など、起動するインスタンスの情報が含まれています。詳細については、「起動テンプレートからのインスタンスの起動」を参照してください。

EC2 フリート用のサービスにリンクされたロール

AWSServiceRoleForEC2Fleet ロールは、インスタンスのリクエスト、起動、終了、タグ付けを行う許可を EC2 フリートに付与します。Amazon EC2 は、このサービスにリンクされたロールを使用して、以下のアクションを完了します。

  • ec2:RunInstances – インスタンスを起動します。

  • ec2:RequestSpotInstances – スポットインスタンスをリクエストします。

  • ec2:TerminateInstances – インスタンスを終了します。

  • ec2:DescribeImages – スポットインスタンス の Amazon マシンイメージ (AMI) の説明

  • ec2:DescribeInstanceStatus – スポットインスタンス のステータスを表示します。

  • ec2:DescribeSubnets – スポットインスタンス のサブネットを表示します。

  • ec2:CreateTags – EC2 フリート、インスタンス、ボリュームにタグを追加します。

AWS CLI または API を使用して EC2 フリート を作成する前に、このロールが存在していることを確認します。

注記

instant EC2 フリート に、このロールは必要ありません。

ロールを作成するには、IAM コンソールを次のように使用します。

EC2 フリート の AWSServiceRoleForEC2Fleet ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで ロール を選択してから、ロールを作成する を選択します。

  3. [信頼されたエンティティのタイプを選択] ページで、以下の操作を実行します。

    1. [信頼できるエンティティタイプ] で、[AWS サービス] を選択します。

    2. [ユースケース][サービスまたはユースケース] で、[EC2 - フリート] を選択します。

      ヒント

      必ず [EC2 - フリート] を選択してください。[EC2] を選択した場合、[EC2 - フリート] ユースケースは [ユースケース] リストに表示されません。[EC2 - フリート] ユースケースでは、必要な IAM アクセス許可を持つポリシーが自動的に作成され、ロール名として AWSServiceRoleForEC2Fleet が提案されます。

    3. [Next] を選択します。

  4. [アクセス許可を追加] ページで [次へ] を選択します。

  5. [名前、確認、および作成] ページで、[ロールの作成] をクリックします。

EC2 フリート を使用する必要がなくなった場合は、AWSServiceRoleForEC2Fleet ロールを削除することをお勧めします。このロールがアカウントから削除された後で、別のフリートを作成した場合はロールを再度作成できます。

詳細については、IAM ユーザーガイド の「サービスにリンクされたロールの使用」を参照してください。

暗号化された AMI および EBS スナップショット用のカスタマーマネージド型キーへのアクセス権限の付与

暗号化された AMI または暗号化された Amazon EBS スナップショットを EC2 フリートで指定し、暗号化の AWS KMS キーを使用する場合は、カスタマーマネージド型キーを使用して、Amazon EC2 がユーザーの代わりにインスタンスを起動する許可を、AWSServiceRoleForEC2Fleet ロールに付与する必要があります。これを行うには、次の手順で示すように、カスタマーマネージド型キーに許可を追加する必要があります。

アクセス権限を設定するときは、付与がキーポリシーの代わりになります。詳細については、「AWS Key Management Service デベロッパーガイド」で「許可の使用」と「AWS KMS でのキーポリシーの使用」を参照してください。

AWSServiceRoleForEC2Fleet ロールにカスタマーマネージド型キーを使用する許可を付与するには
  • 許可の作成 コマンドを使用して、カスタマーマネージド型キーに許可を付与し、オペレーションを実行する許可を追加するプリンシパル (AWSServiceRoleForEC2Fleet サービスにリンクされたロール) を指定します。カスタマーマネージド型キーは、key-id パラメーターとカスタマーマネージド型キーの ARN を指定されます。プリンシパルを指定するには、grantee-principal パラメータと AWSServiceRoleForEC2Fleet サービスにリンクされたロールの ARN を使用します。

    aws kms create-grant \ --region us-east-1 \ --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Fleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

EC2 フリートユーザーのアクセス許可

ユーザーが EC2 フリートを作成または管理する場合、必ず必要な許可を付与してください。

EC2 フリートのポリシーを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、ポリシー を選択します。

  3. [Create policy] (ポリシーの作成) を選択します。

  4. [Create policy] (ポリシーの作成) ページで、JSON タブを選択し、テキストを以下に置き換えて [Review policy] (ポリシーの確認) を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource":"arn:aws:iam::123456789012:role/DevTeam*" } ] }

    ec2:* は、ユーザーにすべての Amazon EC2 API アクションを呼び出す許可を付与します。特定の Amazon EC2 API アクションに制限するには、代わりにこれらのアクションを指定します。

    IAM ユーザーは、既存の IAM ロールを列挙する iam:ListInstanceProfiles アクション、EC2 フリートロールを指定する iam:PassRole アクション、および既存のインスタンスプロファイルを列挙する iam:ListRoles アクションを呼び出すには、許可が必要です。

    (オプション) ユーザーが IAM コンソールを使用してロールまたはインスタンスプロファイルを作成できるようにするには、次のアクションをポリシーに追加する必要もあります。

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  5. [Review policy] (ポリシーの確認) ページでポリシー名と説明を入力し、[Create policy] (ポリシーの作成) を選択します。

  6. アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。

EC2 フリート ヘルスチェック

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

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

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

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

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

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

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

異常のある スポットインスタンス を置き換えるように EC2 フリート を設定するには
  1. 表示されるステップに従って EC2 フリート を作成します。詳細については、「EC2 フリートの作成」を参照してください。

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

EC2 フリート JSON 設定ファイルの生成

フリート設定パラメータの詳細なリストを見るには、JSON ファイルを次のように作成できます。各パラメータの説明については、AWS CLI コマンドリファレンスの「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": "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": "" }

EC2 フリートの作成

EC2 フリートを作成するには、次のパラメータを指定するだけです。

  • LaunchTemplateId または LaunchTemplateName — 使用する起動テンプレートを指定します (インスタンスタイプ、アベイラビリティーゾーン、支払い上限価格など、起動するインスタンスのパラメータが含まれています)。

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

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

起動テンプレートをオーバーライドする複数の起動条件を指定できます。起動条件は、インスタンスタイプ、アベイラビリティーゾーン、サブネット、上限価格によって異なり、異なる加重容量が含まれていることがあります。または、インスタンスが持つ必要がある属性を指定すると、Amazon EC2 はそれらの属性を持つすべてのインスタンスタイプを識別します。詳細については、EC2 フリートの属性ベースのインスタンスタイプの選択 をご参照ください。

パラメータを指定しない場合、フリートはデフォルト値を使用します。

JSON ファイルのフリートパラメータを指定します。詳細については、「EC2 フリート JSON 設定ファイルの生成」を参照してください。

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

EC2 フリート (AWS CLI) を作成するには
  • create-fleet (AWS CLI) コマンドを使用して EC2 フリートを作成し、フリート設定パラメータを含む JSON ファイルを指定します。

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

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

タイプ 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 フリート リクエストを分類および管理しやすくするため、カスタムメタデータでタグ付けすることができます。EC2 フリート タグは、作成時または作成後にリクエストに割り当てることができます。

フリートリクエストにタグを付けると、フリートによって起動されるインスタンスとボリュームには自動的にタグ付けされません。フリートによって起動されるインスタンスとボリュームには、明示的にタグを付ける必要があります。タグは、フリートリクエストのみに割り当てるか、フリートによって起動されたインスタンスのみに割り当てるか、フリートによって起動されたインスタンスにアタッチされたボリュームのみに割り当てるか、または上記 3 つすべてに割り当てるかを選択できます。

注記

instant フリートタイプでは、 オンデマンドインスタンス および スポットインスタンス にアタッチされているボリュームにタグ付けできます。request または maintain フリートタイプでは、オンデマンドインスタンス にアタッチされているボリュームにのみタグ付けできます。

タグの仕組みの詳細については、Amazon EC2 リソースのタグ付けを参照してください。

前提条件

リソースにタグ付けする許可をユーザーに付与します。詳細については、「例: リソースのタグ付け」を参照してください。

リソースにタグ付けする許可をユーザーに付与するには

以下を含む IAM ポリシーを作成します。

  • ec2:CreateTags アクション。これにより、タグを作成する許可がユーザーに付与されます。

  • ec2:CreateFleet アクション。これにより、EC2 フリートリクエストを作成する許可がユーザーに付与されます。

  • Resource に対しては、"*" を指定することをお勧めします。これにより、ユーザーはすべてのリソースタイプにタグ付けできます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagEC2FleetRequest", "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "*" }
重要

現在、create-fleet リソースに対するリソースレベルのアクセス許可はサポートされていません。リソースとして create-fleet を指定した場合、フリートにタグ付けしようとすると、不正な例外が発生します。以下の例は、ポリシーを設定 しない 方法を示しています。

{ "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "arn:aws:ec2:us-east-1:111122223333:create-fleet/*" }

アクセス権限を付与するには、ユーザー、グループ、またはロールにアクセス許可を追加します。

新しい EC2 フリート リクエストにタグ付けするには

作成時に EC2 フリート リクエストをタグ付けするには、フリートを作成するために使用した JSON ファイル でキーと値のペアを指定します。ResourceType の値は fleet にする必要があります。別の値で指定すると、フリートリクエストは失敗します。

EC2 フリート によって起動されたインスタンスおよびボリュームにタグ付けするには

フリートが起動したインスタンスおよびボリュームにタグ付けするには、EC2 フリート リクエストで参照される 起動テンプレート でタグを指定します。

注記

request または maintain フリートタイプによって起動される スポットインスタンス にアタッチされたボリュームにタグを付けることはできません。

既存の EC2 フリート リクエスト、インスタンス、ボリュームにタグを付けるには (AWS CLI)

create-tags コマンドを使用して、既存のリソースにタグを付けます。

aws ec2 create-tags \ --resources fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE i-1234567890abcdef0 vol-1234567890EXAMPLE \ --tags Key=purpose,Value=test

EC2 フリートを記述する

EC2 フリートの設定、EC2 フリートのインスタンス、EC2 フリートのイベント履歴を記述できます。

EC2 フリートを記述するには (AWS CLI)

EC2 フリート の詳細を表示するには、describe-fleets コマンドを使用します。

aws ec2 describe-fleets
重要

フリートがタイプ instant の場合は、フリート ID を指定する必要があります。指定しない場合、レスポンスに表示されません。--fleet-ids を次のように含めます。

aws ec2 describe-fleets --fleet-ids fleet-8a22eee4-f489-ab02-06b8-832a7EXAMPLE

出力例

{ "Fleets": [ { "ActivityStatus": "fulfilled", "CreateTime": "2022-02-09T03:35:52+00:00", "FleetId": "fleet-364457cd-3a7a-4ed9-83d0-7b63e51bb1b7", "FleetState": "active", "ExcessCapacityTerminationPolicy": "termination", "FulfilledCapacity": 2.0, "FulfilledOnDemandCapacity": 0.0, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" } } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 2, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 2, "DefaultTargetCapacityType": "spot" }, "TerminateInstancesWithExpiration": false, "Type": "maintain", "ReplaceUnhealthyInstances": false, "SpotOptions": { "AllocationStrategy": "capacity-optimized", "InstanceInterruptionBehavior": "terminate" }, "OnDemandOptions": { "AllocationStrategy": "lowestPrice" } } ] }

指定した EC2 フリート のインスタンスの詳細を表示するには、describe-fleet-instances コマンドを使用します。実行中のインスタンスの返されるリストは定期的に更新されますが、古い可能性もあります。

aws ec2 describe-fleet-instances --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

出力例

{ "ActiveInstances": [ { "InstanceId": "i-09cd595998cb3765e", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-86k84j6p" }, { "InstanceId": "i-09cf95167ca219f17", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-dvxi7fsm" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" }

指定した EC2 フリート の指定期間の履歴を表示するには、describe-fleet-history コマンドを使用します。

aws ec2 describe-fleet-history --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --start-time 2018-04-10T00:00:00Z

出力例

{ "HistoryRecords": [ { "EventInformation": { "EventSubType": "submitted" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:05.000Z" }, { "EventInformation": { "EventSubType": "active" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:15.000Z" }, { "EventInformation": { "EventDescription": "t2.small, ami-07c8bc5c1ce9598c3, ...", "EventSubType": "progress" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-083a1c446e66085d2" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-090db02406cc3c2d6" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "LastEvaluatedTime": "1970-01-01T00:00:00.000Z", "StartTime": "2018-04-09T23:53:20.000Z" }

EC2 フリート の変更

状態が submitted または active の EC2 フリート を変更することができます。フリートを変更すると、そのフリートは modifying 状態に移行します。

変更できるのは、maintain タイプの EC2 フリート だけです。request または instant タイプの EC2 フリート は変更できません。

EC2 フリート の以下のパラメータを変更できます。

  • target-capacity-specificationTotalTargetCapacityOnDemandTargetCapacity、および SpotTargetCapacity のターゲット容量を増やすか減らします。

  • excess-capacity-termination-policy – EC2 フリート の合計ターゲット容量がフリートの現在のサイズより小さくなった場合、実行中のインスタンスが終了されるかどうか。有効な値は、no-termination および termination です。

ターゲット容量を増やすと、EC2 フリート は DefaultTargetCapacityType で指定されたインスタンス購入オプション (オンデマンドインスタンス または スポットインスタンス) に従って追加のインスタンスを起動します。

DefaultTargetCapacityTypespot の場合、EC2 フリート はその配分戦略に従って追加の スポットインスタンス を起動します。配分戦略が lowest-price の場合、フリートは、リクエスト内にある最低価格のスポットキャパシティプールからインスタンスを起動します。配分戦略が diversified の場合、フリートは、リクエストのプールにインスタンスを分散します。

ターゲット容量を減らす場合、EC2 フリート は新しいターゲット容量を超えるすべてのオープンリクエストをキャンセルします。フリートのサイズが新しいターゲット容量に達するとフリートのスポットインスタンスが終了されるようにリクエストできます。配分戦略が lowest-price である場合は、フリートの最低単価のインスタンスが終了されます。配分戦略が diversified である場合は、フリートのプール全体でインスタンスが終了されます。あるいは、EC2 フリート の現在のサイズを保持するようにリクエストすることもできますが、中断された スポットインスタンス や手動終了されたインスタンスへの置き換えはできません。

ターゲット容量が減ったために EC2 フリートがスポットインスタンスを終了する場合、インスタンスはスポットインスタンスの中断通知を受け取ります。

EC2 フリートを変更するには (AWS CLI)

modify-fleet コマンドを使用して、指定された EC2 フリート のターゲット容量を更新します。

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=20

ターゲット容量を小さくしてもフリートの現在のサイズを保持する場合は、前のコマンドを以下のように変更できます。

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=10 \ --excess-capacity-termination-policy no-termination

EC2 フリート の削除

EC2 フリート が不要になった場合には、それを削除することができます。フリートを削除すると、フリートに関連付けられているすべてのスポットリクエストがキャンセルされるため、新しいスポットインスタンスは起動されません。

EC2 フリートを削除するときは、そのインスタンスをすべて終了させるかどうかを指定する必要があります。これには、オンデマンドインスタンスとスポットインスタンスの両方が含まれます。

フリートを削除するときにインスタンスを終了する必要があることを指定した場合、フリートは deleted_terminating 状態へ移行します。それ以外の場合は deleted_running 状態になり、インスタンスは中断または手動終了されるまで、引き続き実行されます。

制限事項
  • 1 回のリクエストで最大 25 個の instant フリートを削除できます。この数を超えると、instant フリートは削除されず、エラーが返されます。タイプ maintain または request のフリートについては、1 回のリクエストで削除できるフリートの数に制限はありません。

  • instant フリートを削除するのに、1 回のリクエストで最大 1000 インスタンスを終了できます。

EC2 フリート を削除してインスタンスを終了するには (AWS CLI)

delete-fleets コマンドと --terminate-instances パラメータを使用し、指定された EC2 フリートを削除して関連するインスタンスを終了します。

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --terminate-instances

出力例

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_terminating", "PreviousFleetState": "active", "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" } ] }
インスタンスを終了せずに EC2 フリートを削除するには (AWS CLI)

--no-terminate-instances パラメータを使用して前のコマンドを変更することで、関連するインスタンスを終了せずに、指定された EC2 フリートを削除できます。

注記

--no-terminate-instancesinstant フリートではサポートされていません。

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --no-terminate-instances

出力例

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_running", "PreviousFleetState": "active", "FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE" } ] }

フリートの削除に失敗した場合のトラブルシューティング

EC2 フリート の削除に失敗すると、出力中の UnsuccessfulFleetDeletions は EC2 フリート の ID、エラーコード、エラーメッセージを返します。

エラーコードは次のとおりです。

  • ExceededInstantFleetNumForDeletion

  • fleetIdDoesNotExist

  • fleetIdMalformed

  • fleetNotInDeletableState

  • NoTerminateInstancesNotSupported

  • UnauthorizedOperation

  • unexpectedError

ExceededInstantFleetNumForDeletion のトラブルシューティング

1 回のリクエストで 25 個 を超える instant フリートを削除しようとすると、ExceededInstantFleetNumForDeletion エラーが返されます。このエラーの出力例を次に示します。

{ "UnsuccessfulFleetDeletions": [ { "FleetId": " fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } }, { "FleetId": "fleet-9a941b23-0286-5bf4-2430-03a029a07e31", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } } . . . ], "SuccessfulFleetDeletions": [] }
NoTerminateInstancesNotSupported のトラブルシューティング

フリートを削除するときに instant フリート内のインスタンスを終了しないように指定した場合、NoTerminateInstancesNotSupported エラーが返されます。--no-terminate-instancesinstant フリートではサポートされていません。このエラーの出力例を次に示します。

{ "UnsuccessfulFleetDeletions": [ { "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "NoTerminateInstances option is not supported for instant fleet", "Code": "NoTerminateInstancesNotSupported" } } ], "SuccessfulFleetDeletions": []
UnauthorizedOperation のトラブルシューティング

インスタンスを終了するアクセス許可がない場合、インスタンスを終了する必要があるフリートを削除するときに UnauthorizedOperation エラーが発生します。以下はエラーレスポンスです。

<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation. Encoded authorization failure message: VvuncIxj7Z_CPGNYXWqnuFV-YjByeAU66Q9752NtQ-I3-qnDLWs6JLFd KnSMMiq5s6cGqjjPtEDpsnGHzzyHasFHOaRYJpaDVravoW25azn6KNkUQQlFwhJyujt2dtNCdduJfrqcFYAjlEiRMkfDHt7N63SKlweKUl BHturzDK6A560Y2nDSUiMmAB1y9UNtqaZJ9SNe5sNxKMqZaqKtjRbk02RZu5V2vn9VMk6fm2aMVHbY9JhLvGypLcMUjtJ76H9ytg2zRlje VPiU5v2s-UgZ7h0p2yth6ysUdhlONg6dBYu8_y_HtEI54invCj4CoK0qawqzMNe6rcmCQHvtCxtXsbkgyaEbcwmrm2m01-EMhekLFZeJLr DtYOpYcEl4_nWFX1wtQDCnNNCmxnJZAoJvb3VMDYpDTsxjQv1PxODZuqWHs23YXWVywzgnLtHeRf2o4lUhGBw17mXsS07k7XAfdPMP_brO PT9vrHtQiILor5VVTsjSPWg7edj__1rsnXhwPSu8gI48ZLRGrPQqFq0RmKO_QIE8N8s6NWzCK4yoX-9gDcheurOGpkprPIC9YPGMLK9tug </Message></Error></Errors><RequestID>89b1215c-7814-40ae-a8db-41761f43f2b0</RequestID></Response>

エラーを解決するには、次の例に示すように、ec2:TerminateInstances アクションを IAM ポリシーに追加する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeleteFleetsAndTerminateInstances", "Effect": "Allow", "Action": [ "ec2:DeleteFleets" "ec2:TerminateInstances" ], "Resource": "*" } ] }