Created
June 17, 2016 22:53
-
-
Save albertstartup/1ff5f04ba8ae545fca7c820619ea2375 to your computer and use it in GitHub Desktop.
Python script to get latest ec2 spot instance price for g2.8xlarge
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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