Skip to content

Instantly share code, notes, and snippets.

@albertstartup
Created July 1, 2016 04:14
Show Gist options
  • Save albertstartup/1390cab86942a1fbea366bc386c328a8 to your computer and use it in GitHub Desktop.
Save albertstartup/1390cab86942a1fbea366bc386c328a8 to your computer and use it in GitHub Desktop.
get the latest spot price for all regions
# must set aws credentials
import boto3
from datetime import datetime
from dateutil.tz import tzutc
from operator import itemgetter
from functools import partial
from pipe import Pipe
def get_region_history(region):
remove_windows = partial(filter, lambda item: item['ProductDescription'] != 'Windows')
items = boto3.client('ec2', region_name=region).describe_spot_price_history(StartTime=datetime.now(tzutc()), InstanceTypes=['g2.2xlarge'])['SpotPriceHistory']
return items | Pipe(remove_windows)
def get_region_histories():
regions = [region_description['RegionName'] for region_description in boto3.client('ec2').describe_regions()['Regions']]
remove_empty_histories = partial(filter, lambda region_history: region_history['history'] != [])
region_histories = [{'name': region, 'history': get_region_history(region)} for region in regions]
return region_histories | Pipe(remove_empty_histories)
def get_latest_for_regions():
region_histories = get_region_histories()
def get_latest(items): latest = max(items, key=itemgetter('Timestamp')); return {'Timestamp': latest['Timestamp'], 'SpotPrice': latest['SpotPrice']}
sort_by_desc_timestamp = partial(sorted, key=lambda item: item['latest']['Timestamp'], reverse=True)
latest_for_region = [{ 'name': region_history['name'], 'latest': get_latest(region_history['history']) } for region_history in region_histories]
return latest_for_region | Pipe(sort_by_desc_timestamp)
for item in get_latest_for_regions(): print item
print "now: ", datetime.now(tzutc())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment