咨询:如何获取AWS 6个月成本使用数据中的缺失字段?
解决方案
1. 优化get_cost_and_usage API调用参数
虽然get_cost_and_usage默认返回字段有限,但可通过指定**分组维度(GroupBy)和附加指标(Metrics)**获取更多所需字段:
UsageAccountId:通过分组维度LINKED_ACCOUNT获取ProductCode:通过分组维度PRODUCT_CODE获取SKU:通过分组维度SKU获取BundledDiscount:需在Metrics中指定BUNDLED_DISCOUNT(注意部分服务可能不支持该指标)Unit:可通过分组维度USAGE_TYPE关联解析
示例boto3调用代码:
import boto3 client = boto3.client('ce') response = client.get_cost_and_usage( TimePeriod={ 'Start': '2024-01-01', 'End': '2024-07-01' }, Granularity='DAILY', Metrics=['BlendedCost', 'UnblendedCost', 'BundledDiscount'], GroupBy=[ {'Type': 'DIMENSION', 'Key': 'LINKED_ACCOUNT'}, {'Type': 'DIMENSION', 'Key': 'PRODUCT_CODE'}, {'Type': 'DIMENSION', 'Key': 'SKU'}, {'Type': 'DIMENSION', 'Key': 'SERVICE'}, {'Type': 'DIMENSION', 'Key': 'LOCATION'}, {'Type': 'DIMENSION', 'Key': 'USAGE_TYPE'} ] )
注意:ResourceId无法通过get_cost_and_usage直接获取,该字段仅在GetCostAndUsageWithResources或Cost and Usage Reports(CUR)中提供。
2. 使用Cost and Usage Reports(CUR)+ Athena 查询(推荐)
这是获取全量成本数据(含所有所需字段)最可靠的方式,支持长期历史数据查询:
- 创建CUR报告:在AWS控制台Cost Management模块中创建CUR,选择包含全量资源维度的报告格式(推荐Parquet,查询效率更高),设置定期将报告推送到指定S3存储桶。
- 配置Athena表:使用AWS提供的自动脚本或手动在Athena中创建指向S3 CUR文件的外部表,表结构会包含你需要的所有字段(
UsageAccountId,ResourceId,ProductName等)。 - 编写SQL查询:直接在Athena中执行SQL获取6个月历史数据,示例查询:
SELECT line_item_usage_account_id AS UsageAccountId, line_item_blended_cost AS BlendedCost, line_item_unblended_cost AS UnblendedCost, line_item_usage_start_date AS UsageStartDate, discount_bundled_discount AS BundledDiscount, product_product_code AS ProductCode, product_product_name AS ProductName, line_item_resource_id AS ResourceId, product_service AS Servicename, product_sku AS SKU, line_item_unit AS Unit, product_location AS Location FROM "cur_db"."cur_table" WHERE line_item_usage_start_date >= DATE '2024-01-01' AND line_item_usage_start_date < DATE '2024-07-01' GROUP BY line_item_usage_account_id, line_item_blended_cost, line_item_unblended_cost, line_item_usage_start_date, discount_bundled_discount, product_product_code, product_product_name, line_item_resource_id, product_service, product_sku, line_item_unit, product_location
这种方式不仅能获取所有所需字段,还支持复杂的过滤、聚合操作,适配长期数据需求。
3. 组合API调用(折中方案)
若不想依赖CUR,可结合get_cost_and_usage与其他AWS API补充缺失字段:
- 对于
ResourceId:先通过get_cost_and_usage获取SKU、ProductCode等信息,再调用对应服务的资源查询API(如EC2的describe_instances),通过标签或属性关联资源ID。但此方式仅适用于特定服务,维护成本较高。
总结
若需全量字段+长期历史数据,CUR + Athena为最优选择;若仅需补充部分字段且数据量不大,可优化get_cost_and_usage参数;组合API调用仅适合特定场景。
内容的提问来源于stack exchange,提问作者theCoderfidato
相关产品推荐
相关产品推荐

