スポットフリートリクエストでオプションで指定するパラメータです。 - Amazon Elastic Compute Cloud

スポットフリートリクエストでオプションで指定するパラメータです。

スポットフリート を使用するには、目標とするキャパシティー、オプションのオンデマンド部分、インスタンスの 1 つ以上の起動仕様、支払う予定のある上限価格などを指定した スポットフリート リクエストを作成します。Amazon EC2 は、スポット料金の変更に応じて スポットフリート の目標容量を維持しようとします。詳細については、「スポットフリート の仕組み」を参照してください。

スポットフリート リクエストには、request および maintain の 2 つのタイプがあります。スポットフリート を作成し、希望する容量のワンタイムリクエストを送信するか、ターゲット容量の継続した維持を要求します。どちらのリクエストタイプも、スポットフリート の分散戦略の恩恵を受けす。

ワンタイムリクエストを作成すると、スポットフリート は必要なリクエストを行いますが、容量が低下した場合は スポットインスタンス の補充を試みません。使用可能な容量がない場合、スポットフリート は代替スポットプールでリクエストを送信しません。

ターゲット容量を維持するために、スポットフリート はこのターゲット容量を満たすのに必要なリクエストを行い、中断されたインスタンスを自動的に補充します。

送信後にワンタイムリクエストのターゲット容量を変更することはできません。ターゲット容量を変更するには、リクエストを変更し、新しいリクエストを送信します。

スポットフリート リクエストは、期限切れになるかお客様によってキャンセルされるまで、アクティブのままになります。スポットフリート リクエストのキャンセル時には、スポットフリート のキャンセルによって スポットフリート の スポットインスタンス を終了するかどうかを指定できます。

各起動仕様には、Amazon EC2 によるインスタンスの起動に必要な情報 (AMI、インスタンスタイプ、サブネットまたはアベイラビリティーゾーン、そして 1 つ以上のセキュリティグループ) を指定します。

スポットフリート リクエストの状態

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

  • submitted – スポットフリート リクエストは評価中です。Amazon EC2 は目標数のインスタンスを起動する準備をしています。

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

  • modifying – スポットフリート リクエストは変更中です。リクエストは、変更が完全に処理されるか、スポットフリート がキャンセルされるまで、この状態のままになります。ワンタイム request を変更することはできません。この状態は、そのようなスポットリクエストには適用されません。

  • cancelled_running – スポットフリート はキャンセルされ、追加の スポットインスタンス は起動されません。その既存の スポットインスタンス は、中断または終了されるまで実行され続けます。リクエストは、すべてのインスタンスが中断されるか終了されるまで、この状態のままになります。

  • cancelled_terminating – スポットフリート はキャンセルされました。スポットインスタンス は終了中です。リクエストは、すべてのインスタンスが終了されるまで、この状態のままになります。

  • cancelled – スポットフリート はキャンセルされました。実行中の スポットインスタンス はありません。スポットフリート リクエストは、そのインスタンスが終了されてから 2 日後に削除されます。

次の図は、リクエストの状態の遷移を示しています。スポットフリート の制限を超えた場合、リクエストはすぐにキャンセルされます。


					スポットフリート リクエストの状態

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

スポットフリート は、2 分ごとにフリートの スポットインスタンス のヘルスステータスをチェックします。インスタンスのヘルスステータスは healthy または unhealthy です。スポットフリート は、Amazon EC2 が提供するステータスチェックを使用してインスタンスの正常性状態を判断します。インスタンスステータスチェックとシステムヘルスチェックのいずれかのステータスが、連続した 3 回のヘルスチェックで impaired である場合、インスタンスのヘルスステータスは unhealthy になります。それ以外の場合、ヘルスステータスは healthy になります。詳細については、「インスタンスのステータスチェック」を参照してください。

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

要件

  • ヘルスチェックの置換は、1 回限りの スポットフリート ではなく、ターゲット容量を維持する スポットフリート でのみサポートされます。

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

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

スポットフリート リクエストの準備

スポットフリート リクエストを作成する前に、「ベストプラクティス」を確認してください。スポットフリート リクエストを計画するときにこれらのベストプラクティスを使用して、できるだけ低価格でインスタンスのタイプをプロビジョニングできるようにします。また、次のことをお勧めします。

  • 目的のターゲット容量のワンタイムリクエストを送信する スポットフリート と、ターゲット容量の継続した維持を行うスポットフリートのどちらを作成するかを決定します。

  • アプリケーションの要件を満たすインスタンスタイプを決定します。

  • スポットフリート リクエストの目標容量を決定します。インスタンスまたはカスタムユニットでターゲット容量を設定できます。詳細については、「スポットフリート インスタンスの分量指定」を参照してください。

  • スポットフリート のターゲットキャパシティーのどの部分がオンデマンドキャパシティーとなるかを決定します。オンデマンドキャパシティーに対して 0 を指定できます。

  • インスタンス分量指定を使用している場合は、ユニット当りの料金を決定します。インスタンス時間当りの料金の計算は、インスタンス時間当たりの料金をそのインスタンスが表すユニット数 (または分量) で割って算出しますインスタンス分量指定を使用する場合、ユニット当りのデフォルトの料金は 1 インスタンス時間当りの料金となります。

  • スポットフリート のリクエストに対して可能なオプションを確認します。詳細については、『AWS CLI Command Reference』の request-spot-fleet コマンドを参照してください。その他の例については、「スポットフリート の設定例」を参照してください。

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

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

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

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

IAM ユーザーへの スポットフリート アクセス許可の付与

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

IAM ユーザーに スポットフリート のアクセス許可を付与するには

  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": "*" } ] }

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

    必要な EC2 および IAM の API

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

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

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

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

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

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

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

    重要

    起動仕様または起動テンプレートで IAM インスタンスプロファイルのロールを指定する場合は、そのロールをサービスに渡すアクセス許可を 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 コンソールを使用してロールまたはインスタンスプロファイルを作成できるようにするには、次のアクションをポリシーに追加する必要があります。

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

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

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

  6. ナビゲーションペインで [Users] を選択し、ユーザーを選択します。

  7. [Permissions]、[Add permissions] の順に選択します。

  8. [Attach existing policies directly] を選択します。以前に作成したポリシーを選択し、[Next: Review] を選択します。

  9. [Add permissions] を選択します。

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

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

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

重要

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

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

Amazon EC2 は、[AWSServiceRoleForEC2SpotFleet] という、サービスにリンクされたロールを使用して、次のアクションを実行します。

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

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

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

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

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

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

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

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

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

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

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

代わりに AWS CLI または API を使用する場合、このロールが存在していることを確認する必要があります。

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

AWS CLI または API を使って スポットフリート を作成する前にこのロールが存在していることを確認します。ロールを作成するには、IAM コンソールを次のように使用します。

サービスにリンクされたロール AWSServiceRoleForEC2SpotFleet を手動で作成するには

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

  3. [ロールの作成] を選択します。

  4. [Select type of trusted entity (信頼されたエンティティのタイプの選択)] で、[AWS のサービス] を選択します。

  5. サービスのリストで [EC2] を選択します。

  6. [Select your use case (ユースケースの選択)] セクションで、[EC2 - Spot Fleet (EC2 - スポットフリート)] 選択します。

  7. [Next: Permissions (次へ: アクセス許可)] を選択します。

  8. 次のページで、[Next:Review (次の手順: 確認)] を選択します。

  9. [確認] ページで、[ロールの作成] を選択します。

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

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

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

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

CMK を使用するアクセス許可を AWSServiceRoleForEC2SpotFleet ロールに付与するには

  • create-grant コマンドを使用して CMK に付与を追加し、プリンシパル (サービスにリンクされたロール AWSServiceRoleForEC2SpotFleet) を指定します。このプリンシパルには、付与が許可するオペレーションを実行するためのアクセス許可が提供されます。CMK を指定するには、key-id パラメータと CMK の ARN を使用します。プリンシパルを指定するには、grantee-principal パラメータとサービスにリンクされたロール AWSServiceRoleForEC2SpotFleet の 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/AWSServiceRoleForEC2SpotFleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

スポットフリート の IAM ロール

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

重要

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

スポットフリート タグ付け用の IAM ロールを作成するには

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

  3. [Select type of trusted entity] ページの [AWS Service] で [EC2]、[EC2 - Spot Fleet Tagging]、[Next: Permissions] の順に選択します。

  4. [Attached permissions policy] ページで、[Next: Review] を選択します。

  5. [Review] ページで、ロールの名前 (たとえば、aws-ec2-spot-fleet-tagging-role) を入力し、[Create role] を選択します。

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

AWS マネジメントコンソール を使用して、アプリケーションまたはタスクのニーズのみと最低限のコンピューティング仕様を選択し、スポットフリート を迅速に作成します。Amazon EC2 はユーザーのニーズに最適なフリートを設定し、ベストプラクティスに従います。詳細については、「スポットフリート リクエストをすばやく作成する (コンソール)」を参照してください。それ以外の場合は、デフォルト設定のいれかを変更できます。詳細については、「定義済みパラメータを使用して スポットフリート を作成する (コンソール)」を参照してください。

スポットフリート リクエストをすばやく作成する (コンソール)

スポットフリート リクエストをすばやく作成するには、以下の手順を実行します。

推奨設定を使用して スポットフリート リクエストを作成するには (コンソール)

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot) を開きます。

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

  3. [アプリケーションまたはタスクのニーズについてお知らせください] で、[ワークロードのロードバランシング]、[柔軟なワークロード]、[ビッグデータのワークロード]、[定義された期間のワークロード] のいずれかを選択します。

  4. [Configure your instances] の下の [Minimum compute unit] で、アプリケーションまたはタスクで必要な最低限のハードウェア仕様 (vCPU、メモリ、ストレージ) を選択して、[as specs] または [as an instance type] を指定します。

    • [as specs] については、必要な vCPU 数とメモリ量を指定します。

    • [as an instance type] については、デフォルトのインスタンスタイプをそのまま使用するか、[Change instance type] を選択して別のインスタンスタイプを選択します。

  5. [Tell us how much capacity you need] の下の [Total target capacity] で、ターゲット容量を要求するための単位数を指定します。インスタンスまたは vCPU を選択できます。

  6. アプリケーションまたはタスクの選択に基づいた推奨される [Fleet request settings] を確認して、[Launch] を選択します。

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

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

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

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot) を開きます。

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

  3. [アプリケーションまたはタスクのニーズについてお知らせください] で、[ワークロードのロードバランシング]、[柔軟なワークロード]、[ビッグデータのワークロード]、[定義された期間のワークロード] のいずれかを選択します。

  4. [Configure your instances] で、以下を実行します。

    1. (オプション) [スポットフリート] [Launch template] で、起動テンプレートを選択します。起動テンプレートでは Amazon Machine Image (AMI) を指定する必要があります。起動テンプレートを指定した場合、スポットフリート を使用して AMI を上書きできないためです。

      重要

      [オプションのオンデマンド部分] を指定する場合、起動テンプレートを選択する必要があります。

    2. [AMI] では、AWS に用意されたベーシック AMI のいずれかを選択するか、[Search for AMI] を選択してユーザーコミュニティの AMI、AWS Marketplace の AMI、または独自の AMI を使用します。

    3. [Minimum compute unit] で、アプリケーションまたはタスクで必要な最低限のハードウェア仕様 (vCPU、メモリ、ストレージ) を選択して、[as specs] または [as an instance type] を指定します。

      • [as specs] については、必要な vCPU 数とメモリ量を指定します。

      • [as an instance type] については、デフォルトのインスタンスタイプをそのまま使用するか、[Change instance type] を選択して別のインスタンスタイプを選択します。

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

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

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

    5. (オプション) [Availability Zones] では、AWS で自動的に スポットインスタンス のアベイラビリティーゾーンを選択するか、または 1 つ以上のアベイラビリティーゾーンを指定します。

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

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

      [Existing key pair] キーペアを選択します。

      [New key pair] [Create new key pair] を選択して Amazon VPC コンソールにアクセスします。完了したら、ウィザードに戻ってリストを更新します。

  5. (オプション) [Additional configurations] で、以下を実行します。

    1. (オプション) ストレージを追加するには、インスタンスタイプに応じて追加のインスタンスストアボリュームまたは Amazon EBS ボリュームを指定します。

    2. (オプション) Amazon EBS 最適化を有効にするには、[EBS-optimized] で [Launch EBS-optimized instances] を選択します。

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

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

    5. (オプション) 異常なインスタンスを置き換えるには、[Health check (ヘルスチェック)] で [Replace unhealthy instances (異常なインスタンスを置き換える)] を選択します。このオプションを有効にするには、まず [Maintain target capacity (ターゲット容量を維持する)] を選択する必要があります。

    6. (オプション) ハードウェア専有 スポットインスタンス を実行するには、[テナンシー] で [専有 - ハードウェア専有インスタンスの実行] を選択します。

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

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

      [New security group] [Create new security group] を選択して、Amazon VPC コンソールに移動します。完了したら、ウィザードに戻ってリストを更新します。

    8. (オプション) インスタンスにインターネットからアクセスできるようにするには、[Auto-assign IPv4 Public IP] で [Enable] を選択します。

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

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

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

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

  6. [Tell us how much capacity you need] で、以下を実行します。

    1. [Total target capacity] で、ターゲットキャパシティーにリクエストする単位数を指定します。インスタンスまたは vCPU を選択できます。ターゲット容量を 0 に指定して後で容量を追加できるようにするには、[Maintain target capacity] を選択します。

    2. (オプション) [Optional On-Demand portion] でリクエストするオンデマンド単位数を指定します。この数は、[Total target capacity] より少なくする必要があります。Amazon EC2 は差異を計算し、この差をリクエストするスポット単位に割り当てます。

      重要

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

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

    4. (オプション) フリートの合計 スポットインスタンス に対して 1 時間あたりに支払う金額を制御するには、[スポットのターゲットコストを維持する (高度 - オプション)] を選択し、1 時間あたりに支払うことができる上限の合計金額を入力します。上限の合計金額に達すると、ターゲット容量に満たない場合でも、スポットフリート は スポットインスタンス の起動を停止します。詳細については、「使用量の管理」を参照してください。

  7. [Fleet request settings] で、以下を実行します。

    1. アプリケーションまたはタスクの選択に基づいて、フリートリクエストおよびフリートの配分戦略を確認します。インスタンスタイプまたは配分戦略を変更するには、[Apply recommendations] をオフにします。

    2. (オプション) インスタンスタイプを削除するには、[Fleet request] で [Remove] を選択します。インスタンスタイプを追加するには、[Select instance types] を選択します。

    3. [オプション] [Fleet allocation strategy] で、お客様のニーズに合った戦略を選択します。詳細については、「スポットインスタンス の配分戦略」を参照してください。

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

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

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

    3. (オプション) [Maximum price] では、デフォルトの上限料金 (オンデマンド料金) を使用するか、支払う予定の上限料金を指定することができます。上限価格が選択したインスタンスタイプのスポット料金より低い場合、スポットインスタンス は起動されません。

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

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

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

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

  10. [Launch] を選択します。

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

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

  • スポットフリート リクエストを作成するには、request-spot-fleet コマンドを使用します。

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

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

出力例を次に示します。

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

スポットフリート のタグ付け

スポットフリート リクエストを分類および管理しやすくするために、カスタムメタデータでタグ付けすることができます。スポットフリート リクエストへのタグの割り当ては、リクエストの作成時または作成後に行うことができます。Amazon EC2 コンソールまたはコマンドラインツールを使用してタグを割り当てることができます。

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

注記

ボリュームタグは、オンデマンドインスタンス にアタッチされたボリュームでのみサポートされます。スポットインスタンス にアタッチされているボリュームにタグを付けることはできません。

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

前提条件

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

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

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

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

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

  • Resource で、"*" を指定する必要があります。これにより、ユーザーはすべてのリソースタイプにタグ付けできます。

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

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

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

新規 スポットフリート へのタグ付け

コンソールを使用して新しい スポットフリート リクエストにタグ付けするには

  1. 定義済みパラメータを使用して スポットフリート を作成する (コンソール)」の手順に従います。

  2. タグを追加するには、[追加設定] を展開し、[新規タグの追加] を選択して、タグのキーと値を入力します。各タグについて、これを繰り返します。

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

  3. 必須フィールドに入力して スポットフリート リクエストを作成し、[起動] を選択します。詳細については、「定義済みパラメータを使用して スポットフリート を作成する (コンソール)」を参照してください。

AWS CLI を使用して新しい スポットフリート リクエストにタグ付けするには

スポットフリート リクエストの作成時にタグ付けするには、以下のように スポットフリート リクエスト設定を定義します。

  • SpotFleetRequestConfig で、スポットフリート リクエストのタグを指定します。

  • ResourceType で、spot-fleet-request を指定します。別の値を指定すると、フリートリクエストは失敗します。

  • Tags で、キーと値のペアを指定します。キーと値のペアは複数指定できます。

