Amazon Elastic Compute Cloud
User Guide for Linux Instances

Spot Fleet Requests

To use a Spot Fleet, you create a Spot Fleet request that includes the target capacity, an optional On-Demand portion, one or more launch specifications for the instances, and the maximum price that you are willing to pay. Amazon EC2 attempts to maintain your Spot Fleet's target capacity as Spot prices change. For more information, see How Spot Fleet Works.

There are two types of Spot Fleet requests: request and maintain. You can create a Spot Fleet to submit a one-time request for your desired capacity, or require it to maintain a target capacity over time. Both types of requests benefit from Spot Fleet's allocation strategy.

When you make a one-time request, Spot Fleet places the required requests but does not attempt to replenish Spot Instances if capacity is diminished. If capacity is not available, Spot Fleet does not submit requests in alternative Spot pools.

To maintain a target capacity, Spot Fleet places requests to meet the target capacity and automatically replenish any interrupted instances.

It is not possible to modify the target capacity of a one-time request after it's been submitted. To change the target capacity, cancel the request and submit a new one.

A Spot Fleet request remains active until it expires or you cancel it. When you cancel a Spot Fleet request, you may specify whether canceling your Spot Fleet request terminates the Spot Instances in your Spot Fleet.

Each launch specification includes the information that Amazon EC2 needs to launch an instance, such as an AMI, instance type, subnet or Availability Zone, and one or more security groups.

Spot Fleet Request States

A Spot Fleet request can be in one of the following states:

  • submitted – The Spot Fleet request is being evaluated and Amazon EC2 is preparing to launch the target number of Spot Instances.

  • active – The Spot Fleet has been validated and Amazon EC2 is attempting to maintain the target number of running Spot Instances. The request remains in this state until it is modified or cancelled.

  • modifying – The Spot Fleet request is being modified. The request remains in this state until the modification is fully processed or the Spot Fleet is cancelled. A one-time request cannot be modified, and this state does not apply to such Spot requests.

  • cancelled_running – The Spot Fleet is cancelled and does not launch additional Spot Instances. Its existing Spot Instances continue to run until they are interrupted or terminated. The request remains in this state until all instances are interrupted or terminated.

  • cancelled_terminating – The Spot Fleet is cancelled and its Spot Instances are terminating. The request remains in this state until all instances are terminated.

  • cancelled – The Spot Fleet is cancelled and has no running Spot Instances. The Spot Fleet request is deleted two days after its instances were terminated.

The following illustration represents the transitions between the request states. If you exceed your Spot Fleet limits, the request is cancelled immediately.


					Spot Fleet request states

Spot Fleet Prerequisites

If you use the Amazon EC2 console to create a Spot Fleet, it creates a role named aws-ec2-spot-fleet-tagging-role that grants the Spot Fleet permission to request, launch, terminate, and tag instances on your behalf. This role is selected when you create your Spot Fleet request. If you use the AWS CLI or an API instead, you must ensure that this role exists. You can either use the Request Spot Instances wizard (the role is created when you advance to the second page of the wizard) or use the IAM console as follows.

To create the IAM role for Spot Fleet

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

  2. In the navigation pane, choose Roles.

  3. On the Select type of trusted entity page, choose AWS service, EC2, EC2 - Spot Fleet Tagging, Next: Permissions.

  4. On the Attached permissions policy page, choose Next:Review.

  5. On the Review page, type a name for the role (for example, aws-ec2-spot-fleet-tagging-role) and choose Create role.

Spot Fleet and IAM Users

If your IAM users will create or manage a Spot Fleet, be sure to grant them the required permissions as follows.

