Last Updated on May 2, 2021
The code below gets the price of an EBS Snapshots given the AWS Region using Python and Boto3.
import boto3
import json
from pkg_resources import resource_filename
def get_region_name(region_code):
endpoint_file = resource_filename('botocore', 'data/endpoints.json')
with open(endpoint_file, 'r') as f:
endpoint_data = json.load(f)
region_name = endpoint_data['partitions'][0]['regions'][region_code]['description']
region_name = region_name.replace('Europe', 'EU')
return region_name
def get_ebs_snapshot_price(region_code):
region_name = get_region_name(region_code)
filters = [
{'Type': 'TERM_MATCH', 'Field': 'productFamily', 'Value': "Storage Snapshot"},
{'Type': 'TERM_MATCH', 'Field': 'location', 'Value': region_name},
{'Type': 'TERM_MATCH', 'Field': 'storageMedia', 'Value': 'Amazon S3'}
]
pricing_client = boto3.client('pricing', region_name='ap-south-1')
response = pricing_client.get_products(ServiceCode='AmazonEC2', Filters=filters)
if len(response['PriceList']) > 0:
price = json.loads(response['PriceList'][0])
for on_demand in price['terms']['OnDemand'].values():
for price_dimensions in on_demand['priceDimensions'].values():
price_value = price_dimensions['pricePerUnit']['USD']
return float(price_value)
return None
if __name__ == "__main__":
region_code = 'ap-southeast-1'
snapshot_price = get_ebs_snapshot_price(region_code)
print(snapshot_price, '\t', region_code)
region_code = 'sa-east-1'
snapshot_price = get_ebs_snapshot_price(region_code)
print(snapshot_price, '\t', region_code)
region_code = 'eu-west-1'
snapshot_price = get_ebs_snapshot_price(region_code)
print(snapshot_price, '\t', region_code)
Output
0.05 ap-southeast-1
0.068 sa-east-1
0.05 eu-west-1
Listing All the Price of EBS Snapshots for All Regions
To list all the price of EBS Snapshots for all AWS Region using Python and Boto3, replace the if name == "main":
part of the code with the one below.
if __name__ == "__main__":
ec2_client = boto3.client('ec2')
response = ec2_client.describe_regions(AllRegions=True)
regions = response['Regions']
for region in regions:
region_code = region['RegionName']
snapshot_price = get_ebs_snapshot_price(region_code)
print(snapshot_price, '\t', region_code, '\t', get_region_name(region_code))
Output
0.0595 af-south-1 Africa (Cape Town)
0.0475 eu-north-1 EU (Stockholm)
0.05 ap-south-1 Asia Pacific (Mumbai)
0.053 eu-west-3 EU (Paris)
0.053 eu-west-2 EU (London)
0.0525 eu-south-1 EU (Milan)
0.05 eu-west-1 EU (Ireland)
0.05 ap-northeast-3 Asia Pacific (Osaka)
0.05 ap-northeast-2 Asia Pacific (Seoul)
0.055 me-south-1 Middle East (Bahrain)
0.05 ap-northeast-1 Asia Pacific (Tokyo)
0.068 sa-east-1 South America (Sao Paulo)
0.055 ca-central-1 Canada (Central)
0.055 ap-east-1 Asia Pacific (Hong Kong)
0.05 ap-southeast-1 Asia Pacific (Singapore)
0.055 ap-southeast-2 Asia Pacific (Sydney)
0.054 eu-central-1 EU (Frankfurt)
0.05 us-east-1 US East (N. Virginia)
0.05 us-east-2 US East (Ohio)
0.055 us-west-1 US West (N. California)
0.05 us-west-2 US West (Oregon)
To check if the price are correct, visit the Amazon EBS pricing page then change the region to your desired AWS region and check the Amazon EBS Snapshots section.