以下の例では、スポットフリート リクエストに 2 つのタグ (Key=Environment and Value=Production と Key=Cost-Center and Value=123) が付けられています。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "lowestPrice", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-0123456789EXAMPLE", "InstanceType": "c4.large" } ], "SpotPrice": "5", "TargetCapacity": 2, "TerminateInstancesWithExpiration": true, "Type": "maintain", "ReplaceUnhealthyInstances": true, "InstanceInterruptionBehavior": "terminate", "InstancePoolsToUseCount": 1, "TagSpecifications": [ { "ResourceType": "spot-fleet-request", "Tags": [ { "Key": "Environment", "Value":"Production" }, { "Key": "Cost-Center", "Value":"123" } ] } ] } }

新規 スポットフリート および起動するインスタンスおよびボリュームにタグ付けする

新しい スポットフリート リクエストと、AWS CLI を使用して起動されるインスタンスおよびボリュームにタグ付けするには

スポットフリート リクエストが作成されるときにそのリクエストにタグ付けし、フリートによってインスタンスが起動されるときにそのインスタンスおよびボリュームにタグ付けするには、スポットフリート リクエスト設定を次のように指定します。

スポットフリート リクエストタグ:

  • SpotFleetRequestConfig で、スポットフリート リクエストのタグを指定します。

  • ResourceType で、spot-fleet-request を指定します。別の値を指定すると、フリートリクエストは失敗します。

  • Tags で、キーと値のペアを指定します。キーと値のペアは複数指定できます。

インスタンスタグ:

  • LaunchSpecifications で、インスタンスのタグを指定します。

  • ResourceType で、instance を指定します。別の値を指定すると、フリートリクエストは失敗します。

  • Tags で、キーと値のペアを指定します。キーと値のペアは複数指定できます。

    または、スポットフリート リクエストで参照される起動テンプレートでインスタンスのタグを指定できます。

ボリュームタグ:

  • スポットフリート リクエストで参照される起動テンプレート内のボリュームのタグを指定します。LaunchSpecifications でのボリュームのタグ付けはサポートされていません。

以下の例では、スポットフリート リクエストに 2 つのタグ (Key=Environment and Value=Production と Key=Cost-Center and Value=123) が付けられています。フリートによって起動されるインスタンスには、1 つのタグ (スポットフリート リクエストのタグの 1 つと同じ Key=Cost-Center and Value=123) が付けられます。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "lowestPrice", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-0123456789EXAMPLE", "InstanceType": "c4.large", "TagSpecifications": [ { "ResourceType": "instance", "Tags": [ { "Key": "Cost-Center", "Value": "123" } ] } ] } ], "SpotPrice": "5", "TargetCapacity": 2, "TerminateInstancesWithExpiration": true, "Type": "maintain", "ReplaceUnhealthyInstances": true, "InstanceInterruptionBehavior": "terminate", "InstancePoolsToUseCount": 1, "TagSpecifications": [ { "ResourceType": "spot-fleet-request", "Tags": [ { "Key": "Environment", "Value":"Production" }, { "Key": "Cost-Center", "Value":"123" } ] } ] } }

AWS CLI を使用して スポットフリート によって起動されたインスタンスにタグ付けするには

フリートによってインスタンスが起動されるときにタグ付けするには、スポットフリート リクエストで参照される起動テンプレートでタグを指定するか、以下のように スポットフリート リクエスト設定でタグを指定できます。

  • LaunchSpecifications で、インスタンスのタグを指定します。

  • ResourceType で、instance を指定します。別の値を指定すると、フリートリクエストは失敗します。

  • Tags で、キーと値のペアを指定します。キーと値のペアは複数指定できます。

以下の例では、フリートによって起動されるインスタンスに 1 つのタグ (Key=Cost-Center and Value=123) が付けられています。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "lowestPrice", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-0123456789EXAMPLE", "InstanceType": "c4.large", "TagSpecifications": [ { "ResourceType": "instance", "Tags": [ { "Key": "Cost-Center", "Value": "123" } ] } ] } ], "SpotPrice": "5", "TargetCapacity": 2, "TerminateInstancesWithExpiration": true, "Type": "maintain", "ReplaceUnhealthyInstances": true, "InstanceInterruptionBehavior": "terminate", "InstancePoolsToUseCount": 1 } }

AWS CLI を使用して スポットフリート によって起動された オンデマンドインスタンス にアタッチされたボリュームにタグを付けるには

