Korzystając z interfejsu API cen zbiorczych Aws , mogę pobrać JSON tylko dla jednego regionu, więc szukam szczegółów cenowych dla wszystkich regionów w sposób programowy za pomocą Pythona.

Z góry dziękuję.

0
Dhandapani Sudhakar 26 marzec 2020, 13:01

2 odpowiedzi

Najlepsza odpowiedź

Tak jak podano w dokumentach:

import boto3

client = boto3.client('pricing')
response = client.describe_services(
ServiceCode='string',
FormatVersion='string',
NextToken='string',
MaxResults=123

)

Wystarczy mieć zmienną env z wybranym regionem: AWS_DEFAULT_REGION

Lub możesz ustawić region na samym kliencie:

client = boto3.client('pricing', region_name='us-west-2')

Bez używania boto:

my_region = "us-west-1"

url = f"https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/{my_region}/index.json"

result = requests.get(url)
1
Stargazer 26 marzec 2020, 10:33

Poniższy kod pobierze szczegóły cenowe dotyczące instancji terminów On-Demand i Reserved dla różnych regionów i zapisze w moim systemie lokalnym

import boto3
from boto3.session import Session
import requests
import json
import datetime


s = Session()
ec2AvailableRegions = []

def getAvailableRegionsForAService(serviceName):
    try:
        if serviceName == "ec2":
            global ec2AvailableRegions
            ec2AvailableRegions = s.get_available_regions(serviceName)
    except Exception as ex:
        print(ex)
        print("Exception occured while fetching the available region for the service "+serviceName)

getAvailableRegionsForAService('ec2')

print("AmazonEC2 Available Regions : "+str(ec2AvailableRegions))


for region in ec2AvailableRegions:
    url = "https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/{0}/index.json"
    url = url.format(region)
    print(region)
    print(url)
    print(datetime.datetime.now())
    response = requests.get(url)
    open('A:\Office\index'+region+".json", 'wb').write(response.content)
    print(datetime.datetime.now())
0
Dhandapani Sudhakar 27 marzec 2020, 06:45