Instance types: (t2.micro, t2.small, c4.large...) those listed here: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
I want to access a list of these through boto3. something like:
conn.get_all_instance_types()
or even
conn.describe_instance_types()['InstanceTypes'][0]['Name']
which everything seems to look like in this weird api.
I've looked through the docs for client and ServiceResource, but i can't find anything that seems to come close. I haven't even found a hacky solution that lists something else that happen to represent all the instance types.
Anyone with more experience of boto3?
There's now boto3.client('ec2').describe_instance_types()
and corresponding aws-cli command aws ec2 describe-instance-types
:
'''EC2 describe_instance_types usage example'''
import boto3
def ec2_instance_types(region_name):
'''Yield all available EC2 instance types in region <region_name>'''
ec2 = boto3.client('ec2', region_name=region_name)
describe_args = {}
while True:
describe_result = ec2.describe_instance_types(**describe_args)
yield from [i['InstanceType'] for i in describe_result['InstanceTypes']]
if 'NextToken' not in describe_result:
break
describe_args['NextToken'] = describe_result['NextToken']
for ec2_type in ec2_instance_types('us-east-1'):
print(ec2_type)
Expect about 3s of running time.
The EC2 API does not provide a way to get a list of all EC2 instance types. I wish it did. Some people have cobbled together their own lists of valid types by scraping sites like this but for now that is the only way.
This information can be retrieved in the JSON provided by the recently-announced AWS Price List API. As a simple example using the Python requests
module:
#!/usr/bin/env python
# List EC2 Instance Types
# see: https://aws.amazon.com/blogs/aws/new-aws-price-list-api/
import requests
offers = requests.get(
'https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/index.json'
)
ec2_offer_path = offers.json()['offers']['AmazonEC2']['currentVersionUrl']
ec2offer = requests.get(
'https://pricing.us-east-1.amazonaws.com%s' % ec2_offer_path
).json()
uniq = set()
for sku, data in ec2offer['products'].items():
if data['productFamily'] != 'Compute Instance':
# skip anything that's not an EC2 Instance
continue
uniq.add(data['attributes']['instanceType'])
for itype in sorted(uniq):
print(itype)
Note that this might take a while... as of today, the current EC2 Offers JSON file ( https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.json ) is 173MB, so it takes a while both to retrieve and to parse. The current result is 99 distinct instance types.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With