フリートが作成したボリュームをタグを付けるには、スポットフリート リクエストで参照される起動テンプレートでタグを指定する必要があります。

注記

ボリュームタグは、オンデマンドインスタンス にアタッチされたボリュームでのみサポートされます。スポットインスタンス にアタッチされているボリュームにタグを付けることはできません。

LaunchSpecifications でのボリュームのタグ付けはサポートされていません。

既存の スポットフリート へのタグ付け

コンソールを使用して既存の スポットフリート リクエストにタグ付けするには

スポットフリート リクエストを作成したら、コンソールを使用してフリートリクエストにタグを追加できます。

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot) を開きます。

  2. スポットフリート リクエストを選択します。

  3. [Tags (タグ)] タブを選択してから、[タグの作成] を選択します。

AWS CLI を使用して既存の スポットフリート リクエストにタグ付けするには

create-tags コマンドを使用して、既存のリソースにタグ付けできます。以下の例では、既存の スポットフリート リクエストに 1 つのタグ (Key=purpose and Value=test) が付けられています。

aws ec2 create-tags \ --resources sfr-11112222-3333-4444-5555-66666EXAMPLE \ --tags Key=purpose,Value=test

スポットフリート リクエストタグの表示

コンソールを使用して スポットフリート リクエストタグを表示するには

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot) を開きます。

  2. スポットフリート リクエストを選択してから、[Tags (タグ)] タブを選択します。

スポットフリート リクエストタグの情報を取得するには

describe-tags コマンドを使用して、指定したリソースのタグを表示します。以下の例では、指定した スポットフリート リクエストのタグの情報を取得します。

aws ec2 describe-tags \ --filters "Name=resource-id,Values=sfr-11112222-3333-4444-5555-66666EXAMPLE"
{ "Tags": [ { "Key": "Environment", "ResourceId": "sfr-11112222-3333-4444-5555-66666EXAMPLE", "ResourceType": "spot-fleet-request", "Value": "Production" }, { "Key": "Another key", "ResourceId": "sfr-11112222-3333-4444-5555-66666EXAMPLE", "ResourceType": "spot-fleet-request", "Value": "Another value" } ] }

スポットフリート リクエストの情報を取得することで、スポットフリート リクエストのタグを表示することもできます。

describe-spot-fleet-requests コマンドを使用して、指定した スポットフリート リクエストの設定を表示します。これには、フリートリクエストに指定されたタグが含まれます。

aws ec2 describe-spot-fleet-requests \ --spot-fleet-request-ids sfr-11112222-3333-4444-5555-66666EXAMPLE
{ "SpotFleetRequestConfigs": [ { "ActivityStatus": "fulfilled", "CreateTime": "2020-02-13T02:49:19.709Z", "SpotFleetRequestConfig": { "AllocationStrategy": "capacityOptimized", "OnDemandAllocationStrategy": "lowestPrice", "ExcessCapacityTerminationPolicy": "Default", "FulfilledCapacity": 2.0, "OnDemandFulfilledCapacity": 0.0, "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-0123456789EXAMPLE", "InstanceType": "c4.large" } ], "TargetCapacity": 2, "OnDemandTargetCapacity": 0, "Type": "maintain", "ReplaceUnhealthyInstances": false, "InstanceInterruptionBehavior": "terminate" }, "SpotFleetRequestId": "sfr-11112222-3333-4444-5555-66666EXAMPLE", "SpotFleetRequestState": "active", "Tags": [ { "Key": "Environment", "Value": "Production" }, { "Key": "Another key", "Value": "Another value" } ] } ] }

スポットフリート のモニタリング

上限料金がスポット料金を超え、容量が利用可能な場合、スポットフリート は スポットインスタンス を起動します。スポットインスタンス は中断されるか手動終了されるまで実行されます。

スポットフリート を監視するには (コンソール)

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

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

  3. スポットフリート リクエストを選択します。設定の詳細を表示するには、[Description] を選択します。

  4. スポットフリート の スポットインスタンス を一覧表示するには、[Instances] を選択します。

  5. スポットフリート の履歴を表示するには、[History] を選択します。

スポットフリート を監視するには (AWS CLI)

スポットフリート リクエストの詳細を表示するには、describe-spot-fleet-requests コマンドを使用します。

aws ec2 describe-spot-fleet-requests

指定した スポットフリート の スポットインスタンス の詳細を表示するには、describe-spot-fleet-instances コマンドを使用します。

