Как получить информацию о ценах экземпляров AmazonEC2 для разных регионов, используя boto3 в python

Используя API оптовых цен Aws , я могу загрузить JSON только для одного региона, поэтому я ищу информацию о ценах для всех регионов программно с использованием Python.

Заранее спасибо.

Всего 2 ответа


Так же, как указано в документах :

import boto3

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

)

Вам просто нужно иметь env var с нужным AWS_DEFAULT_REGION : AWS_DEFAULT_REGION

Или вы можете установить регион на самом клиенте:

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

Без использования 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)

Приведенный ниже код загрузит сведения о ценах экземпляров по запросу и зарезервированных терминов для разных регионов и сохранит их в моей локальной системе.

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:Officeindex'+region+".json", 'wb').write(response.content)
    print(datetime.datetime.now())

Есть идеи?

10000