To grant an IAM user permissions for Spot Fleet

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

  2. In the navigation pane, choose Policies, Create policy.

  3. On the Create policy page, choose JSON, replace the text with the following, and choose Review policy.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }

    The ec2:* grants an IAM user permission to call all Amazon EC2 API actions. To limit the user to specific Amazon EC2 API actions, specify those actions instead.

    An IAM user must have permission to call the iam:ListRoles action to enumerate existing IAM roles, the iam:PassRole action to specify the Spot Fleet role, and the iam:ListInstanceProfiles action to enumerate existing instance profiles.

    (Optional) To enable an IAM user to create roles or instance profiles using the IAM console, you must also add the following actions to the policy:

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  4. On the Review policy page, type a policy name and description and choose Create policy.

  5. In the navigation pane, choose Users and select the user.

  6. Choose Permissions, Add permissions.

  7. Choose Attach existing policies directly. Select the policy that you created earlier and choose Next: Review.

  8. Choose Add permissions.

Spot Fleet Health Checks

Spot Fleet checks the health status of the Spot Instances in the fleet every two minutes. The health status of an instance is either healthy or unhealthy. Spot Fleet determines the health status of an instance using the status checks provided by Amazon EC2. If the status of either the instance status check or the system status check is impaired for three consecutive health checks, the health status of the instance is unhealthy. Otherwise, the health status is healthy. For more information, see Status Checks for Your Instances.

You can configure your Spot Fleet to replace unhealthy instances. After enabling health check replacement, an instance is replaced after its health status is reported as unhealthy. The Spot Fleet could go below its target capacity for up to a few minutes while an unhealthy instance is being replaced.

Requirements

  • Health check replacement is supported only with Spot Fleets that maintain a target capacity, not with one-time Spot Fleets.

  • You can configure your Spot Fleet to replace unhealthy instances only when you create it.

  • IAM users can use health check replacement only if they have permission to call the ec2:DescribeInstanceStatus action.

Planning a Spot Fleet Request

Before you create a Spot Fleet request, review Spot Best Practices. Use these best practices when you plan your Spot Fleet request so that you can provision the type of instances you want at the lowest possible price. We also recommend that you do the following:

  • Determine whether you want to create a Spot Fleet that submits a one-time request for the desired target capacity, or one that maintains a target capacity over time.

  • Determine the instance types that meet your application requirements.

  • Determine the target capacity for your Spot Fleet request. You can set the target capacity in instances or in custom units. For more information, see Spot Fleet Instance Weighting.

  • Determine what portion of the Spot Fleet target capacity must be On-Demand capacity. You can specify 0 for On-Demand capacity.

  • Determine your price per unit, if you are using instance weighting. To calculate the price per unit, divide the price per instance hour by the number of units (or weight) that this instance represents. If you are not using instance weighting, the default price per unit is the price per instance hour.

  • Review the possible options for your Spot Fleet request. For more information, see the request-spot-fleet command in the AWS CLI Command Reference. For additional examples, see Spot Fleet Example Configurations.

Service-Linked Role for Spot Fleet Requests

Amazon EC2 creates a service-linked role when you request a Spot Fleet. A service-linked role includes all the permissions that Amazon EC2 requires to call other AWS services on your behalf. For more information, see Using Service-Linked Roles in the IAM User Guide.

Amazon EC2 uses the service-linked role named AWSServiceRoleForEC2SpotFleet to complete the following actions:

  • ec2:RequestSpotInstances - Request Spot Instances

  • ec2:TerminateInstances - Terminate Spot Instances

  • ec2:DescribeImages - Describe Amazon Machine Images (AMI) for the Spot Instances

  • ec2:DescribeInstanceStatus - Describe the status of the Spot Instances

  • ec2:DescribeSubnets - Describe the subnets for Spot Instances

  • ec2:CreateTags - Add system tags to Spot Instances

Amazon EC2 also creates the AWSServiceRoleForEC2Spot role when you request a Spot Fleet. For more information, see Service-Linked Role for Spot Instance Requests.

If you had an active Spot Fleet request before November 2017, when Amazon EC2 began supporting this service-linked role, Amazon EC2 created the AWSServiceRoleForEC2SpotFleet role in your AWS account. For more information, see A New Role Appeared in My Account in the IAM User Guide.

