You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有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,之后就可以在GetCostAndUsage API中通过标签维度来过滤和分组,查询对应ResourceID的成本。

3. 注意事项

  • 数据延迟:Cost Explorer的成本数据通常有24-48小时的延迟,不要查询最近24小时内的实时数据。
  • 服务兼容性:部分AWS服务(比如Lambda、CloudFront)的ResourceID可能无法直接通过原生维度查询,必须依赖成本分配标签。

内容的提问来源于stack exchange,提问作者ksa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:15:00