我有一个python脚本来获取上个月每个服务的成本,但我想要使用为该资源提到的标签来计算每个资源的成本。例如,我已经获得了RDS服务的成本,正在使用两个数据库实例,所以我想获得两个数据库示例的单独成本。我有两个数据库实例的不同标签
标记:
第一个数据库实例-->关键字:名称值:rds1
第二个数据库实例-->关键字:名称值:rds2
我的输出应该是,资源的标签及其成本
示例-->rds1-15$
rds2 - 10$
有人能帮我做到这一点吗?
我已经附上了基于服务的费用清单
基于服务的成本输出
类似的工作,你可以在这里找到Boto3 get_cost_and_userage filter基于标签获得零成本
请确保您列出的标签是正确的。
除此之外,
- 您可以看到用户在您的帐户中创建的所有标签,或者它是由AWS管理的。在这里https://us-east-1.console.aws.amazon.com/billing/home#/tags.
- 使用boto3成本资源管理器客户端,可以使用函数list_cost_allocation_tags来获取成本分配标记的列表
import boto3
start_date = '2022-07-01'
end_date = '2022-08-30'
client = boto3.client('ce')
tags_response = None
try:
tags_response = client.list_cost_allocation_tags(
Status='Inactive', # 'Active'|'Inactive',
# TagKeys=[
# 'Key',
# ],
Type='UserDefined', # 'AWSGenerated'|'UserDefined',
# NextToken='string',
# MaxResults=100,
)
except Exception as e:
print(e)
cost_allocation_tags = tags_response['CostAllocationTags']
print(cost_allocation_tags)
print("-"*5+' Input TagValues with comma separation '+"-"*5)
for cost_allocation_tag in cost_allocation_tags:
tag_key = cost_allocation_tag['TagKey']
tag_type = cost_allocation_tag['Type']
tag_status = cost_allocation_tag['Status']
tag_values = str(input(
f'TagKey: {tag_key}, Type: {tag_type}, Status: {tag_status} -> '))
if tag_values == "":
continue
tag_values_parsed = tag_values.strip().split(',')
if tag_values_parsed == []:
continue
cost_usage_response = None
try:
cost_usage_response = client.get_cost_and_usage(
TimePeriod={
'Start': start_date,
'End': end_date
},
Metrics=['AmortizedCost'],
Granularity='MONTHLY', # 'DAILY'|'MONTHLY'|'HOURLY',
Filter={
'Tags': {
'Key': tag_key,
'Values': tag_values_parsed,
'MatchOptions': [
'EQUALS' # 'EQUALS'|'ABSENT'|'STARTS_WITH'|'ENDS_WITH'|'CONTAINS'|'CASE_SENSITIVE'|'CASE_INSENSITIVE',
]
},
},
# GroupBy=[
# {
# 'Type': 'SERVICE', # 'DIMENSION'|'TAG'|'COST_CATEGORY', # AZ, INSTANCE_TYPE, LEGAL_ENTITY_NAME, INVOICING_ENTITY, LINKED_ACCOUNT, OPERATION, PLATFORM, PURCHASE_TYPE, SERVICE, TENANCY, RECORD_TYPE , and USAGE_TYPE
# 'Key': 'string',
# },
# ],
)
print(cost_usage_response)
except Exception as e:
print(e)