Ensure that this role exists before you use the AWS CLI or an API to create a Spot Fleet. To create the role, use the IAM console as follows.

To create the IAM role for Spot Fleet (console)

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

  2. In the navigation pane, choose Roles.

  3. Choose Create role.

  4. On the Select type of trusted entity page, choose EC2, EC2 - Spot Fleet, Next: Permissions.

  5. On the next page, choose Next:Review.

  6. On the Review page, choose Create role.

If you no longer need to use Spot Fleet, we recommend that you delete the AWSServiceRoleForEC2SpotFleet role. After this role is deleted from your account, Amazon EC2 will create the role again if you request a Spot Fleet.

Creating a Spot Fleet Request

Using the AWS Management Console, quickly create a Spot Fleet request by choosing only your application or task need and minimum compute specs. Amazon EC2 configures a fleet that best meets your needs and follows Spot best practice. For more information, see Quickly Create a Spot Fleet Request (Console). Otherwise, you can modify any of the default settings. For more information, see Create a Spot Fleet Request Using Defined Parameters (Console).

Quickly Create a Spot Fleet Request (Console)

Follow these steps to quickly create a Spot Fleet request.

To create a Spot Fleet request using the recommended settings (console)

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot.

  2. If you are new to Spot, you see a welcome page; choose Get started. Otherwise, choose Request Spot Instances.

  3. For Tell us your application or task need, choose Flexible workloads, Load balancing workloads, Big data workloads, or Defined duration workloads.

  4. Under Configure your instances, for Minimum compute unit, choose the minimum hardware specifications (vCPUs, memory, and storage) that you need for your application or task, either as specs or as an instance type.

    • For as specs, specify the required number of vCPUs and amount of memory.

    • For as an instance type, accept the default instance type, or choose Change instance type to choose a different instance type.

  5. Under Tell us how much capacity you need, for Total target capacity, specify the number of units to request for target capacity. You can choose instances or vCPUs.

  6. Review the recommended Fleet request settings based on your application or task selection, and choose Launch.

Create a Spot Fleet Request Using Defined Parameters (Console)

You can create a Spot Fleet using the parameters that you define.

