Spot Fleet requests - Amazon Elastic Compute Cloud

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 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 canceled.

  • 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 canceled. A one-time request cannot be modified, and this state does not apply to such Spot requests.

  • cancelled_running – The Spot Fleet is canceled 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 canceled and its Spot Instances are terminating. The request remains in this state until all instances are terminated.

  • cancelled – The Spot Fleet is canceled 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 canceled 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.

Important

If you choose to tag instances in the fleet and you choose to maintain target capacity (the Spot Fleet request is of type maintain), the differences in permissions of the IAM user and the IamFleetRole might lead to inconsistent tagging behavior of instances in the fleet. If the IamFleetRole does not include the CreateTags permission, some of the instances launched by the fleet might not be tagged. While we are working to fix this inconsistency, to ensure that all instances launched by the fleet are tagged, we recommend that you use the aws-ec2-spot-fleet-tagging-role role for the IamFleetRole. Alternatively, to use an existing role, attach the AmazonEC2SpotFleetTaggingRole AWS Managed Policy to the existing role. Otherwise, you need to manually add the CreateTags permission to your existing policy.

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 uses service-linked roles for the permissions that it requires to call other AWS services on your behalf. A service-linked role is a unique type of IAM role that is linked directly to an AWS service. Service-linked roles provide a secure way to delegate permissions to AWS services because only the linked service can assume a service-linked role. For more information, see Using Service-Linked Roles in the IAM User Guide.

Amazon EC2 uses the service-linked role named AWSServiceRoleForEC2SpotFleet to launch and manage Spot Instances on your behalf.

Permissions granted by AWSServiceRoleForEC2SpotFleet

Amazon EC2 uses AWSServiceRoleForEC2SpotFleet to complete the following actions:

  • ec2:RequestSpotInstances - Request Spot Instances

  • ec2:RunInstances - Launch instances

  • ec2:TerminateInstances - Terminate instances

  • ec2:DescribeImages - Describe Amazon Machine Images (AMIs) for the instances

  • ec2:DescribeInstanceStatus - Describe the status of the instances

  • ec2:DescribeSubnets - Describe the subnets for instances

  • ec2:CreateTags - Add tags to the Spot Fleet request, Spot Instances, On-Demand Instances, and volumes

  • elasticloadbalancing:RegisterInstancesWithLoadBalancer - Add the specified instances to the specified load balancer

  • elasticloadbalancing:RegisterTargets - Register the specified targets with the specified target group

Create the service-linked role

Under most circumstances, you don't need to manually create a service-linked role. Amazon EC2 creates the AWSServiceRoleForEC2SpotFleet service-linked role the first time you create a Spot Fleet using the console.

If you had an active Spot Fleet request before October 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 manually create the AWSServiceRoleForEC2SpotFleet service-linked role

  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.

Granting access to CMKs for use with encrypted AMIs and EBS snapshots

If you specify an encrypted AMI or an encrypted Amazon EBS snapshot in your Spot Fleet request and you use a customer managed customer master key (CMK) for encryption, you must grant the AWSServiceRoleForEC2SpotFleet role permission to use the CMK so that Amazon EC2 can launch Spot Instances on your behalf. To do this, you must add a grant to the CMK, as shown in the following procedure.

When providing permissions, grants are an alternative to key policies. For more information, see Using Grants and Using Key Policies in AWS KMS in the AWS Key Management Service Developer Guide.

To grant the AWSServiceRoleForEC2SpotFleet role permissions to use the CMK

  • Use the create-grant command to add a grant to the CMK and to specify the principal (the AWSServiceRoleForEC2SpotFleet service-linked role) that is given permission to perform the operations that the grant permits. The CMK is specified by the key-id parameter and the ARN of the CMK. The principal is specified by the grantee-principal parameter and the ARN of the AWSServiceRoleForEC2SpotFleet service-linked role.

    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"

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 replace unhealthy instances, for Health check, choose Replace unhealthy instances. To enable this option, you must first choose Maintain target capacity.

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

    7. (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.

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

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

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

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

      For each tag, to tag the instances and the Spot Fleet request with the same tag, ensure that both Instance tags and Fleet tags are selected. To tag only the instances launched by the fleet, clear Fleet tags. To tag only the Spot Fleet request, clear Instance tags.

  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) 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" }

Tagging a Spot Fleet

To help categorize and manage your Spot Fleet requests, you can tag them with custom metadata. You can assign a tag to a Spot Fleet request when you create it, or afterward. You can assign tags using the Amazon EC2 console or a command line tool.

When you tag a Spot Fleet request, the instances that are launched by the Spot Fleet are not automatically tagged. You need to explicitly tag the instances launched by the Spot Fleet. You can choose to assign tags to only the Spot Fleet request, or to only the instances launched by the fleet, or to both.

For more information about how tags work, see Tagging Your Amazon EC2 Resources.

Prerequisite

