如何使用Python调用AWS CostExplorer API查询指定标签对应的成本
AWS CostExplorer API返回费用为0的排查方案
- 指标选择错误:你当前请求的
Metrics参数取值为NormalizedUsageAmount,该指标代表标准化资源使用量,不是实际消费金额。如果需要查询账单费用,应该替换为UnblendedCost(标准未摊销成本,适合常规按实际出账金额核算的场景)或者AmortizedCost(摊销成本,适合包含预留实例、Savings Plans分摊的场景)。 - 成本分配标签未激活:AWS默认不会自动将资源标签同步到Cost Explorer的成本统计维度,你需要手动完成以下配置:
- 登录AWS控制台,进入「Billing and Cost Management」页面
- 左侧菜单选择「成本分配标签」
- 在用户定义的成本分配标签列表中找到
client_id,勾选后点击激活
注意:标签激活前产生的历史费用不会自动关联该标签,无法通过标签过滤查询到,只有激活后新产生的费用才会携带标签信息。
- 部分产品标签同步配置缺失:你用到的LightSail产品默认不会自动同步资源标签到Cost Explorer,需要单独在LightSail控制台开启标签成本分配功能,才能让LightSail的费用和自定义标签关联。
- 组织账户权限配置问题:如果你使用的是AWS Organizations的成员账户,需要确认主账户已经开启了成本数据共享权限,允许成员账户访问Cost Explorer的费用明细。
- 代码语法瑕疵:你贴出的代码中
aws_secret_access_key = os.getenv('aws_secret_access_key') or末尾多余的or可能会导致变量赋值错误,建议先修正该语法问题再测试。
修正后参考代码
import os import json import boto3 region_name = os.getenv('region_name') aws_access_key_id = os.getenv('aws_access_key_id') aws_secret_access_key = os.getenv('aws_secret_access_key') client = boto3.client('ce', region_name=region_name, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key) response = client.get_cost_and_usage( TimePeriod={ 'Start': '2021-01-01', 'End': '2021-10-22' }, Filter={ 'Tags': { 'Key': 'client_id', 'Values': ['1234567890'], 'MatchOptions': ['EQUALS'] } }, Granularity='MONTHLY', Metrics=[ 'UnblendedCost', ] ) print(json.dumps(response, indent=4, sort_keys=True))
内容的提问来源于stack exchange,提问作者Johnny John Boy
相关产品推荐
相关产品推荐