aws ec2 describe-spot-fleet-instances \ --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

指定した スポットフリート リクエストの履歴を表示するには、describe-spot-fleet-request-history コマンドを使用します。

aws ec2 describe-spot-fleet-request-history \ --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --start-time 2015-05-18T00:00:00Z

スポットフリート リクエストの変更

以下のタスクを完了するように、アクティブな スポットフリート リクエストを変更できます。

  • ターゲット容量とオンデマンド部分を増やす

  • ターゲット容量とオンデマンド部分を減らす

注記

ワンタイム スポットフリート リクエストは変更できません。スポットフリート リクエストを作成したときに [Maintain target capacity (ターゲット容量を維持する)] を選択した場合にのみ、スポットフリート リクエストを修正することができます。

ターゲット容量を増やすと、スポットフリート は スポットインスタンス を追加で起動します。ターゲット容量を減らすと、スポットフリート は オンデマンドインスタンス を追加で起動します。

ターゲット容量を増やす場合、スポットフリート は、スポットフリート リクエストの配分戦略に従って追加の スポットインスタンス を起動します。配分戦略が lowestPrice の場合、スポットフリート は、スポットフリート リクエストの最低価格の スポットインスタンス プールからインスタンスを起動します。配分戦略が diversified の場合、スポットフリート は、スポットフリート リクエストのプールにインスタンスを分散します。

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

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

スポットフリート リクエストを変更するには (コンソール)

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot/home/fleet) を開きます。

  2. スポットフリート リクエストを選択します。

  3. [Actions]、[Modify target capacity] の順に選択します。

  4. [Modify target capacity] で、以下の操作を実行します。

    1. 新しいターゲット容量とオンデマンド部分を入力します。

    2. (オプション) ターゲット容量を小さくしてもスポット群の現在のサイズを保持する場合は、[Terminate instances] をオフにします。

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

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

modify-spot-fleet-request コマンドを使用して、指定する スポットフリート リクエストのターゲット容量を更新します。

aws ec2 modify-spot-fleet-request \ --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity 20

前のコマンドを以下のように変更することで、結果的にいずれの スポットインスタンス も終了せずに、指定した スポットフリート のターゲット容量を減らすことができます。

aws ec2 modify-spot-fleet-request \ --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity 10 \ --excess-capacity-termination-policy NoTermination

スポットフリート リクエストのキャンセル

スポットフリート を使用しなくなったら、スポットフリート リクエストをキャンセルできます。これにより、スポットフリート に関連付けられているすべてのスポットリクエストがキャンセルされるため、その スポットフリート の新しいスポットインスタンスは起動されなくなります。スポットフリート の スポットインスタンス を終了するかどうか指定する必要があります。インスタンスを終了する場合、スポットフリート リクエストは cancelled_terminating 状態になります。それ以外の場合、スポットフリートリクエストは cancelled_running 状態になり、インスタンスは中断または手動終了されるまで、引き続き実行されます。

スポットフリート リクエストをキャンセルするには (コンソール)

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot/home/fleet) を開きます。

  2. スポットフリート リクエストを選択します。

  3. [Actions]、[Cancel spot request] の順に選択します。

  4. [スポットリクエストをキャンセルする] で、スポットフリート のキャンセルを確認します。スポット群の現在のサイズを保持するには、[Terminate instances] をオフにします。準備ができたら、[Confirm] を選択します。

AWS CLI を使用して スポットフリート をキャンセルするには

指定した スポットフリート リクエストをキャンセルし、インスタンスを終了するには、cancel-spot-fleet-requests コマンドを使用します。

aws ec2 cancel-spot-fleet-requests \ --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --terminate-instances

出力例を次に示します。

{ "SuccessfulFleetRequests": [ { "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "CurrentSpotFleetRequestState": "cancelled_terminating", "PreviousSpotFleetRequestState": "active" } ], "UnsuccessfulFleetRequests": [] }

前のコマンドを以下のように変更することで、インスタンスを終了せずに、指定した スポットフリート リクエストをキャンセルできます。

aws ec2 cancel-spot-fleet-requests \ --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --no-terminate-instances

出力例を次に示します。

{ "SuccessfulFleetRequests": [ { "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "CurrentSpotFleetRequestState": "cancelled_running", "PreviousSpotFleetRequestState": "active" } ], "UnsuccessfulFleetRequests": [] }