Grant the IAM user the permission to tag resources. For more information, see Example: Tagging Resources.

To grant an IAM user the permission to tag resources

Create a IAM policy that includes the following:

  • The ec2:CreateTags action. This grants the IAM user permission to create tags.

  • The ec2:RequestSpotFleet action. This grants the IAM user permission to create a Spot Fleet request.

  • For Resource, you must specify "*". This allows users to tag all resource types.

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

We currently do not support resource-level permissions for the spot-fleet-request resource. If you specify spot-fleet-request as a resource, you will get an unauthorized exception when you try to tag the fleet. The following example illustrates how not to set the policy.

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

To tag a new Spot Fleet request using the console

  1. Follow the Create a Spot Fleet request using defined parameters (console) procedure.

  2. To add a tag, expand Additional configurations, choose Add new tag, and enter the key and value for the tag. Repeat for each tag.

    For each tag, you can tag the Spot Fleet request and the instances with the same tag. To tag both, ensure that both Instance tags and Fleet tags are selected. To tag only the Spot Fleet request, clear Instance tags. To tag only the instances launched by the fleet, clear Fleet tags.

  3. Complete the required fields to create a Spot Fleet request, and then choose Launch. For more information, see Create a Spot Fleet request using defined parameters (console).

To tag a new Spot Fleet request using the AWS CLI

To tag a Spot Fleet request when you create it, configure the Spot Fleet request configuration as follows:

  • Specify the tags for the Spot Fleet request in SpotFleetRequestConfig.

  • For ResourceType, specify spot-fleet-request. If you specify another value, the fleet request will fail.

  • For Tags, specify the key-value pair. You can specify more than one key-value pair.

In the following example, the Spot Fleet request is tagged with two tags: Key=Environment and Value=Production, and 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" } ] } ] } }

To tag a new Spot Fleet request and the instances that it launches using the AWS CLI

To tag a Spot Fleet request when you create it, and to tag the instances when they are launched by the fleet, configure the Spot Fleet request configuration as follows:

Spot Fleet request tags:

  • Specify the tags for the Spot Fleet request in SpotFleetRequestConfig.

  • For ResourceType, specify spot-fleet-request. If you specify another value, the fleet request will fail.

  • For Tags, specify the key-value pair. You can specify more than one key-value pair.

Instance tags:

  • Specify the tags for the instances in LaunchSpecifications.

  • For ResourceType, specify instance. If you specify another value, the fleet request will fail.

  • For Tags, specify the key-value pair. You can specify more than one key-value pair.

    Alternatively, you can specify the tags for the instance in the launch template that is referenced in the Spot Fleet request.

In the following example, the Spot Fleet request is tagged with two tags: Key=Environment and Value=Production, and Key=Cost-Center and Value=123. The instances that are launched by the fleet are tagged with one tag (which is the same as one of the tags for the Spot Fleet request): 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" } ] } ] } }

To tag instances launched by a Spot Fleet using the AWS CLI

To tag instances when they are launched by the fleet, you can either specify the tags in the launch template that is referenced in the Spot Fleet request, or you can specify the tags in the Spot Fleet request configuration as follows:

  • Specify the tags for the instances in LaunchSpecifications.

  • For ResourceType, specify instance. If you specify another value, the fleet request will fail.

  • For Tags, specify the key-value pair. You can specify more than one key-value pair.

In the following example, the instances that are launched by the fleet are tagged with one tag: 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 } }

To tag an existing Spot Fleet request using the AWS CLI

You can use the create-tags command to tag existing resources. In the following example, the existing Spot Fleet request is tagged with Key=purpose and Value=test.

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

To tag an existing Spot Fleet request using the console

After you have created a Spot Fleet request, you can add tags to the fleet request using the console.

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

  2. Select your Spot Fleet request.

  3. Choose the Tags tab and choose Create Tag.

To view Spot Fleet request tags using the console

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

  2. Select your Spot Fleet request and choose the Tags tab.

To describe Spot Fleet request tags

Use the describe-tags command to view the tags for the specified resource. In the following example, you describe the tags for the specified Spot Fleet request.

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

You can also view the tags of a Spot Fleet request by describing the Spot Fleet request.

Use the describe-spot-fleet-requests command to view the configuration of the specified Spot Fleet request, which includes any tags that were specified for the fleet request.

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

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 describe-spot-fleet-requests command to describe your Spot Fleet requests.

aws ec2 describe-spot-fleet-requests

Use the 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 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 and On-Demand portion

  • Decrease the target capacity and On-Demand portion

Note

You can't modify a one-time Spot Fleet request. You can only modify a Spot Fleet request if you selected Maintain target capacity when you created the Spot Fleet request.

When you increase the target capacity, the Spot Fleet launches additional Spot Instances. When you increase the On-Demand portion, the Spot Fleet launches additional On-Demand Instances.

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 and On-Demand portion.

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