gpt4 book ai didi

python-3.x - 使用 boto3 获取给定 EC2 实例类型的当前价格

转载 作者:行者123 更新时间:2023-12-03 15:06:23 27 4
gpt4 key购买 nike

既然 AWS 有了定价 API,那么如何使用 Boto3 获取给定 的当前每小时价格?点播 EC2 实例类型 (例如 t2.micro),地区 (例如 eu-west-1)和 操作系统 (例如Linux)?我只想要价格回来。根据我的理解,拥有这四条信息应该足以过滤到一个单一的结果。

但是,我见过的所有示例都从 API 获取大量数据列表,这些数据必须进行后处理才能获得我想要的数据。我想在 API 端过滤数据,然后再返回。

最佳答案

这是我最终得到的解决方案。使用 Boto3 自己的定价 API 和实例类型、区域和操作系统的过滤器。 API仍然返回大量信息,所以我需要做一些后处理。

import boto3
import json
from pkg_resources import resource_filename

# Search product filter
FLT = '[{{"Field": "tenancy", "Value": "shared", "Type": "TERM_MATCH"}},'\
'{{"Field": "operatingSystem", "Value": "{o}", "Type": "TERM_MATCH"}},'\
'{{"Field": "preInstalledSw", "Value": "NA", "Type": "TERM_MATCH"}},'\
'{{"Field": "instanceType", "Value": "{t}", "Type": "TERM_MATCH"}},'\
'{{"Field": "location", "Value": "{r}", "Type": "TERM_MATCH"}},'\
'{{"Field": "capacitystatus", "Value": "Used", "Type": "TERM_MATCH"}}]'


# Get current AWS price for an on-demand instance
def get_price(region, instance, os):
f = FLT.format(r=region, t=instance, o=os)
data = client.get_products(ServiceCode='AmazonEC2', Filters=json.loads(f))
od = json.loads(data['PriceList'][0])['terms']['OnDemand']
id1 = list(od)[0]
id2 = list(od[id1]['priceDimensions'])[0]
return od[id1]['priceDimensions'][id2]['pricePerUnit']['USD']

# Translate region code to region name
def get_region_name(region_code):
default_region = 'EU (Ireland)'
endpoint_file = resource_filename('botocore', 'data/endpoints.json')
try:
with open(endpoint_file, 'r') as f:
data = json.load(f)
return data['partitions'][0]['regions'][region_code]['description']
except IOError:
return default_region


# Use AWS Pricing API at US-East-1
client = boto3.client('pricing', region_name='us-east-1')

# Get current price for a given instance, region and os
price = get_price(get_region_name('eu-west-1'), 'c5.xlarge', 'Linux')
print(price)

此示例输出 0.1920000000 (以美元计的每小时价格)相当快。但任何进一步的优化确实会受到赞赏。

关于python-3.x - 使用 boto3 获取给定 EC2 实例类型的当前价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com