スポットフリートを作成する - Amazon Elastic Compute Cloud

スポットフリートを作成する

AWS Management Console を使用して、AMI と必要な合計ターゲットキャパシティのみを選択して、スポットフリートリクエストをすばやく作成します。Amazon EC2 は、ユーザーのニーズに最適なフリートを設定し、スポットベストプラクティスに従います。詳細については、「スポットフリートリクエストを迅速に作成します (コンソール)」を参照してください。それ以外の場合は、デフォルト設定のいれかを変更できます。詳細については、定義済みパラメータを使用してスポットフリートリクエストを作成する (コンソール)およびスポットフリートを作成するにはAWS CLIを参照してください。

フリートにオンデマンドインスタンスを含める場合は、リクエストで起動テンプレートを指定し、希望するオンデマンドキャパシティを指定する必要があります。

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

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

スポットフリートアクセス許可

ユーザーがスポットフリートを作成または管理する場合、必要な許可を付与する必要があります。

Amazon EC2 コンソールを使用してスポットフリートを作成した場合、AWSServiceRoleForEC2SpotFleet および AWSServiceRoleForEC2Spot というサービスにリンクされた 2 つのロールと、aws-ec2-spot-fleet-tagging-role というロールが作成されます。ユーザーの代わりに、リソースのリクエスト、起動、終了、タグ付けを行うアクセス許可をスポットフリートに与えます。AWS CLI または API を使用する場合は、これらのロールが存在することを確認する必要があります。

次の手順に従って、必要なアクセス許可を付与し、ロールを作成します。

ユーザーにスポットフリートの許可を付与する

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

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

  2. ナビゲーションペインで、[Policies]、[Create policy] の順に選択します。

  3. [ポリシーの作成] ページで、 [JSON] を選択し、テキストを以下に置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:CreateTags", "ec2:RequestSpotFleet", "ec2:ModifySpotFleetRequest", "ec2:CancelSpotFleetRequests", "ec2:DescribeSpotFleetRequests", "ec2:DescribeSpotFleetInstances", "ec2:DescribeSpotFleetRequestHistory" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/aws-ec2-spot-fleet-tagging-role" }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:ListRoles", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }

    前述したポリシーの例では、ほとんどのスポットフリートのユースケースで必要な許可をユーザーに付与します。特定の API アクションに制限するには、代わりにこれらの API アクションのみを指定します。

    必要な EC2 および IAM の API

    ポリシーには、次の API を含める必要があります。

    • ec2:RunInstances - スポットフリートでインスタンスを起動するために必要

    • ec2:CreateTags - スポットフリートのリクエスト、インスタンス、またはボリュームのタグ付けに必要

    • iam:PassRole - スポットフリートロールを指定するために必要

    • iam:CreateServiceLinkedRole - サービスにリンクされたロールの作成に必要

    • iam:ListRoles - 既存の IAM ロールを列挙するために必要

    • iam:ListInstanceProfiles - 既存のインスタンスプロファイルを列挙するために必要

    重要

    起動仕様または起動テンプレートで IAM インスタンスプロファイルのロールを指定する場合は、そのロールをサービスに渡す許可をユーザーに付与する必要があります。これを行うには、IAM ポリシーで iam:PassRole アクションのリソースとして "arn:aws:iam::*:role/IamInstanceProfile-role" を含めます。詳細については、「IAM ユーザーガイド」の「AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。

    スポットフリートの API

    必要に応じて、次のスポットフリート API アクションをポリシーに追加します。

    • ec2:RequestSpotFleet

    • ec2:ModifySpotFleetRequest

    • ec2:CancelSpotFleetRequests

    • ec2:DescribeSpotFleetRequests

    • ec2:DescribeSpotFleetInstances

    • ec2:DescribeSpotFleetRequestHistory

    オプションの IAM API

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

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  4. [ポリシーの確認] を選択します。

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

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

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

