Last Updated on May 15, 2021
Below is a Python Script that gets the price of AWS Elastic Load Balancers (ELB). This can retrieve prices for Classic, Application, Network and Gateway Load Balancers. It can also get the price of load balancers in AWS Outposts. See the different examples of how to use this Python code below.
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_load_balancer_price(region_code, lb_product_family, is_outposts=False):
price_details = {}
region_name = get_region_name(region_code)
if is_outposts:
location_type = 'AWS Outposts'
else:
location_type = 'AWS Region'
filters = [
{'Type': 'TERM_MATCH', 'Field': 'locationType', 'Value': location_type},
{'Type': 'TERM_MATCH', 'Field': 'location', 'Value': region_name},
{'Type': 'TERM_MATCH', 'Field': 'productFamily', 'Value': lb_product_family},
]
pricing_client = boto3.client('pricing', region_name='us-east-1')
response = pricing_client.get_products(ServiceCode='AWSELB', Filters=filters)
if len(response['PriceList']) == 0:
return None
for price in response['PriceList']:
price = json.loads(price)
usage_type = price['product']['attributes']['usagetype']
for on_demand in price['terms']['OnDemand'].values():
for price_dimensions in on_demand['priceDimensions'].values():
price_value = float(price_dimensions['pricePerUnit']['USD'])
if 'LoadBalancerUsage' in usage_type:
price_details['LoadBalancerUsage'] = price_value
elif 'DataProcessing-Bytes' in usage_type:
price_details['DataProcessing-Bytes'] = price_value
elif 'LCUUsage' in usage_type:
price_details['LCUUsage'] = price_value
return price_details
if __name__ == "__main__":
region_code = 'ap-south-1'
lb_product_family = 'Load Balancer' # Classic Load Balancer
price_details = get_load_balancer_price(region_code, lb_product_family)
print(region_code, lb_product_family)
print(price_details)
Output
ap-south-1 Load Balancer
{'LoadBalancerUsage': 0.0266, 'DataProcessing-Bytes': 0.008}
You can check if the price is correct in the AWS Load Balancer Pricing page.
- Code Explained
- Classic Load Balancer
- Application Load Balancer
- Network Load Balancer
- Gateway Load Balancer
- Load Balancer in AWS Outposts
- Load Balancer Price across all AWS Regions
Code Explained
The get_load_balancer_price
accepts three parameters – region_code, lb_product_family and is_outposts.
region_code
(string) is the target region for the price of the load balancers. It’s in the format of region codes like ap-south-1, us-east-1, eu-west-1.
lb_product_family
(string) is the product family attribute in the AWS Price List API for Elastic Load Balancing (ELB).
The values for lb_product_family
are
- Load Balancer for Classic Load Balancers
- Load Balancer-Application for Application Load Balancers
- Load Balancer-Network for Network Load Balancers
- Load Balancer-Gateway for Gateway Load Balancer
is_outposts
(boolean) is an optional parameter. If this is not set, by default this is set to False or the load balancer price being retrieved is in an AWS region, not in AWS Outposts. If this is set to True, then it will retrieve the price in AWS Outposts.
The output of the get_load_balancer_price function is the price_details
dictionary.
Depending on the type of Load Balancer it will have different key-value pairs.
For Classic Load Balancer price_details
will have the following keys.
LoadBalancerUsage
the hourly price of Classic Load BalancerDataProcessing-Bytes
the per GB price of data processed
For new generation of Load Balancers like Application, Network and Gateway Load Balancers, including the ones in AWS Outposts, price_details
will have the following keys.
LoadBalancerUsage
the hourly price of the load balancersLCUUsage
the LCU-hour price (or partial hour)
For more information on LCU Usage please visit the Elastic Load Balancer pricing page.
Examples on how to use the Python Script to retrieve Elastic Load Balancer (ELB) prices
On the examples below we will only use the main part of the python script to show how to use the get_load_balancer_price
for different types of AWS Load Balancers.
Classic Load Balancer
For Classic Load Balancers the lb_product_family
must be set to Load Balancer.
if __name__ == "__main__":
region_code = 'us-east-1'
lb_product_family = 'Load Balancer' # Classic Load Balancer
price_details = get_load_balancer_price(region_code, lb_product_family)
print(region_code, lb_product_family)
print(price_details)
Output
us-east-1 Load Balancer
{'LoadBalancerUsage': 0.025, 'DataProcessing-Bytes': 0.008}
Application Load Balancer
For Application Load Balancers the lb_product_family
must be set to Load Balancer-Application.
if __name__ == "__main__":
region_code = 'eu-south-1'
lb_product_family = 'Load Balancer-Application' # Application Load Balancer
price_details = get_load_balancer_price(region_code, lb_product_family)
print(region_code, lb_product_family)
print(price_details)
Output
eu-south-1 Load Balancer-Application
{'LoadBalancerUsage': 0.0265, 'LCUUsage': 0.0084}
Network Load Balancer
For Network Load Balancers the lb_product_family
must be set to Load Balancer-Network.
if __name__ == "__main__":
region_code = 'me-south-1'
lb_product_family = 'Load Balancer-Network' # Network Load Balancer
price_details = get_load_balancer_price(region_code, lb_product_family)
print(region_code, lb_product_family)
print(price_details)
Output
me-south-1 Load Balancer-Network
{'LoadBalancerUsage': 0.02772, 'LCUUsage': 0.0066}
Gateway Load Balancer
For Gateway Load Balancers the lb_product_family
must be set to Load Balancer-Gateway.
if __name__ == "__main__":
region_code = 'ap-northeast-2'
lb_product_family = 'Load Balancer-Gateway' # Gateway Load Balancer
price_details = get_load_balancer_price(region_code, lb_product_family)
print(region_code, lb_product_family)
print(price_details)
Output
ap-northeast-2 Load Balancer-Gateway
{'LCUUsage': 0.004, 'LoadBalancerUsage': 0.0125}
AWS Outposts Application Load Balancers
For Load Balancers that are in AWS Outposts, the lb_product_family
will still be the same depending on your target type of Load Balancer.
This time, we have to set the is_outposts
parameter to True
.
if __name__ == "__main__":
region_code = 'ap-southeast-1'
lb_product_family = 'Load Balancer-Application' # Application Load Balancer
is_outposts = True
price_details = get_load_balancer_price(region_code, lb_product_family, is_outposts)
print(region_code, lb_product_family)
print(price_details)
Output
ap-southeast-1 Load Balancer-Application
{'LCUUsage': 0.0, 'LoadBalancerUsage': 0.0252}
Listing Load Balancer Price for All Regions
Below is a code to get the price of Application Load Balancers in the all AWS regions. It uses the listing of AWS regions using Boto3.
if __name__ == "__main__":
ec2_client = boto3.client('ec2')
response = ec2_client.describe_regions(AllRegions=True)
regions = response['Regions']
region_code_list = []
for region in regions:
region_code = region['RegionName']
region_code_list.append(region_code)
region_code_list = sorted(region_code_list)
for region_code in region_code_list:
lb_product_family = 'Load Balancer-Application' # Application Load Balancer
price_details = get_load_balancer_price(region_code, lb_product_family)
load_balancer_usage_price = price_details['LoadBalancerUsage']
lcu_usage_price = price_details['LCUUsage']
print(load_balancer_usage_price, '\t', lcu_usage_price, '\t', lb_product_family, '\t', region_code, '\t', get_region_name(region_code))
Output. Fixed the formatting for easier reading.
0.03 0.0095 Load Balancer-Application af-south-1 Africa (Cape Town)
0.0277 0.0088 Load Balancer-Application ap-east-1 Asia Pacific (Hong Kong)
0.0243 0.008 Load Balancer-Application ap-northeast-1 Asia Pacific (Tokyo)
0.0225 0.008 Load Balancer-Application ap-northeast-2 Asia Pacific (Seoul)
0.0243 0.008 Load Balancer-Application ap-northeast-3 Asia Pacific (Osaka)
0.0239 0.008 Load Balancer-Application ap-south-1 Asia Pacific (Mumbai)
0.0252 0.008 Load Balancer-Application ap-southeast-1 Asia Pacific (Singapore)
0.0252 0.008 Load Balancer-Application ap-southeast-2 Asia Pacific (Sydney)
0.02475 0.0088 Load Balancer-Application ca-central-1 Canada (Central)
0.027 0.008 Load Balancer-Application eu-central-1 EU (Frankfurt)
0.02394 0.0076 Load Balancer-Application eu-north-1 EU (Stockholm)
0.0265 0.0084 Load Balancer-Application eu-south-1 EU (Milan)
0.0252 0.008 Load Balancer-Application eu-west-1 EU (Ireland)
0.02646 0.0084 Load Balancer-Application eu-west-2 EU (London)
0.02646 0.0084 Load Balancer-Application eu-west-3 EU (Paris)
0.02772 0.0088 Load Balancer-Application me-south-1 Middle East (Bahrain)
0.034 0.011 Load Balancer-Application sa-east-1 South America (Sao Paulo)
0.0225 0.008 Load Balancer-Application us-east-1 US East (N. Virginia)
0.0225 0.008 Load Balancer-Application us-east-2 US East (Ohio)
0.0252 0.008 Load Balancer-Application us-west-1 US West (N. California)
0.0225 0.008 Load Balancer-Application us-west-2 US West (Oregon)
First column is the Load Balancer Usage price.
Second column is the LCU Usage price.
I hope the above helps in getting the price of AWS Elastic Load Balancers (ELB).