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

能否用GetCostAndUsageWithResources查单个Lambda成本?若不能该如何操作?

单个Lambda函数成本查询问题

我想要查询单个Lambda函数的成本,但GetCostAndUsageWithResources的官方文档未明确说明筛选RESOURCE_ID维度时可使用哪些服务的ARN或ID。我使用boto3的get_cost_and_usage_with_resources接口编写了如下代码,却返回成本为0的结果:

import boto3

ce_client = boto3.client("ce")

response = ce_client.get_cost_and_usage_with_resources(
    TimePeriod={"Start": <some-start-date>, "End": <some-end-date>},
    Granularity="DAILY",
    Filter={
        "Dimensions": {
            "Key": "RESOURCE_ID",
            "Values": [<my-lambda-arn>]
        }
    },
    Metrics=["UnblendedCost"],
)

print(response)

现咨询两个问题:

  1. 是否可以使用GetCostAndUsageWithResources查询单个Lambda函数的成本?
  2. 若无法实现,如何通过函数名称或ARN查询单个Lambda函数的成本?

问题解答

1. 是否可以用GetCostAndUsageWithResources查询单个Lambda成本?

可以,但你当前代码返回0的核心问题是Lambda的RESOURCE_ID维度值不是完整ARN,而是特定格式的标识符:

  • 无版本/别名的Lambda函数:function:<你的函数名称>
  • 带版本/别名的Lambda函数:function:<你的函数名称>:<版本号/别名>

用完整ARN作为筛选值会匹配不到任何资源,所以返回成本为0。另外注意Cost Explorer的数据存在24-48小时的延迟,若查询的是最近一天的费用,也可能因为数据未同步导致返回0。

2. 正确查询单个Lambda函数成本的方法

方法一:修正GetCostAndUsageWithResources的筛选条件

把RESOURCE_ID的取值换成Lambda的资源标识符格式,示例代码如下:

import boto3

ce_client = boto3.client("ce")

# 替换成你的Lambda函数标识符,比如function:my-test-lambda
lambda_resource_id = "function:<你的Lambda函数名>"

response = ce_client.get_cost_and_usage_with_resources(
    TimePeriod={"Start": "2024-01-01", "End": "2024-01-02"},
    Granularity="DAILY",
    Filter={
        "Dimensions": {
            "Key": "RESOURCE_ID",
            "Values": [lambda_resource_id]
        }
    },
    Metrics=["UnblendedCost"],
)

print(response)

方法二:使用GetCostAndUsage接口配合多维度筛选

如果需要更灵活的筛选(比如按函数名模糊匹配、按标签筛选),可以用GetCostAndUsage接口,结合SERVICE和RESOURCE_ID维度做组合筛选:

import boto3

ce_client = boto3.client("ce")

response = ce_client.get_cost_and_usage(
    TimePeriod={"Start": "2024-01-01", "End": "2024-01-02"},
    Granularity="DAILY",
    Filter={
        "And": [
            {
                "Dimensions": {
                    "Key": "SERVICE",
                    "Values": ["AWS Lambda"]
                }
            },
            {
                "Dimensions": {
                    "Key": "RESOURCE_ID",
                    "Values": ["function:<你的Lambda函数名>"]
                }
            }
        ]
    },
    Metrics=["UnblendedCost"],
    GroupBy=[
        {"Type": "DIMENSION", "Key": "RESOURCE_ID"}
    ]
)

print(response)

额外方案:通过标签筛选

如果你的Lambda函数打了自定义标签(比如FunctionName: my-test-lambda),也可以直接按标签维度筛选,避免记忆资源ID格式:

import boto3

ce_client = boto3.client("ce")

response = ce_client.get_cost_and_usage(
    TimePeriod={"Start": "2024-01-01", "End": "2024-01-02"},
    Granularity="DAILY",
    Filter={
        "Tags": {
            "Key": "FunctionName",
            "Values": ["<你的Lambda函数名>"]
        }
    },
    Metrics=["UnblendedCost"],
)

print(response)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:54:55