· 2 years ago · Sep 26, 2023, 10:25 AM
1from venv import create
2import requests
3import json
4import boto3
5
6
7def get_data(url, region_name):
8 response = requests.get(url)
9 data_info = response.json()
10
11 if response.status_code == 200:
12 instances = []
13 region_data = data_info['regions'].get(region_name, {})
14
15 for instance_name, instance_attributes in region_data.items():
16 instance = {
17 'Instance Name': instance_name,
18 'Rate Code': instance_attributes.get('rateCode', ''),
19 'Price': instance_attributes.get('price', ''),
20 'Location': instance_attributes.get('Location', ''),
21 'Instance Family': instance_attributes.get('Instance Family', ''),
22 'vCPU': instance_attributes.get('vCPU', ''),
23 'Memory': instance_attributes.get('Memory', ''),
24 'Storage': instance_attributes.get('Storage', ''),
25 'Network Performance': instance_attributes.get('Network Performance', ''),
26 'Operating System': instance_attributes.get('Operating System', ''),
27 'Pre Installed S/W': instance_attributes.get('Pre Installed S/W', ''),
28 'License Model': instance_attributes.get('License Model', ''),
29 }
30 instances.append(instance)
31
32 return instances
33 else:
34 return None
35
36
37def north_america():
38 north_america_urls = [
39 ["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"],
40 ["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"],
41 ["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"],
42 ["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"],
43 ["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"],
44 ["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"]
45 ]
46
47 north_america = []
48 for region_info in north_america_urls:
49 region = region_info[0]
50 url = region_info[1]
51 data = get_data(url, region)
52 north_america.append(data)
53
54 return north_america
55
56
57def africa():
58 africa_urls = [
59 ["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"]
60 ]
61
62 africa = []
63 for region_info in africa_urls:
64 region = region_info[0]
65 url = region_info[1]
66 data = get_data(url, region)
67 africa.append(data)
68
69 return africa
70
71
72def asia_pacific():
73 asia_pacific = [
74 ["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"],
75 ["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"],
76 ["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"],
77 ["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"],
78 ["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"],
79 ["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"],
80 ["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"],
81 ["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"],
82 ["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"],
83 ["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"]
84 ]
85
86 asia_pacific = []
87 for region_info in asia_pacific:
88 region = region_info[0]
89 url = region_info[1]
90 data = get_data(url, region)
91 asia_pacific.append(data)
92
93 return asia_pacific
94
95
96def europe():
97 europe = [
98 ["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"],
99 ["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"],
100 ["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"],
101 ["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"],
102 ["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"],
103 ["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"],
104 ["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"],
105 ["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"]
106 ]
107
108 europe = []
109 for region_info in europe:
110 region = region_info[0]
111 url = region_info[1]
112 data = get_data(url, region)
113 europe.append(data)
114
115 return europe
116
117
118def middle_east():
119 middle_east = [
120 ["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"],
121 ["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"]
122 ]
123
124 middle_east = []
125 for region_info in middle_east:
126 region = region_info[0]
127 url = region_info[1]
128 data = get_data(url, region)
129 middle_east.append(data)
130
131 return middle_east
132
133
134def south_america():
135 south_america = [
136 ["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"]
137 ]
138
139 south_america = []
140 for region_info in south_america:
141 region = region_info[0]
142 url = region_info[1]
143 data = get_data(url, region)
144 south_america.append(data)
145
146 return south_america
147
148
149def excute_sql(sql):
150 response = rds_client.execute_statement(
151 secretArn=db_credentials_secrets_store_arn,
152 database=database_name,
153 resourceArn=db_cluster_arn,
154 sql=sql
155 )
156 return response
157
158
159def create_tables_if_not_exists():
160
161 regions = 'CREATE TABLE IF NOT EXISTS regions (region_id INT PRIMARY KEY,region_short_name VARCHAR(15),region_long_name VARCHAR(15));'
162 excute_sql(regions)
163
164 operating_systems = 'CREATE TABLE IF NOT EXISTS operating_systems (operating_system_id INT PRIMARY KEY,operating_system_name VARCHAR(25));'
165 excute_sql(operating_systems)
166
167 vcpu_cores = 'CREATE TABLE IF NOT EXISTS vcpu_cores (vcpu_id INT PRIMARY KEY,core_count INT);'
168 excute_sql(vcpu_cores)
169
170 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));'
171 excute_sql(ec2_instances)
172
173 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));'
174 excute_sql(region_instances)
175
176 return
177
178
179def main():
180 create_tables_if_not_exists()
181 # north_america_data = north_america()
182 # africa_data = africa()
183 # asia_pacific_data = asia_pacific()
184 # europe_data = europe()
185 # middle_east_data = middle_east()
186 # south_america_data = south_america()
187
188 # save_africa_data(africa_data)
189 # save_north_america_data(north_america_data)
190 # save_asia_pacific_data(asia_pacific_data)
191 # save_europe_data(europe_data)
192 # save_middle_east_data(middle_east_data)
193 # save_south_america_data(south_america_data)
194
195
196main()
197