您可以编写一些代码来计算,没有直接的 API 可用于通过实例 id 计算。
你可以做的是结合各种 API 调用:
- 您可以使用DescribeServices
,您可以获得所有服务中的所有
attributes,或者如果您想拥有一个特定的服务,您可以提供名称。 Boto3 致电describe_services
返回一项服务的元数据或所有服务的元数据列表
response = client.describe_services(
FormatVersion='aws_v1',
MaxResults=1,
ServiceCode='AmazonEC2',
)
以上调用为您提供了您想要为下一步创建过滤器的必要属性
{
'FormatVersion': 'aws_v1',
'NextToken': 'abcdefg123',
'Services': [
{
'AttributeNames': [
'volumeType',
'maxIopsvolume',
'instanceCapacity10xlarge',
'locationType',
'operation',
],
'ServiceCode': 'AmazonEC2',
},
],
'ResponseMetadata': {
'...': '...',
},
}
- 那么你需要使用GetAttributeValues来确定属性的可能值。 Boto3 致电get_attribute_values
response = client.get_attribute_values(
AttributeName='volumeType',
MaxResults=2,
ServiceCode='AmazonEC2',
)
print(response)
{
'AttributeValues': [
{
'Value': 'Throughput Optimized HDD',
},
{
'Value': 'Provisioned IOPS',
},
],
'NextToken': '',
'ResponseMetadata': {
'...': '...',
},
}
- 最后,根据前面步骤中收集的属性,您可以为get_producs 构建过滤器
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"}}]'
data = client.get_products(ServiceCode='AmazonEC2', Filters=json.loads(f))
- 根据实例开始时间确定实例价格后,您只需进行简单的乘法运算即可获得总成本。
Use boto3 to price for given EC2 instance type
get ec2 pricing programmatically?