Amazon EC2 は、ユーザーに代わって AWS の他のサービスを呼び出すために必要なアクセス許可のために、サービスにリンクされたロールを使用します。サービスにリンクされたロールは、AWS のサービスに直接リンクされた一意のタイプの IAM ロールです。サービスにリンクされたロールは、AWS のサービスにアクセス許可を委任するためのセキュアな方法を提供します。これは、リンクされたサービスのみが、サービスにリンクされたロールを引き受けることができるためです。詳細については、「IAM ユーザーガイド」の「サービスにリンクされたロールの作成」を参照してください。

Amazon EC2 は、AWSServiceRoleForEC2SpotFleet という、サービスにリンクされたロールを使用して、ユーザーの代わりにインスタンスを起動して管理します。

重要

暗号化された AMI または暗号化された Amazon EBS スナップショットをスポットフリートで指定した場合は、CMK を使用して Amazon EC2 がユーザーの代わりにインスタンスを起動する許可を AWSServiceRoleForEC2SpotFleet ロールに付与する必要があります。詳細については、「暗号化された AMI および EBS スナップショット用の CMK へのアクセス権の付与」を参照してください。

AWSServiceRoleForEC2SpotFleet によって付与されるアクセス許可

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

  • ec2:RequestSpotInstances - スポットインスタンスをリクエスト

  • ec2:RunInstances - インスタンスを起動

  • ec2:TerminateInstances - インスタンスを終了

  • ec2:DescribeImages - インスタンスの Amazon マシンイメージ (AMI) を表示

  • ec2:DescribeInstanceStatus - インスタンスのステータスを表示

  • ec2:DescribeSubnets - インスタンスのサブネットを記述

  • ec2:CreateTags - スポットフリートリクエスト、インスタンス、ボリュームにタグを追加

  • elasticloadbalancing:RegisterInstancesWithLoadBalancer - 指定されたインスタンスを指定されたロードバランサーに追加

  • elasticloadbalancing:RegisterTargets - 指定されたターゲットを指定されたターゲットグループに登録

サービスにリンクされたロールの作成

ほとんどの状況では、サービスにリンクされたロールを手動で作成する必要はありません。Amazon EC2 は、コンソールを使用してスポットフリートを初めて作成するときに、AWSServiceRoleForEC2SpotFleet サービスにリンクされたロールを作成します。

Amazon EC2 がこのサービスにリンクされたロールのサポートを開始した 2017 年 10 月よりも前にアクティブなスポットフリートリクエストを行った場合、Amazon EC2は AWS アカウントで AWSServiceRoleForEC2SpotFleet ロールを作成します。 詳細については、IAM ユーザーガイドの「 アカウントに新しいロールが表示される」を参照してください。AWS

AWS CLI または API を使用してスポットフリートを作成する場合、最初にこのロールが存在しているか確認する必要があります。

コンソールを使用してスポットフリートの [AWSServiceRoleForEC2SpotFleet] ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで Roles (ロール) を選択します。

  3. [Create role] を選択します。

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

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

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

    3. [ユースケース] で、[EC2 - スポットフリート] を選択します。

      注記

      [EC2 - スポットフリート] ユースケースでは、必要な IAM アクセス許可を持つポリシーが自動的に作成され、ロール名として [AWSEC2SpotFleetServiceRolePolicy] が提案されます。

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

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

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

AWS CLI を使用してスポットフリートの [AWSServiceRoleForEC2SpotFleet] ロールを作成するには

次のように、create-service-linked-role コマンドを使用します。https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html

aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com

スポットフリートを使用する必要がなくなった場合は、[AWSServiceRoleForEC2Fleet] ロールを削除することをお勧めします。このロールがアカウントから削除された後、コンソールを使用してスポットフリートをリクエストすると、 Amazon EC2 はロールを再作成します。詳細については、 IAM ユーザーガイド の「サービスにリンクされたロールの削除」を参照してください。

暗号化された AMI および EBS スナップショット用の CMK へのアクセス権の付与

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

アクセス権限を設定するときは、付与がキーポリシーの代わりになります。詳細については、 デベロッパーガイドの「許可の使用」と「 でのキーポリシーの使用」を参照してください。https://docs.aws.amazon.com/kms/latest/developerguide/grants.htmlAWS KMSAWS Key Management Service

