Skip to content

Instantly share code, notes, and snippets.

@albertstartup
Created June 17, 2016 22:53
Show Gist options
  • Save albertstartup/1ff5f04ba8ae545fca7c820619ea2375 to your computer and use it in GitHub Desktop.
Save albertstartup/1ff5f04ba8ae545fca7c820619ea2375 to your computer and use it in GitHub Desktop.
Python script to get latest ec2 spot instance price for g2.8xlarge
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.8xlarge'])['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_best_region():
region_histories = get_region_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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment