#!/usr/bin/env python import json import os import subprocess from time import sleep import boto3 from boto3 import Session def main(): print("Getting InstanceTypes from all regions") regions = [] regions.extend(Session().get_available_regions("ec2")) regions.extend(Session().get_available_regions("ec2", partition_name="aws-us-gov")) regions.extend(Session().get_available_regions("ec2", partition_name="aws-cn")) print("Found " + str(len(regions)) + " regions") instances = [] for region in regions: try: ec2 = boto3.client("ec2", region_name=region) offerings = ec2.describe_instance_types() instances.extend(offerings["InstanceTypes"]) next_token = offerings.get("NextToken", "") while next_token: offerings = ec2.describe_instance_types(NextToken=next_token) instances.extend(offerings["InstanceTypes"]) next_token = offerings.get("NextToken", None) except Exception: print("Could not fetch instance types from region:", region) # We don't want it to look like we're DDOS'ing AWS sleep(1) print("Parsing data") result = {} for instance in instances: result[instance.get("InstanceType")] = instance root_dir = ( subprocess.check_output(["git", "rev-parse", "--show-toplevel"]) .decode() .strip() ) dest = os.path.join(root_dir, "moto/ec2/resources/instance_types.json") print("Writing data to {0}".format(dest)) with open(dest, "w") as open_file: json.dump(result, open_file, sort_keys=True, indent=1) if __name__ == "__main__": main()