CMK を使用するアクセス許可を AWSServiceRoleForEC2SpotFleet ロールに付与するには
  • create-grant コマンドを使用して CMK に付与を追加し、プリンシパル (サービスにリンクされたロール AWSServiceRoleForEC2SpotFleet) を指定します。このプリンシパルには、付与が許可するオペレーションを実行するためのアクセス許可が提供されます。https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.htmlCMK を指定するには、 パラメータと CMK の ARN を使用します。key-idプリンシパルを指定するには、 パラメータとサービスにリンクされたロール AWSServiceRoleForEC2SpotFleet の ARN を使用します。grantee-principal

    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/AWSServiceRoleForEC2SpotFleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

スポットインスタンス用のサービスにリンクされたロール

Amazon EC2 は、AWSServiceRoleForEC2Spot という、サービスにリンクされたロールを使用して、ユーザーの代わりに スポットインスタンス を起動して管理します。詳細については、「スポットインスタンスリクエスト向けのサービスにリンクされたロール」を参照してください。

スポットフリートにタグ付けするための IAM ロール

aws-ec2-spot-fleet-tagging-role IAM ロールは、スポットフリートリクエスト、インスタンス、ボリュームにタグ付けするアクセス権限をスポットフリートに付与します。詳細については、「新しいまたは既存のスポットフリートリクエスト、およびそのフリートが起動するインスタンスとボリュームにタグ付けする」を参照してください。

重要

フリートのインスタンスにタグ付けすることを選択し、ターゲット容量を維持することを選択した場合 (スポットフリートリクエストのタイプは maintain)、ユーザーと IamFleetRole の許可の違いにより、フリートのインスタンスのタグ付け動作に整合性がなくなる可能性があります。IamFleetRoleCreateTags アクセス許可が含まれていない場合、フリートによって起動されたインスタンスの一部がタグ付けされていない可能性があります。当社はこの不整合の修正に取り組んでいますが、フリートによって起動されたすべてのインスタンスがタグ付けされるようにするために、IamFleetRoleにはaws-ec2-spot-fleet-tagging-roleロールを使用することをお勧めします。または、既存のロールを使用するには、AmazonEC2SpotFleetTaggingRole の AWS 管理ポリシーを既存のロールにアタッチします。それ以外の場合は、既存のポリシーに CreateTags アクセス許可を手動で追加する必要があります。

スポットフリートにタグ付けする IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで Roles (ロール) を選択します。

  3. [Create role] を選択します。

  4. [Select trusted entity] (信頼できるエンティティの選択) ページの [Trusted entity type] (信頼できるエンティティタイプ) で、[AWS service] ( のサービス) を選択します。

  5. [Use case] (ユースケース) で、[Use cases for other AWS services] (他の サービスでのユースケース) から [EC2] を選択し、[EC2 - Spot Fleet Tagging] (EC2 - スポットフリートのタグ付け) を選択します。

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

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

  8. [Name, review, and create] (名前、レビュー、および作成) ページで、[Role name] (ロール名) にロールの名前 (例えば、aws-ec2-spot-fleet-tagging-role) を入力します。

  9. ページ内の情報を確認し、[Create role] (ロールを作成) をクリックします。

サービス間の混乱した代理の防止

「混乱した代理」問題は、アクションを実行するためのアクセス許可を持たないエンティティが、より特権のあるエンティティにアクションの実行を強制できてしまう場合に生じる、セキュリティ上の問題です。aws-ec2-spot-fleet-tagging-role 信頼ポリシー内のグローバル条件コンテキストキー aws:SourceArnaws:SourceAccount を使用して、リソースについてスポットフリートが別のサービスに付与するアクセス許可を、制限することをお勧めします。

aws:SourceArn および aws:SourceAccount 条件キーを aws-ec2-spot-fleet-tagging-role 信頼ポリシーに追加するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles] (ロール) を選択します。

  3. 前に作成してある aws-ec2-spot-fleet-tagging-role を見つけ、リンク (チェックボックスではありません) をクリックします。

  4. [Summary] (概要) にある [Trust relationships] (信頼関係) タブを開き、[Edit trust policy] (信頼ポリシーの編集) をクリックします。

  5. 「混乱した代理」問題を防止するために、JSON ステートメント内で、以下のようにグローバル条件コンテキストキー aws:SourceAccount および aws:SourceArn を含む Condition 要素を追加ます。

    "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:us-east-1:account_id:spot-fleet-request/sfr-*" }, "StringEquals": { "aws:SourceAccount": "account_id" }
    注記

    aws:SourceArn の値にアカウント ID が含まれており、上記のグローバル条件コンテキストキーの両方を同じポリシーステートメント内で使用する場合、aws:SourceAccount 値と aws:SourceArn 値の中のアカウントには、同じアカウント ID を使用する必要があります。

    最終的な信頼ポリシーは次のようになります。

    { "Version": "2012-10-17", "Statement": { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "spotfleet.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ec2:us-east-1:account_id:spot-fleet-request/sfr-*" }, "StringEquals": { "aws:SourceAccount": "account_id" } } } }
  6. [ポリシーの更新] を選択します。

次の表に、aws-ec2-spot-fleet-tagging-role の範囲を制限するために想定される aws:SourceArn の値を、その特異性の様々なレベルについてまとめました。

API オペレーション 呼び出されたサービス スコープ aws:SourceArn
RequestSpotFleet AWS STS (AssumeRole) aws-ec2-spot-fleet-tagging-role が持つ AssumeRole の機能を、指定されたアカウントの spot-fleet-requests に制限します。 arn:aws:ec2:*:123456789012:spot-fleet-request/sfr-*
RequestSpotFleet AWS STS (AssumeRole) aws-ec2-spot-fleet-tagging-roleが持つ AssumeRole の機能を、指定されたアカウントおよび指定されたリージョンの spot-fleet-requests に制限します。このロールは他のリージョンでは使用できないことに注意してください。 arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-*
RequestSpotFleet AWS STS (AssumeRole) aws-ec2-spot-fleet-tagging-role が持つ AssumeRoleの機能を、フリート sfr-11111111-1111-1111-1111-111111111111 に影響を与えるアクションのみに制限します。このロールは、他のスポットフリートでは使用できない場合があることに注意してください。また、このロールを使用して request-spot-fleet により新しいスポットフリートを起動することはできません。 arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-11111111-1111-1111-1111-111111111111

スポットフリートリクエストを迅速に作成します (コンソール)

以下の手順に従って、スポットフリートリクエストを迅速に作成します。

推奨設定を使用してスポットフリートリクエストを作成するには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットを初めて使用する場合は、ウェルカムページが表示されるので、そこで [Get started] を選択します。それ以外の場合は、[Request Spot Instances] (スポットインスタンスのリクエスト) を選択します。

  4. [Launch parameters] (起動パラメータ) で、[Manually configure launch parameters] (起動パラメータを手動で構成する) を選択します。

  5. AMI で、AMI を選択します。

  6. [Target capacity] (ターゲット容量) の下の [Total target capacity] (総ターゲット容量) で、リクエストする単位数を指定します。ユニットのタイプには、[インスタンス][vCPU]、または [メモリ (MiB)] を選択できます。

  7. [Your fleet request at a glance] (フリートリクエストの概要) で、フリートの設定を確認し、[Launch] (起動) を選択します。

定義済みパラメータを使用してスポットフリートリクエストを作成する (コンソール)

定義済みパラメータを使用して、スポットフリートを作成できます。

定義済みパラメータを使用してスポットフリートリクエストを作成するには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットを初めて使用する場合は、ウェルカムページが表示されるので、そこで [Get started] を選択します。それ以外の場合は、[Request Spot Instances] (スポットインスタンスのリクエスト) を選択します。

  4. [起動パラメータ] では、以下のように、起動パラメータを手動で設定することも、起動テンプレートを使用することもできます。

    1. [手動設定] Amazon EC2 コンソールで起動パラメータを定義するには、[起動パラメータを手動で構成する] を選択し、以下の手順を実行します。

      1. [AMI] で、AWS が提供する基本 AMI のいずれかを選択します。あるいは、[Search for AMI] (AMI を検索) をクリックして、ユーザーコミュニティの AMI、AWS Marketplace、または独自の AMI を選択することも可能です。

        注記

        起動パラメータで指定された AMI が登録解除または無効になっている場合、AMI から新しいインスタンスを起動することはできません。ターゲット容量を維持するように設定されたフリートの場合、ターゲット容量は維持されません。

      2. (オプション) [Key pair name] で、既存のキーペアを使用するか、新しいキーペアを作成するかを選択します。

        [既存のキーペア] キーペアを選択します。

        [新しいキーペア] [新しいキーペアの作成] を選択して [キーペア] ページに進みます。完了したら、[Spot Requests] (スポットリクエスト) ページに戻ってリストを更新します。

      3. (オプション) [Additional launch parameters] (追加の起動パラメータ) を展開し、次の操作を実行します。

        1. (オプション) Amazon EBS 最適化を有効にするには、[EBS-optimized] (EBS に最適化された) で [Launch EBS-optimized instances] (EBS に最適化されたインスタンスの起動) を選択します。

        2. (オプション) インスタンス用の一時ブロックレベルストレージを追加するには、[Instance store] (インスタンスストア) で [Attach at launch] (起動時にアタッチ) を選択します。

        3. (オプション) ストレージを追加するには、[Add new volume] (新しいボリュームの追加) を選択し、インスタンスタイプに応じて追加のインスタンスストアボリュームまたは Amazon EBS ボリュームを指定します。

        4. (オプション) デフォルトでは、インスタンスに対して基本モニタリングが有効になります。詳細モニタリングを有効にするには、[Monitoring] (モニタリング) で [Enable CloudWatch detailed monitoring] (CloudWatch 詳細モニタリングの有効化) を選択します。

        5. (オプション) 専有スポットインスタンスを実行するには、[Tenancy] (テナンシー) で [Dedicated - run a dedicated instance] (専有 - 専有インスタンスの実行) を選択します。

        6. (オプション) [Security groups] で、1 つ以上のセキュリティグループを選択するか、新しいセキュリティグループを作成します。

          [既存のセキュリティグループ] 1 つ以上のセキュリティグループを選択します。

          [新しいセキュリティグループ] [Create new security group] (新しいセキュリティグループの作成) を選択し、[Security Groups] (セキュリティグループ) ページに移動します。完了したら、[Spot Requests] (スポットリクエスト) に戻ってリストを更新します。

        7. (オプション) インスタンスにインターネットからアクセスできるようにするには、[Auto-assign IPv4 Public IP] (IPv4 パブリック IP の自動割り当て) で [Enable] (有効化) を選択します。

        8. (オプション) IAM ロールを指定して スポットインスタンス を起動するには、[IAM instance profile] でロールを選択します。

        9. (オプション) 起動スクリプトを実行するには、スクリプトを [User data] (ユーザーデータ) にコピーします。

        10. (オプション) タグを追加するには、[Create tag] (タグの作成) を選択し、タグのキーと値を入力してから [Create] (作成) を選択します。各タグについて、これを繰り返します。

          タグごとに、インスタンスとスポットフリートリクエストに同じタグを付けるには、[Instances] (インスタンス) と [Fleet] (フリート) の両方が選択されていることを確認します。フリートによって起動されたインスタンスのみにタグ付けするには、[Fleet] (フリート) をクリアします。スポットフリートリクエストのみにタグ付けするには、[Istances] (インスタンス) をクリアします。

    2. [起動テンプレート] 起動テンプレートで作成した設定を使用するには、[起動テンプレートの使用] を選択し、[起動テンプレート] で起動テンプレートを選択します。

      注記

      スポットフリートでオンデマンドキャパシティが必要な場合は、起動テンプレートを指定する必要があります。

  5. [Additional request details] で、以下を実行します。

    1. 追加リクエストの詳細を確認します。変更するには、[Apply defaults] をオフにします。

    2. (オプション) [IAM fleet role] で、デフォルトのロールを使用するか、または別のロールを選択できます。ロールの変更後にデフォルトのロールを使用するには、[Use default role] を選択します。

    3. (オプション) 特定の期間中のみ有効なリクエストを作成するには、[Request valid from] および [Request valid until] を編集します。

    4. (オプション) デフォルトでは、スポットフリートリクエストの有効期限が切れると Amazon EC2 がスポットインスタンスを終了します。リクエストの有効期限が切れた後も実行し続ける場合、[Terminate the instances when the request expires] をオフにします。

    5. (オプション) ロードバランサーを使用する スポットインスタンス を登録するには、[Receive traffic from one or more load balancers] を選択して、1 つ以上の クラシックロードバランサー またはターゲットグループを選択します。

  6. [Target capacity] (ターゲット容量) で、以下の操作を実行します。

    1. [Total target capacity] (総ターゲット容量) で、ターゲット容量にリクエストする単位数を指定します。ユニットのタイプには、[Instances] (ユニット)、[vCPU]、または [Memory (MiB)] (メモリ (MiB)) を選択できます。ターゲットキャパシティを 0 に指定して後でキャパシティを追加できるようにするには、[ターゲット容量を維持する] を選択する必要があります。

    2. (オプション) [Include On-Demand base capacity] (オンデマンドベースの容量を含める) で、リクエストするオンデマンド単位数を指定します。数値は [Total target capacity] (ターゲットキャパシティの合計) 未満にする必要があります。Amazon EC2 は差分を計算し、この差をリクエストするスポット単位に割り当てます。

      重要

      オプションのオンデマンド容量を指定する場合、最初に起動テンプレートを選択する必要があります。

    3. (オプション) デフォルトでは、Amazon EC2 は中断されるとスポットインスタンスを削除します。ターゲット容量を維持するには、[ターゲット容量を維持する] を選択します。これで、中断時に Amazon EC2 がスポットインスタンスを終了、停止、または休止するように指定できます。これを行うには、[Interruption behavior] から対応するオプションを選択します。

      注記

      起動パラメータで指定された AMI が登録解除または無効になっている場合、AMI から新しいインスタンスを起動することはできません。この場合、ターゲットキャパシティを維持するようにフリートが設定されていても、ターゲットキャパシティは維持されません。

    4. (オプション) フリートの既存スポットインスタンスにインスタンスの再調整の通知が発行されたときに、スポットフリートが代替スポットインスタンスを起動できるようにするには、[Capacity rebalance] (容量の再調整) を選択し、インスタンス置換戦略を選択します。[終了前に起動] を選択した場合、Amazon EC2 が古いインスタンスを終了させるまでの遅延時間 (秒単位) を指定します。詳細については、「EC2 フリートとスポットフリートでキャパシティの再調整を使用して、リスクのあるスポットインスタンスを置き換える」を参照してください。

    5. (オプション) フリートのすべての スポットインスタンスに対して 1 時間あたりに支払う金額を制御するには、[Set maximum cost for Spot Instances] (スポットインスタンスの上限価格を設定する) を選択し、1 時間あたりに支払うことができる上限の合計金額を入力します。上限の合計金額に達すると、ターゲット容量に満たない場合でも、スポットフリートはスポットインスタンスの起動を停止します。詳細については、「EC2 フリートまたはスポットフリートの支出制限を設定する」を参照してください。

  7. [Network] (ネットワーク) で、以下の操作を実行します。

    1. [Network] (ネットワーク) で既存の VPC を選択するか、新しい VPC を作成します。

      [既存の VPC] VPC を選択します。

      [新しい VPC] [新しい VPC の作成] を選択して Amazon VPC コンソールにアクセスします。完了したら、この画面に戻ってリストを更新します。

    2. (オプション) [アベイラビリティーゾーン] では、自分のアベイラビリティーゾーンに適したスポットインスタンスを Amazon EC2 に選択させるか、自分で 1 つ以上のアベイラビリティーゾーンを指定します。

      アベイラビリティーゾーンに複数のサブネットがある場合、[Subnet] から適切なサブネットを選択します。サブネットを追加するには、[Create new subnet] を選択して Amazon VPC にアクセスします。完了したら、この画面に戻ってリストを更新します。

  8. [Instance type requirements] (インスタンスタイプの要件) では、インスタンス属性を指定して、Amazon EC2 にこれらの属性を持つ最適なインスタンスタイプを識別させるか、またはインスタンスのリストを指定することができます。詳細については、「EC2 フリートまたはスポットフリートのインスタンスタイプを選択するための属性を指定する」を参照してください。

    1. [Specify instance attributes that match your compute requirements] (コンピューティング要件に一致するインスタンス属性を指定する) を選択した場合、インスタンス属性を次のように指定します。

      1. [vCPUs] に、希望する vCPU の最小数と最大数を入力します。制限なしを指定するには、[最小値なし][最大値なし]、またはその両方を選択します。

      2. [Memory (GiB)] (メモリ (GiB)) に、希望するメモリの最小値と最大値を入力します。制限なしを指定するには、[最小値なし][最大値なし]、またはその両方を選択します。

      3. (オプション) [追加のインスタンス属性] では、必要に応じて 1 つ以上の属性を指定して、コンピューティング要件を詳細に表現できます。追加の属性は、リクエストにさらに制約を追加します。追加の属性は省略できます。省略すると、デフォルト値が使用されます。各属性およびそのデフォルト値の説明については、「Amazon EC2 コマンドラインリファレンス」の「get-spot-placement-scores」を参照してください。

      4. (オプション) 指定した属性を持つインスタンスタイプを表示するには、[Preview matching instance types] (一致するインスタンスタイプをプレビューする) を展開します。インスタンスタイプがリクエストで使用されないようにするには、インスタンスを選択し、[Exclude selected instance types] (選択したインスタンスタイプを除外する) を選択します。

    2. [Manually select instance types] (インスタンスタイプを手動で選択する) を選択すると、スポットフリートはインスタンスタイプのデフォルトのリストを提供します。さらにインスタンスタイプを選択するには、[Add instance types] (インスタンスタイプの追加) を選択し、リクエストで使用するインスタンスタイプを選択してから [Select] (選択) を選択します。インスタンスタイプを削除するには、インスタンスタイプを選択し、[Delete] (削除) を選択します。

  9. [配分戦略] では、ニーズを満たすスポット配分戦略とオンデマンド配分戦略を選択します。詳細については、「配分戦略を使用して、EC2 フリートまたはスポットフリートがどのようにスポットキャパシティとオンデマンドキャパシティを満たすかを決定します。」を参照してください。

  10. [Your fleet request at a glance] (フリートリクエストの概要) で、フリートの設定を確認し、必要な調整を行います。

  11. (オプション) AWS CLI で使用される起動設定のコピーをダウンロードするには、[JSON config] (JSON 設定) を選択します。

  12. スポットフリートを起動する準備が整ったら、[起動] を選択します。

    スポットフリートリクエストタイプは fleet です。リクエストが実行されると、タイプ instance のリクエストが追加されます。このとき、状態は active になり、ステータスは fulfilled になります。