To create a Spot Fleet request using defined parameters (console)

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot.

  2. If you are new to Spot, you see a welcome page; choose Get started. Otherwise, choose Request Spot Instances.

  3. For Tell us your application or task need, choose Flexible workloads, Load balancing workloads, Big data workloads, or Defined duration workloads.

  4. For Configure your instances, do the following:

    1. (Optional) For Launch template, choose a launch template. The launch template must specify an Amazon Machine Image (AMI), as you cannot override the AMI using Spot Fleet if you specify a launch template.

      Important

      If you intend to specify Optional On-Demand portion, you must choose a launch template.

    2. For AMI, choose one of the basic AMIs provided by AWS, or choose Search for AMI to use an AMI from our user community, the AWS Marketplace, or one of your own.

    3. For Minimum compute unit, choose the minimum hardware specifications (vCPUs, memory, and storage) that you need for your application or task, either as specs or as an instance type.

      • For as specs, specify the required number of vCPUs and amount of memory.

      • For as an instance type, accept the default instance type, or choose Change instance type to choose a different instance type.

    4. (Optional) For Network, choose an existing VPC or create a new one.

      [Existing VPC] Choose the VPC.

      [New VPC] Choose Create new VPC to go the Amazon VPC console. When you are done, return to the wizard and refresh the list.

    5. (Optional) For Availability Zone, let AWS choose the Availability Zones for your Spot Instances, or specify one or more Availability Zones.

      If you have more than one subnet in an Availability Zone, choose the appropriate subnet from Subnet. To add subnets, choose Create new subnet to go to the Amazon VPC console. When you are done, return to the wizard and refresh the list.

    6. (Optional) For Key pair name, choose an existing key pair or create a new one.

      [Existing key pair] Choose the key pair.

      [New key pair] Choose Create new key pair to go the Amazon VPC console. When you are done, return to the wizard and refresh the list.

  5. (Optional) For Additional configurations, do the following:

    1. (Optional) To add storage, specify additional instance store volumes or Amazon EBS volumes, depending on the instance type.

    2. (Optional) To enable Amazon EBS optimization, for EBS-optimized, choose Launch EBS-optimized instances.

    3. (Optional) To add temporary block-level storage for your instances, for Instance store, choose Attach at launch.

    4. (Optional) By default, basic monitoring is enabled for your instances. To enable detailed monitoring, for Monitoring, choose Enable CloudWatch detailed monitoring.

    5. (Optional) To run a Dedicated Spot Instance, for Tenancy, choose Dedicated - run a dedicated instance.

    6. (Optional) For Security groups, choose one or more security groups or create a new one.

      [Existing security group] Choose one or more security groups.

      [New security group] Choose Create new security group to go the Amazon VPC console. When you are done, return to the wizard and refresh the list.

    7. (Optional) To make your instances reachable from the internet, for Auto-assign IPv4 Public IP, choose Enable.

    8. (Optional) To launch your Spot Instances with an IAM role, for IAM instance profile, choose the role .

    9. (Optional) To run a start-up script, copy it to User data.

    10. (Optional) To add a tag, choose Add new tag and enter the key and value for the tag. Repeat for each tag.

  6. For Tell us how much capacity you need, do the following:

    1. For Total target capacity, specify the number of units to request for target capacity. You can choose instances or vCPUs. To specify a target capacity of 0 so that you can add capacity later, choose Maintain target capacity.

    2. (Optional) For Optional On-Demand portion, specify the number of On-Demand units to request. The number must be less than the Total target capacity. Amazon EC2 calculates the difference, and allocates the difference to Spot units to request.

      Important

      To specify an optional On-Demand portion, you must first choose a launch template.

    3. (Optional) To replace unhealthy instances in a Request and Maintain Spot Fleet, select Replace unhealthy instances.

    4. (Optional) By default, the Spot service terminates Spot Instances when they are interrupted. To maintain the target capacity, choose Maintain target capacity. You can then specify that the Spot service terminates, stops, or hibernates Spot Instances when they are interrupted. To do so, choose the corresponding option from Interruption behavior.

  7. For Fleet request settings, do the following:

    1. Review the fleet request and fleet allocation strategy based on your application or task selection. To change the instance types or allocation strategy, clear Apply recommendations.

    2. (Optional) To remove instance types, for Fleet request, choose Remove. To add instance types, choose Select instance types.

    3. (Optional) For Fleet allocation strategy, choose the strategy that meets your needs. For more information, see Allocation Strategy for Spot Instances.

  8. For Additional request details, do the following:

    1. Review the additional request details. To make changes, clear Apply defaults.

    2. (Optional) For IAM fleet role, you can use the default role or choose a different role. To use the default role after changing the role, choose Use default role.

    3. (Optional) For Maximum price, you can use the default maximum price (the On-Demand price) or specify the maximum price you are willing to pay. If your maximum price is lower than the Spot price for the instance types that you selected, your Spot Instances are not launched.

    4. (Optional) To create a request that is valid only during a specific time period, edit Request valid from and Request valid until.

    5. (Optional) By default, we terminate your Spot Instances when the request expires. To keep them running after your request expires, clear Terminate the instances when the request expires.

    6. (Optional) To register your Spot Instances with a load balancer, choose Receive traffic from one or more load balancers and choose one or more Classic Load Balancers or target groups.

  9. (Optional) To download a copy of the launch configuration for use with the AWS CLI, choose JSON config.

  10. Choose Launch.

    The Spot Fleet request type is fleet. When the request is fulfilled, requests of type instance are added, where the state is active and the status is fulfilled.

To create a Spot Fleet request using the AWS CLI

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

For example configuration files, see Spot Fleet Example Configurations.

The following is example output:

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

Monitoring Your Spot Fleet

The Spot Fleet launches Spot Instances when your maximum price exceeds the Spot price and capacity is available. The Spot Instances run until they are interrupted or you terminate them.

To monitor your Spot Fleet (console)

  1. Open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.

  2. In the navigation pane, choose Spot Requests.

  3. Select your Spot Fleet request. To see the configuration details, choose Description.

  4. To list the Spot Instances for the Spot Fleet, choose Instances.

  5. To view the history for the Spot Fleet, choose History.

To monitor your Spot Fleet (AWS CLI)

Use the following describe-spot-fleet-requests command to describe your Spot Fleet requests:

aws ec2 describe-spot-fleet-requests

Use the following describe-spot-fleet-instances command to describe the Spot Instances for the specified Spot Fleet:

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

Use the following describe-spot-fleet-request-history command to describe the history for the specified Spot Fleet request:

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

Modifying a Spot Fleet Request

You can modify an active Spot Fleet request to complete the following tasks:

  • Increase the target capacity

  • Decrease the target capacity

Note

You can't modify a one-time Spot Fleet request.

You can only modify the Spot Instance portion of a Spot Fleet request; you can't modify the On-Demand Instance portion of a Spot Fleet request.

When you increase the target capacity, the Spot Fleet launches the additional Spot Instances according to the allocation strategy for its Spot Fleet request. If the allocation strategy is lowestPrice, the Spot Fleet launches the instances from the lowest-priced Spot Instance pool in the Spot Fleet request. If the allocation strategy is diversified, the Spot Fleet distributes the instances across the pools in the Spot Fleet request.

When you decrease the target capacity, the Spot Fleet cancels any open requests that exceed the new target capacity. You can request that the Spot Fleet terminate Spot Instances until the size of the fleet reaches the new target capacity. If the allocation strategy is lowestPrice, the Spot Fleet terminates the instances with the highest price per unit. If the allocation strategy is diversified, the Spot Fleet terminates instances across the pools. Alternatively, you can request that the Spot Fleet keep the fleet at its current size, but not replace any Spot Instances that are interrupted or that you terminate manually.

When a Spot Fleet terminates an instance because the target capacity was decreased, the instance receives a Spot Instance interruption notice.

To modify a Spot Fleet request (console)

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot/home/fleet.

  2. Select your Spot Fleet request.

  3. Choose Actions, Modify target capacity.

  4. In Modify target capacity, do the following:

    1. Enter the new target capacity.

    2. (Optional) If you are decreasing the target capacity but want to keep the fleet at its current size, clear Terminate instances.

    3. Choose Submit.

To modify a Spot Fleet request using the AWS CLI

Use the following modify-spot-fleet-request command to update the target capacity of the specified Spot Fleet request:

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

You can modify the previous command as follows to decrease the target capacity of the specified Spot Fleet without terminating any Spot Instances as a result:

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

Canceling a Spot Fleet Request

When you are finished using your Spot Fleet, you can cancel the Spot Fleet request. This cancels all Spot requests associated with the Spot Fleet, so that no new Spot Instances are launched for your Spot Fleet. You must specify whether the Spot Fleet should terminate its Spot Instances. If you terminate the instances, the Spot Fleet request enters the cancelled_terminating state. Otherwise, the Spot Fleet request enters the cancelled_running state and the instances continue to run until they are interrupted or you terminate them manually.

To cancel a Spot Fleet request (console)

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot/home/fleet.

  2. Select your Spot Fleet request.

  3. Choose Actions, Cancel spot request.

  4. In Cancel spot request, verify that you want to cancel the Spot Fleet. To keep the fleet at its current size, clear Terminate instances. When you are ready, choose Confirm.

To cancel a Spot Fleet request using the AWS CLI

Use the following cancel-spot-fleet-requests command to cancel the specified Spot Fleet request and terminate the instances:

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

The following is example output:

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

You can modify the previous command as follows to cancel the specified Spot Fleet request without terminating the instances:

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

The following is example output:

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