是否有API可通过ResourceID获取AWS特定资源的总成本?
如何在AWS Cost Explorer中按ResourceID查询资源消耗总成本
我来帮你梳理下解决这个问题的思路和具体步骤,之前我也碰到过类似的需求:
为什么直接用ResourceID查询会有问题?
AWS Cost Explorer的默认维度里,Resource ID并不是所有AWS服务都支持的原生维度,部分服务的成本数据不会自动将Resource ID关联到Cost Explorer的可查询维度中。另外,你查看的Java SDK文档里,可能没注意到GetCostAndUsage API的分组维度配置项。
具体解决方法
1. 使用Cost Explorer API的GetCostAndUsage,指定RESOURCE_ID作为分组维度
如果你的目标服务支持Resource ID维度(比如EC2、S3、RDS等常见服务),可以直接通过Java SDK调用GetCostAndUsage时,将RESOURCE_ID设置为分组维度,同时指定你要过滤的ResourceID值。
示例Java代码片段:
import software.amazon.awssdk.services.costexplorer.CostExplorerClient; import software.amazon.awssdk.services.costexplorer.model.*; import java.time.LocalDate; public class CostByResourceId { public static void main(String[] args) { try (CostExplorerClient costExplorerClient = CostExplorerClient.create()) { // 设置时间范围(示例为最近30天) DateInterval dateInterval = DateInterval.builder() .start(LocalDate.now().minusDays(30).toString()) .end(LocalDate.now().toString()) .build(); // 指定分组维度为RESOURCE_ID GroupBy groupBy = GroupBy.builder() .type(GroupType.DIMENSION) .key("RESOURCE_ID") .build(); // 设置过滤条件,指定目标ResourceID Expression filter = Expression.builder() .dimensions(DimensionValues.builder() .key("RESOURCE_ID") .values("your-target-resource-id") .build()) .build(); // 构造请求,指定要获取的成本指标 GetCostAndUsageRequest request = GetCostAndUsageRequest.builder() .timePeriod(dateInterval) .metrics("BLENDED_COST", "UNBLENDED_COST") // 可按需选择成本指标 .groupBy(groupBy) .filter(filter) .build(); // 发送请求并处理结果 GetCostAndUsageResponse response = costExplorerClient.getCostAndUsage(request); response.resultsByTime().forEach(result -> { result.groups().forEach(group -> { System.out.println("Resource ID: " + group.keys().get(0)); System.out.println("Blended Cost: " + group.metrics().get("BLENDED_COST").amount() + " " + group.metrics().get("BLENDED_COST").unit()); }); }); } catch (Exception e) { e.printStackTrace(); } } }
2. 若服务不支持原生ResourceID维度,启用成本分配标签
如果你的目标服务不支持将ResourceID作为原生维度,可以通过以下步骤解决:
- 给目标资源添加自定义标签,比如
ResourceID,值设置为资源的实际Resource ID(部分AWS服务会自动添加aws:resource-id这类系统标签,你可以直接复用)。 - 登录AWS控制台,进入账单与成本管理 > 成本分配标签,启用你添加的自定义标签或系统标签(比如
aws:resource-id)。 - 等待24-48小时让标签数据同步到Cost Explorer,之后就可以在
GetCostAndUsageAPI中通过标签维度来过滤和分组,查询对应ResourceID的成本。
3. 注意事项
- 数据延迟:Cost Explorer的成本数据通常有24-48小时的延迟,不要查询最近24小时内的实时数据。
- 服务兼容性:部分AWS服务(比如Lambda、CloudFront)的ResourceID可能无法直接通过原生维度查询,必须依赖成本分配标签。
内容的提问来源于stack exchange,提问作者ksa
相关产品推荐
相关产品推荐

