# soft-spot
[![Build Status](https://dev.azure.com/messier-16/soft-spot/_apis/build/status/fferegrino.soft-spot?branchName=master)](https://dev.azure.com/messier-16/soft-spot/_build/latest?definitionId=1&branchName=master) [![PyPI version](https://badge.fury.io/py/soft-spot.svg)](https://pypi.org/project/soft-spot/)
Do you have a soft spot for cheap cloud computing (**a.k.a. AWS Spot instances**)? Me too, no shame on that.
![Crappy Logo](/soft-spot.png?raw=true "Crappy Logo")
However, what is a shame is having to go through that clunky UI and click here and there to get one; `soft-spot` makes it dead easy to launch an instance:
## How?
Just define a file with the specifications of the machine you want to launch:
```ini
[INSTANCE]
ami = ami-06d51e91cea0dac8d
type = t2.micro
security_group = SecurityGroupName
key_pair = some-key
spot_price = 0.005
availability_zone = us-west-2c
[VOLUME]
id = vol-00a56acb10f11b0e3
device = /dev/sdf
[ACCOUNT]
user = ubuntu
key_location = ~/.ssh/some-key.pem
[SCRIPT]
commands = ["sudo mkdir /data", "sudo mount /dev/xvdf /data", "sudo chown ubuntu /data"]
```
Then just execute the `sspot request` command:
```bash
sspot request <<instance_config_file>>
```
### Other commands
#### `cancel`
Cancel all **active** spot requests and terminate the instances associated to them:
```bash
sspot cancel
```
#### `price`
Show the prices for the specified spot instance:
```bash
sspot price <<instance_config_file>>
```
### Credentials
This script uses `boto3` so I strongly recommend heading over to [its documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html) to learn more.
Alternatively, you could create a tiny configuration file like this:
```ini
[DEFAULT]
aws_access_key_id = an_acces_key
aws_secret_access_key = a_secret_key
region_name = us-west-2
```
And then pass it on to the `spot` command:
```bash
sspot -a ~/aws_credentials.txt request <<instance_config_file>>
```