我正在尝试通过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张.我检查了日期范围,并且快照是在该时间范围内创建的,并且仍然可用.我也尝试将粒度更改为“每日”.
但这总是显示0成本.
解决方法:
可以在过滤器中添加“标签”,如下所示:
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'
},
],
它不会过滤掉标签,但是会按标签键将返回的数据分组.这将返回与标签键匹配的所有标签值,因此它可能太宽泛,但是您可以使用它来解决任何其他问题.
我确认您的标记值和键都匹配.