使用Boto3/AWS CLI按标签获取用户用量数据遇超时及无输出问题
问题排查步骤
1. 修正CLI命令的Filter格式
你的CLI命令中--filter参数格式错误,Cost Explorer的CLI过滤器必须使用JSON结构,而非键值对拼接。正确命令如下:
aws ce get-cost-and-usage \ --time-period Start=2023-05-01,End=2023-06-01 \ --granularity MONTHLY \ --metrics "BlendedCost" \ --filter '{"Tags": {"Key": "User", "Values": ["sample"], "MatchOptions": ["EQUALS"]}}'
错误的格式会导致CLI无法正确解析请求,进而出现卡顿超时。
2. 完善Boto3的Filter配置
虽然你的Boto3代码无报错,但建议显式补充MatchOptions字段(默认值为EQUALS,显式声明可避免潜在解析问题),修正后的Filter结构:
tag_filter = { 'Tags': { 'Key': 'User', 'Values': ['sample'], 'MatchOptions': ['EQUALS'] } }
3. 验证成本分配标签配置
Cost Explorer不会自动同步所有资源标签,必须在AWS Billing控制台开启对应标签的成本分配:
- 登录AWS Billing控制台,进入「成本分配标签」页面
- 找到
User标签,勾选并保存变更 - 等待24-48小时让AWS完成标签数据同步
未开启此配置时,即使资源带有标签,Cost Explorer也无法返回对应结果。
4. 检查IAM权限配置
确保执行脚本/CLI的IAM实体(用户/角色)拥有以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ce:GetCostAndUsage", "Resource": "*" } ] }
权限不足可能导致Boto3无输出(静默处理)或CLI请求超时(权限被拒但未正确提示)。
5. 确认标签关联资源与时间范围
- 核实存在带有
User=sample标签的AWS资源,且这些资源在指定时间范围内有实际费用产生 - 检查时间范围合法性:
End日期必须晚于Start日期,历史数据需确保已完成账单结算
6. 测试无过滤的基础请求
先执行不带标签过滤的请求,验证Cost Explorer服务是否正常响应:
Boto3测试代码
response = ce_client.get_cost_and_usage( TimePeriod={'Start': '2023-05-01', 'End': '2023-06-01'}, Granularity='MONTHLY', Metrics=['BlendedCost'] ) print(response)
CLI测试命令
aws ce get-cost-and-usage \ --time-period Start=2023-05-01,End=2023-06-01 \ --granularity MONTHLY \ --metrics "BlendedCost"
如果基础请求正常返回数据,说明问题出在标签过滤或标签配置环节;如果仍然无输出/超时,需检查网络连接、AWS区域配置(Cost Explorer为全局服务,客户端需使用us-east-1或正确的全局端点)。
内容的提问来源于stack exchange,提问作者anonym80808008
相关产品推荐
相关产品推荐

