Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from venv import create
- import requests
- import json
- import boto3
- database_name = ''
- db_cluster_arn = ''
- db_credentials_secrets_store_arn = ''
- def get_data(url, region_name):
- response = requests.get(url)
- data_info = response.json()
- if response.status_code == 200:
- instances = []
- region_data = data_info['regions'].get(region_name, {})
- for instance_name, instance_attributes in region_data.items():
- instance = {
- 'Instance Name': instance_name,
- 'Rate Code': instance_attributes.get('rateCode', ''),
- 'Price': instance_attributes.get('price', ''),
- 'Location': instance_attributes.get('Location', ''),
- 'Instance Family': instance_attributes.get('Instance Family', ''),
- 'vCPU': instance_attributes.get('vCPU', ''),
- 'Memory': instance_attributes.get('Memory', ''),
- 'Storage': instance_attributes.get('Storage', ''),
- 'Network Performance': instance_attributes.get('Network Performance', ''),
- 'Operating System': instance_attributes.get('Operating System', ''),
- 'Pre Installed S/W': instance_attributes.get('Pre Installed S/W', ''),
- 'License Model': instance_attributes.get('License Model', ''),
- }
- instances.append(instance)
- return instances
- else:
- return None
- def north_america():
- north_america_urls = [
- ["US East (N. Virginia)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/US%20East%20(N.%20Virginia)/Linux/index.json?timestamp=1695335197182"],
- ["US East (N. California)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/US%20West%20(N.%20California)/Linux/index.json?timestamp=1695335943885"],
- ["US West (Oregon)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/US%20West%20(Oregon)/Linux/index.json?timestamp=1695336005767"],
- ["Canada (Central)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Canada%20(Central)/Linux/index.json?timestamp=1695336038545"],
- ["AWS GovCloud (US-East)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/AWS%20GovCloud%20(US-East)/Linux/index.json?timestamp=1695336076977"],
- ["AWS GovCloud (US-West)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/AWS%20GovCloud%20(US)/Linux/index.json?timestamp=1695336143250"]
- ]
- north_america = []
- for region_info in north_america_urls:
- region = region_info[0]
- url = region_info[1]
- data = get_data(url, region)
- north_america.append(data)
- return north_america
- def africa():
- africa_urls = [
- ["Africa (Cape Town)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Africa%20(Cape%20Town)/Linux/index.json?timestamp=1695336201165"]
- ]
- africa = []
- for region_info in africa_urls:
- region = region_info[0]
- url = region_info[1]
- data = get_data(url, region)
- africa.append(data)
- return africa
- def asia_pacific():
- asia_pacific = [
- ["Asia Pacific (Hong Kong)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Hong%20Kong)/Linux/index.json?timestamp=1695336236566"],
- ["Asia Pacific (Hyderabad)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Hyderabad)/Linux/index.json?timestamp=1695336267211"],
- ["Asia Pacific (Jakarta)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Jakarta)/Linux/index.json?timestamp=1695336335452"],
- ["Asia Pacific (Melbourne)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Melbourne)/Linux/index.json?timestamp=1695336377353"],
- ["Asia Pacific (Mumbai)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Mumbai)/Linux/index.json?timestamp=1695336414559"],
- ["Asia Pacific (Osaka)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Osaka)/Linux/index.json?timestamp=1695336448367"],
- ["Asia Pacific (Seoul)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Seoul)/Linux/index.json?timestamp=1695336489384"],
- ["Asia Pacific (Singapore)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Asia%20Pacific%20(Singapore)/Linux/index.json?timestamp=1695336516652"],
- ["Asia Pacific (Sydney)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Australia%20(Sydney)/Linux/index.json?timestamp=1695336549342"],
- ["Asia Pacific (Tokyo)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Australia%20(Tokyo)/Linux/index.json?timestamp=1695336572681"]
- ]
- asia_pacific = []
- for region_info in asia_pacific:
- region = region_info[0]
- url = region_info[1]
- data = get_data(url, region)
- asia_pacific.append(data)
- return asia_pacific
- def europe():
- europe = [
- ["Europe (Frankfurt)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Frankfurt)/Linux/index.json?timestamp=1695336606682"],
- ["Europe (Ireland)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Ireland)/Linux/index.json?timestamp=1695336640824"],
- ["Europe (London)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(London)/Linux/index.json?timestamp=1695336671834"],
- ["Europe (Milan)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Milan)/Linux/index.json?timestamp=1695336709113"],
- ["Europe (Paris)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Paris)/Linux/index.json?timestamp=1695336734334"],
- ["Europe (Spain)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Spain)/Linux/index.json?timestamp=1695336756525"],
- ["Europe (Stockholm)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Stockholm)/Linux/index.json?timestamp=1695336795677"],
- ["Europe (Zurich)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/EU%20(Zurich)/Linux/index.json?timestamp=1695336817871"]
- ]
- europe = []
- for region_info in europe:
- region = region_info[0]
- url = region_info[1]
- data = get_data(url, region)
- europe.append(data)
- return europe
- def middle_east():
- middle_east = [
- ["Middle East (Bahrain)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Middle%20East%20(Bahrain)/Linux/index.json?timestamp=1695336880976"],
- ["Middle East (UAE)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/Middle%20East%20(UAE)/Linux/index.json?timestamp=1695336906621"]
- ]
- middle_east = []
- for region_info in middle_east:
- region = region_info[0]
- url = region_info[1]
- data = get_data(url, region)
- middle_east.append(data)
- return middle_east
- def south_america():
- south_america = [
- ["South America (Sao Paulo)", "https://b0.p.awsstatic.com/pricing/2.0/meteredUnitMaps/ec2/USD/current/ec2-ondemand-without-sec-sel/South%20America%20(Sao%20Paulo)/Linux/index.json?timestamp=1695336944637"]
- ]
- south_america = []
- for region_info in south_america:
- region = region_info[0]
- url = region_info[1]
- data = get_data(url, region)
- south_america.append(data)
- return south_america
- import boto3
- database_name = ''
- db_cluster_arn = ''
- db_credentials_secrets_store_arn = ''
- # Create an RDS client
- rds_client = boto3.client('rds')
- def excute_sql(sql):
- response = rds_client.execute_statement(
- secretArn=db_credentials_secrets_store_arn,
- database=database_name,
- resourceArn=db_cluster_arn,
- sql=sql
- )
- return response
- def create_tables_if_not_exists():
- regions = 'CREATE TABLE IF NOT EXISTS regions (region_id INT PRIMARY KEY,region_short_name VARCHAR(15),region_long_name VARCHAR(15));'
- excute_sql(regions)
- operating_systems = 'CREATE TABLE IF NOT EXISTS operating_systems (operating_system_id INT PRIMARY KEY,operating_system_name VARCHAR(25));'
- excute_sql(operating_systems)
- vcpu_cores = 'CREATE TABLE IF NOT EXISTS vcpu_cores (vcpu_id INT PRIMARY KEY,core_count INT);'
- excute_sql(vcpu_cores)
- ec2_instances = 'CREATE TABLE IF NOT EXISTS ec2_instances (instance_id INT PRIMARY KEY,vcpu_id INT,memory INT,storage VARCHAR(20),network_performance DECIMAL(10, 5),operating_system_id INT,instance_name VARCHAR(15),FOREIGN KEY (vcpu_id) REFERENCES vcpu_cores(vcpu_id),FOREIGN KEY (operating_system_id) REFERENCES operating_systems(operating_system_id));'
- excute_sql(ec2_instances)
- region_instances = 'CREATE TABLE IF NOT EXISTS region_instances (region_id INT,instance_id INT,price_per_hour DECIMAL(6, 4),FOREIGN KEY (region_id) REFERENCES regions(region_id),FOREIGN KEY (instance_id) REFERENCES ec2_instances(instance_id));'
- excute_sql(region_instances)
- return
- def save_data(data):
- # variables
- instance_name = data['Instance Name']
- memory = float(data['Memory'].replace(' GiB', ''))
- storage = data['Storage']
- network_performance = float(data['Network Performance'].replace(' Gigabit', ''))
- operating_system_name = data['Operating System']
- vcpu_cores_count = int(data['vCPU'])
- region_name = data['Location']
- price = float(data['Price'].replace('$', ''))
- # sql
- insert_region_sql = "INSERT INTO regions (region_long_name) VALUES (:region_name)"
- insert_os_sql = "INSERT INTO operating_systems (operating_system_name) VALUES (:os_name)"
- insert_vcpu_sql = "INSERT INTO vcpu_cores (core_count) VALUES (:core_count)"
- # parameters
- region_params = [{"name": "region_long_name", "value": {"stringValue": region_name}}]
- # {"name": "region_short_name", "value": {"stringValue": region_name}}]
- os_params = [{"name": "os_name", "value": {"stringValue": operating_system_name}}]
- vcpu_params = [{"name": "core_count", "value": {"longValue": vcpu_cores_count}}]
- # excute_sql
- excute_sql(insert_region_sql, region_params)
- excute_sql(insert_os_sql, os_params)
- excute_sql(insert_vcpu_sql, vcpu_params)
- # sql
- select_region_sql = "SELECT region_id FROM regions WHERE region_long_name = :region_name"
- select_os_sql = "SELECT operating_system_id FROM operating_systems WHERE operating_system_name = :os_name"
- select_vcpu_sql = "SELECT vcpu_id FROM vcpu_cores WHERE core_count = :core_count"
- # excute_sql
- region_id = excute_sql(select_region_sql, region_params)['records'][0][0]['longValue']
- operating_system_id = excute_sql(select_os_sql, os_params)['records'][0][0]['longValue']
- vcpu_id = excute_sql(select_vcpu_sql, vcpu_params)['records'][0][0]['longValue']
- # sql
- instance_data = (instance_name, vcpu_id, memory, storage, network_performance, operating_system_id)
- insert_instance_sql = "INSERT INTO ec2_instances (instance_name, vcpu_id, memory, storage, network_performance, operating_system_id) VALUES (:instance_name, :vcpu_id, :memory, :storage, :network_performance, :os_id)"
- # parameters
- instance_params = [
- {"name": "instance_name", "value": {"stringValue": instance_name}},
- {"name": "vcpu_id", "value": {"longValue": vcpu_id}},
- {"name": "memory", "value": {"doubleValue": memory}},
- {"name": "storage", "value": {"stringValue": storage}},
- {"name": "network_performance", "value": {"doubleValue": network_performance}},
- {"name": "os_id", "value": {"longValue": operating_system_id}}
- ]
- # excute_sql
- excute_sql(insert_instance_sql, instance_params)
- # sql
- instance_id = excute_sql("SELECT LAST_INSERT_ID()")['records'][0][0]['instance_id']
- insert_region_instance_sql = "INSERT INTO region_instances (region_id, instance_id, price_per_hour) VALUES (:region_id, :instance_id, :price_per_hour)"
- # parameters
- region_instance_params = [
- {"name": "region_id", "value": {"longValue": region_id}},
- {"name": "instance_id", "value": {"longValue": instance_id}},
- # {"name": "price_per_hour", "value": {"doubleValue": price_per_hour}}
- # price_per_hour ???
- ]
- # excute_sql
- excute_sql(insert_region_instance_sql, region_instance_params)
- return
- def main():
- create_tables_if_not_exists()
- # north_america_data = north_america()
- africa_data = africa()
- # asia_pacific_data = asia_pacific()
- # europe_data = europe()
- # middle_east_data = middle_east()
- # south_america_data = south_america()
- save_data(africa_data)
- # save_data(north_america_data)
- # save_data(asia_pacific_data)
- # save_data(europe_data)
- # save_data(middle_east_data)
- # save_data(south_america_data)
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement