Spot Instance Interruptions
Demand for Spot instances can vary significantly from moment to moment, and the availability of Spot instances can also vary significantly depending on how many unused EC2 instances are available. In addition, no matter how high you bid, it is still possible that your Spot instance will be interrupted. Therefore, you must ensure that your application is prepared for a Spot instance interruption. We strongly recommend that you do not use Spot instances for applications that can't be interrupted.
The following are the possible reasons that Amazon EC2 will terminate your Spot instances:
Price—The Spot price is greater than your bid price.
Capacity—If there are not enough unused EC2 instances to meet the demand for Spot instances, Amazon EC2 terminates Spot instances, starting with those instances with the lowest bid prices. If there are several Spot instances with the same bid price, the order in which the instances are terminated is determined at random.
Constraints—If your request includes a constraint such as a launch group or an Availability Zone group, these Spot instances are terminated as a group when the constraint can no longer be met.
Preparing for Interruptions
Here are some best practices to follow when you use Spot instances:
Choose a reasonable bid price. Your bid price should be high enough to make it likely that your request will be fulfilled, but not higher than you are willing to pay. This is important because if the supply is low for an extended period of time, the Spot price can remain high during that period because it is based on the highest bid prices. We strongly recommend against bidding above the price for On-Demand instances.
Ensure that your instance is ready to go as soon as the request is fulfilled by using an Amazon Machine Image (AMI) that contains the required software configuration. You can also use user data to run commands at start-up.
Store important data regularly in a place that won't be affected when the Spot instance terminates. For example, you can use Amazon S3, Amazon EBS, or DynamoDB.
Divide the work into small tasks (using a Grid, Hadoop, or queue-based architecture) or use checkpoints so that you can save your work frequently.
Use Spot instance termination notices to monitor the status of your Spot instances.
Test your application to ensure that it handles an unexpected instance termination gracefully. You can do so by running the application using an On-Demand instance and then terminating the On-Demand instance yourself.
Spot Instance Termination Notices
The best way to protect against Spot instance interruption is to architect your application to be fault tolerant. In addition, you can take advantage of Spot instance termination notices, which provide a two-minute warning before Amazon EC2 must terminate your Spot instance.
This warning is made available to the applications on your Spot instance using an item in the instance metadata. For example, you can check for this warning in the instance metadata periodically (we recommend every 5 seconds) using the following query:
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/spot/termination-time
For information about other ways to retrieve instance metadata, see Retrieving Instance Metadata.
If your Spot instance is marked for termination by Amazon EC2, the
termination-time item is present and it specifies the approximate
time in UTC when the instance will receive the shutdown signal. For example:
If Amazon EC2 is not preparing to terminate the instance, or if you
terminated the Spot instance yourself, the
termination-time item is
either not present (so you receive an HTTP 404 error) or contains a value that is
not a time value.
Note that while we make every effort to provide this warning the moment that your Spot instance is marked for termination by Amazon EC2, it is possible that your Spot instance will be terminated before Amazon EC2 can make the warning available. Therefore, you must ensure that your application is prepared to handle an unexpected Spot instance interruption even if you are checking for Spot instance termination notices.
If Amazon EC2 fails to terminate the instance, the Spot bid status is set to
termination-time remains in the instance metadata with the original
approximate time, which is now in the past.