我正在尝试通过boto3使用Cost Explorer API。我正在尝试获取EC2快照的成本。这些快照具有与之关联的自定义标签。我要检索的是具有特定标签的快照的成本。
我写了以下脚本:
import boto3
client = boto3.client('ce')
response = client.get_cost_and_usage(
TimePeriod={
'Start': '2019-01-20',
'End': '2019-01-24'
},
Metrics=['BLENDED_COST','USAGE_QUANTITY','UNBLENDED_COST'],
Granularity='MONTHLY',
Filter={
'Dimensions': {
'Key':'USAGE_TYPE_GROUP',
'Values': ['EC2: EBS - Snapshots']
}
)
这给了我费用。但这是快照使用的总成本,即所有卷的总成本。有什么方法可以根据快照上的标签进行过滤吗?
我尝试添加休闲过滤器:
Filter={
'And': [{
'Dimensions': {
'Key':'USAGE_TYPE_GROUP',
'Values': ['EC2: EBS - Snapshots']
}}, #Dimensions end
{'Tags':{
'Key': 'test',
'Values': ['aj']
} # Tags ed
} ] }# Filter ends
我已在其中添加了该标签的1个快照。我检查了日期范围,并且快照是在该时间范围内创建的,并且仍然可用。我也尝试将粒度更改为DAILY
。
但这总是显示0费用。
答案 0 :(得分:2)
要使用标签查询快照或什至其他服务,您需要在结算菜单中将其激活。 请参考链接以激活您需要查询的标签:
https://console.aws.amazon.com/billing/home?region=us-east-1#/preferences/tags
注意:只有组织中的主帐户和非组织成员的单个帐户可以访问成本分配标签。
希望对您有帮助!
答案 1 :(得分:1)
'Tags'
添加到过滤器中,如下所示:
response = client.get_cost_and_usage(
TimePeriod={
'Start': '2019-01-10',
'End': '2019-01-15'
},
Metrics=['BLENDED_COST','USAGE_QUANTITY','UNBLENDED_COST'],
Granularity='MONTHLY',
Filter={
'Dimensions': {
'Key':'USAGE_TYPE',
'Values': ['APN1-EBS:SnapshotUsage']
},
'Tags': {
'Key': 'keyName',
'Values': [
'keyValue',
]
}
}
)
您可以在boto3 cost explorer API reference中找到确切的用法。
您还可以按如下标记标签进行分组:
Filter={
'Dimensions': {
'Key':'USAGE_TYPE',
'Values': ['APN1-EBS:SnapshotUsage']
}
},
GroupBy=[
{
'Type': 'DIMENSION'|'TAG',
'Key': 'string'
},
],
它不会过滤掉标签,但是会按标签键将返回的数据分组。这将返回与标签键匹配的所有标签值,因此它可能太宽泛,但是您可以使用它来解决任何其他问题。
我确认您的标记值和键都匹配。