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

如何使用Lambda函数获取AWS前一日账单数据?

如何用AWS Lambda获取AWS账户前一日的账单信息

嘿,我看你已经有了基础的Lambda代码框架,但目前的代码只是列出账单相关的指标,还没法直接拿到前一日的具体账单数据。我来帮你调整完善,让它精准获取前一天的预估费用:

第一步:确认前置条件

  • 首先要确保你的AWS账户已经开启了预估费用指标:默认情况下这个指标是关闭的,你需要去CloudWatch控制台,在「账单」指标里开启它,不然拉不到数据。
  • 给执行Lambda的IAM角色添加权限:需要允许cloudwatch:GetMetricStatistics操作,最简单的方式是给角色附加CloudWatchReadOnlyAccess托管策略,或者自定义一个只包含该权限的策略。

第二步:调整后的完整Lambda代码

下面是修改后的代码,它会精准获取前一天的估算账单数据:

exports.handler = async (event) => {
    // 引入AWS SDK
    const AWS = require('aws-sdk');
    // 初始化CloudWatch客户端
    const cloudwatch = new AWS.CloudWatch();
    
    // 计算前一日的时间范围:当天0点到前一天0点
    const endTime = new Date();
    endTime.setHours(0, 0, 0, 0); // 今天0点
    const startTime = new Date(endTime);
    startTime.setDate(startTime.getDate() - 1); // 昨天0点
    
    const params = {
        MetricName: 'EstimatedCharges',
        Namespace: 'AWS/Billing',
        StartTime: startTime,
        EndTime: endTime,
        Period: 86400, // 一天的秒数(24*60*60)
        Statistics: ['Maximum'], // 取一天内的最大预估费用,代表当日总费用
        Dimensions: [
            {
                Name: 'Currency',
                Value: 'USD' // 可以改成你账户的结算货币,比如CNY
            }
        ]
    };
    
    try {
        // 获取指标数据
        const data = await cloudwatch.getMetricStatistics(params).promise();
        // 处理返回结果,提取费用值
        if (data.Datapoints.length > 0) {
            const dailyCost = data.Datapoints[0].Maximum;
            console.log(`前一日预估账单费用:${dailyCost} ${params.Dimensions[0].Value}`);
            return {
                statusCode: 200,
                body: JSON.stringify({
                    date: startTime.toISOString().split('T')[0],
                    estimatedCost: dailyCost,
                    currency: params.Dimensions[0].Value
                })
            };
        } else {
            console.log("未获取到前一日的账单数据,请确认指标已开启");
            return {
                statusCode: 404,
                body: JSON.stringify({ message: "未找到前一日账单数据" })
            };
        }
    } catch (err) {
        console.error("获取账单数据出错:", err);
        return {
            statusCode: 500,
            body: JSON.stringify({ error: err.message })
        };
    }
};

代码关键部分解释

  • 时间范围计算:通过Date对象算出昨天0点到今天0点的时间段,确保只获取前一天的完整数据
  • Period设置为86400:代表按天聚合数据,符合我们的需求
  • Statistics选Maximum:因为EstimatedCharges是随时间递增的,一天内的最大值就是当日的总预估费用
  • Dimensions指定货币:要和你账户的结算货币一致,不然可能拿不到数据

测试和验证

把代码部署到Lambda后,直接触发测试,就能在日志里看到前一天的预估费用,同时返回的响应里也会包含结构化的费用数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:18:33