スポットフリートを作成するにはAWS CLI

AWS CLI を使用して、スポットフリートリクエストを作成するには

スポットフリートリクエストを作成するには、request-spot-fleet コマンドを使用します。https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html

aws ec2 request-spot-fleet --spot-fleet-request-config file://config.json

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

出力例を次に示します。

{ "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" }

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

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

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

フリートを設定して、異常のある スポットインスタンス を置き換えることができます。ヘルスチェックによる置き換えを有効化すると、 と報告されたスポットインスタンスが置き換えられます。unhealthy異常なスポットインスタンスの置き換え中、最大数分間フリートがターゲット容量を下回る場合があります。

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

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

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

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

Console
コンソールを使用して、異常なスポットインスタンスを置き換えるようにスポットフリートを設定するには
  1. 定義済みパラメータを使用してスポットフリートリクエストを作成する (コンソール) の手順に従ってスポットフリートを作成します。

  2. 異常なスポットインスタンスを置き換えるようにフリートを設定するには、[追加の起動パラメータ] を展開し、[ヘルスチェック] で、[異常なインスタンスを置き換える] を選択します。このオプションを有効にするには、まず [Maintain target capacity](ターゲット容量の維持) を選択する必要があります。

AWS CLI
AWS CLI を使用して、異常なスポットインスタンスを置き換えるようにスポットフリートを設定するには
  1. スポットフリートを作成するにはAWS CLI の手順に従ってスポットフリートを作成します。

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