AWS Budgets 完整实战:预算设置、告警通知、自动停机,避免天价账单(2026最新教程)

📅 · AWS 国际版实战教程 - ChengziCloud

一句话结论

Meta Description: AWS Budgets 预算告警完整教程:预算类型选择、阈值设置、SNS邮件/Slack告警、自动停机Lambda脚本、零成本监控 Dashboard,2026 最新实操避免 AWS 天价账单。

本文要点
  • 前言
  • 为什么必须设置 AWS Budgets:天价账单的真实案例
  • AWS Budgets 的 4 种预算类型:怎么选
  • 控制台实操:5 分钟创建第一个成本预算
  • 进阶:用 SNS + Lambda 实现多渠道告警和自动停机
  • Budgets Dashboard:一图看清所有预算状态
  • 结合 Cost Explorer 做成本归因
  • 5 个 Budgets 踩坑场景及解决方案

Meta Description: AWS Budgets 预算告警完整教程:预算类型选择、阈值设置、SNS邮件/Slack告警、自动停机Lambda脚本、零成本监控 Dashboard,2026 最新实操避免 AWS 天价账单。

关键词:AWS Budgets、AWS预算设置、AWS账单告警、AWS费用监控、AWS自动停机、AWS SNS告警、AWS费用优化

前言

先给结论:AWS Budgets 是防止天价账单的第一道防线——它免费提供每月 2 个自定义预算,配合 SNS 通知可以在费用超阈值时立即收到邮件/短信/Slack 告警,再叠加 Lambda 自动停机脚本,就能实现\"超预算自动关停资源\"的零人工干预。 决策口诀:\"新建账号先设预算再开资源,阈值分三级(50%/80%/100%),告警分两层(通知+自动行动),每月花 10 分钟检查一次 Budgets Dashboard。\" 本文基于 2026 年最新 AWS 控制台实操,手把手带你设置预算、配置多渠道告警、编写自动停机脚本,并给出 5 个真实踩坑场景的解决方案,让你在享受 AWS 服务的同时,再也不怕月底账单惊吓。

一、为什么必须设置 AWS Budgets:天价账单的真实案例

AWS 账单告警不是可选项,而是必选项。以下是最常见的天价账单触发场景:

场景未设告警的后果发生概率
EC2 实例忘记关停按需计费持续累积,$0.1/h 的实例一个月 $73高
数据传输流量超标跨区域/公网出流量 $0.09/GB,视频站一天可烧 $500+中
NAT Gateway 空转$0.045/h + $0.045/GB,24 小时空跑 $1.08/月,被攻击时飙到 $1000+中高
CloudWatch Logs 大量摄入$0.50/GB 摄入费,调试忘记关日志一天 $200中
Lambda 并发风暴死循环触发数万次调用,$0.20/百万次 + $0.000016/GB-秒低但致命
免费套餐到期未切换12 个月后自动转按需,t2.micro 从 $0 变成 $7.59/月高

关键数据:AWS 官方调查显示,70% 的云超支发生在\"忘记\"和\"不知道\"的情况下。设置 Budgets 告警的成本是零,但不设置的代价可能是一张 $5000+ 的账单。

二、AWS Budgets 的 4 种预算类型:怎么选

AWS Budgets 提供 4 种预算类型,适用于不同的监控需求:

预算类型监控对象适用场景免费额度
成本预算(Cost budget)月度/每日/累计花费最常用,监控总账单每月 2 个免费
使用量预算(Usage budget)特定服务的使用量(如 EC2 实例小时数)监控资源使用是否异常每月 2 个免费
Savings Plans 利用率预算SP 利用率低于阈值确保 SP 没买亏每月 2 个免费
Savings Plans 覆盖率预算SP 覆盖的用量占比监控 SP 是否覆盖了足够多的按需用量每月 2 个免费

免费额度说明:每个 AWS 账号每月前 2 个自定义预算完全免费(包含告警通知)。超过 2 个的预算按 $0.02/个/天计费,约 $0.60/月/个。建议将免费的 2 个预算分配给最重要的监控目标:1 个成本预算(监控总账单)+ 1 个使用量预算(监控最贵服务)。

三、控制台实操:5 分钟创建第一个成本预算

3.1 进入 Budgets 控制台

  1. 登录 AWS 管理控制台,搜索 Budgets 并进入
  2. 点击 Create budget(首次进入会看到 Welcome 页面,点击 Continue)

3.2 选择预算模板

AWS 提供两个快捷模板:

模板包含内容建议
Monthly cost budget月度成本预算 + 3 级阈值(80%/100%/实际超过)新手推荐,开箱即用
Daily cost budget每日成本预算 + 2 级阈值需要更细粒度监控时选

如果需要自定义,选择 Custom(自定义)。

3.3 配置预算参数

以最常见的月度成本预算为例:


预算名称:Monthly Total Cost Budget
预算类型:Cost
预算金额:$50(建议先设低,后续调高)
预算周期:Monthly
预算实例:Recurring(每月重复)

金额设置建议:

账号阶段建议预算金额理由
新号(免费套餐期内)$10~$25免费套餐覆盖大部分资源,少量付费控制在低位
免费套餐到期后$50~$100转为按需计费,留出缓冲
生产环境实际月均花费的 120%留 20% 波动空间,超过即告警

3.4 设置告警阈值

AWS Budgets 支持按实际值或预测值设置告警:

阈值类型含义推荐阈值
实际值(Actual)已花费金额达到阈值50%、80%、100%
预测值(Forecasted)按当前趋势预测月底花费将达到阈值80%、100%

推荐的三级告警配置:

级别阈值通知对象动作
一级(黄色预警)实际值 ≥ 50%邮件通知关注,准备排查
二级(橙色警告)实际值 ≥ 80%邮件 + 短信排查并关停非必要资源
三级(红色告警)实际值 ≥ 100%邮件 + 短信 + 自动停机立即处理,超支部分按需计费

3.5 配置通知渠道

点击 Configure alerts,添加告警通知:


告警名称:budget-50-percent
告警阈值:50%
通知方式:Email(输入接收邮箱)

如果需要更高级的通知(Slack、自动停机),需要配置 Amazon SNS Topic(见下一节)。

四、进阶:用 SNS + Lambda 实现多渠道告警和自动停机

4.1 创建 SNS Topic

SNS(Simple Notification Service)是 AWS 的消息分发中心,可以将告警同时推送到邮件、短信、Slack、Lambda 等多个终端:


// AWS CLI 创建 SNS Topic
aws sns create-topic --name budget-alerts

// 订阅邮件通知
aws sns subscribe --topic-arn arn:aws:sns:us-east-1:ACCOUNT_ID:budget-alerts \
  --protocol email \
  --notification-endpoint [email protected]

// 订阅短信通知(需要先验证手机号)
aws sns subscribe --topic-arn arn:aws:sns:us-east-1:ACCOUNT_ID:budget-alerts \
  --protocol sms \
  --notification-endpoint +86138xxxx0000

验证邮件订阅:AWS 会发送确认邮件,点击确认链接后订阅才生效。短信同理需要回复验证码。

4.2 创建自动停机 Lambda 函数

当预算超 100% 时,自动关停所有非关键 EC2 实例:


import boto3

def lambda_handler(event, context):
    """
    Budget 超支自动停机脚本
    触发条件:AWS Budgets 告警推送到 SNS,SNS 触发此 Lambda
    动作:停止所有带 'AutoStop=true' 标签的 EC2 实例
    """
    ec2 = boto3.client('ec2', region_name='us-east-1')
    
    response = ec2.describe_instances(
        Filters=[
            {'Name': 'instance-state-name', 'Values': ['running']},
            {'Name': 'tag:AutoStop', 'Values': ['true']}
        ]
    )
    
    instance_ids = []
    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            instance_ids.append(instance['InstanceId'])
    
    if instance_ids:
        ec2.stop_instances(InstanceIds=instance_ids)
        print(f"已停止 {len(instance_ids)} 个实例: {instance_ids}")
    else:
        print("没有需要停止的实例")
    
    return {
        'statusCode': 200,
        'body': f'Stopped {len(instance_ids)} instances'
    }

4.3 配置 SNS → Lambda 触发


// 1. 上传 Lambda 函数代码
zip function.zip lambda_budget_stop.py
aws lambda create-function \
  --function-name budget-auto-stop \
  --runtime python3.11 \
  --handler lambda_budget_stop.lambda_handler \
  --role arn:aws:iam::ACCOUNT_ID:role/lambda-budget-role \
  --zip-file fileb://function.zip

// 2. 给 Lambda 添加 SNS 触发
aws lambda add-permission \
  --function-name budget-auto-stop \
  --statement-id sns-budget-alert \
  --action lambda:InvokeFunction \
  --principal sns.amazonaws.com \
  --source-arn arn:aws:sns:us-east-1:ACCOUNT_ID:budget-alerts

aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:ACCOUNT_ID:budget-alerts \
  --protocol lambda \
  --notification-endpoint arn:aws:lambda:us-east-1:ACCOUNT_ID:function:budget-auto-stop

4.4 IAM 权限配置

Lambda 函数需要以下 IAM 策略:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:StopInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "*"
    }
  ]
}

五、Budgets Dashboard:一图看清所有预算状态

Budgets Dashboard 是一个集中查看所有预算执行情况的面板,位于 Budgets 控制台首页:

指标含义健康标准
Budget amount预算总额按实际需求设定
Actual spend当前实际花费< 预算额
Forecasted spend预测月底花费< 预算额
Budget statusGreen/Yellow/RedGreen = 正常,Yellow = 触发一级告警,Red = 超预算

每月必做检查清单:

  • [ ] Dashboard 显示所有预算状态为 Green
  • [ ] 无未读告警通知
  • [ ] 预测花费未超过预算的 80%
  • [ ] 各服务花费排名无异常(Cost Explorer 辅助查看)
  • [ ] 免费套餐用量未超限(Billing → Free tier usage)

六、结合 Cost Explorer 做成本归因

Budgets 告诉你\"花了多少\",Cost Explorer 告诉你\"花在哪里\"。两者配合使用效果最佳:

6.1 按服务查看花费


// CLI 查看过去 30 天各服务花费
aws ce get-cost-and-usage \
  --time-period Start=2026-07-25,End=2026-08-25 \
  --granularity MONTHLY \
  --metrics "BlendedCost" \
  --group-by Type=SERVICE

6.2 按标签归因


// 按项目标签查看花费
aws ce get-cost-and-usage \
  --time-period Start=2026-07-25,End=2026-08-25 \
  --granularity MONTHLY \
  --metrics "BlendedCost" \
  --group-by Type=TAG,Key=Project

6.3 设置 Cost Anomaly Detection

Cost Anomaly Detection 是 AWS 的 AI 异常检测服务,能自动发现花费异常波动:


// 创建异常检测监控
aws ce create-anomaly-detector \
  --anomaly-detector '{"DetectorName":"Monthly Spend Monitor","MonitorType":"DIMENSIONAL_VALUE","DimensionKey":"SERVICE","MatchOptions":["EQUALS"],"Values":["Amazon Elastic Compute Cloud - Compute"]}'
监控工具检测粒度优势局限
Budgets月度/每日简单直接,支持自动行动只看阈值,不看趋势
Cost Explorer月度/每日/小时多维度归因,可视化好无自动告警
Cost Anomaly Detection每日AI 自动发现异常需要 14 天学习期
Budgets + Lambda实时超预算自动停机需要编码能力

最佳实践:Budgets 设阈值告警 + Cost Explorer 做日常分析 + Cost Anomaly Detection 兜底异常,三者组合覆盖所有场景。

七、5 个 Budgets 踩坑场景及解决方案

坑 1:免费预算用完,第 3 个预算开始收费

现象:创建第 3 个预算后,账单出现 $0.60/月的 Budgets 费用。

原因:每个账号每月只有 2 个免费预算,超出部分按 $0.02/个/天收费。

解决:精简预算数量,用 1 个成本预算 + 1 个使用量预算覆盖核心监控。如果确实需要更多预算,接受额外费用或使用 Cost Explorer 报告替代部分 Budgets。

坑 2:告警阈值基于累计值而非当前月

现象:设置了 $100 的预算,月中就触发了 100% 告警,但实际花费只有 $50。

原因:预算周期选的是 Monthly 但阈值基于 Forecasted(预测值),AWS 预测月底会超 $100。

解决:检查阈值类型是 Actual 还是 Forecasted。如果想要实际花费触发,选择 Actual;如果想提前预警,保留 Forecasted 但理解它是预测值。

坑 3:多区域费用不汇总

现象:在 us-east-1 和 ap-southeast-1 都开了 EC2,Budgets 只显示一个区域的费用。

原因:Budgets 默认按当前区域过滤。

解决:创建预算时在 Filters 中移除区域过滤,或选择 All regions(所有区域)。全局成本监控是 Budgets 最常见的配置遗漏。

坑 4:SNS 订阅未确认导致告警丢失

现象:设置了告警但从未收到邮件通知。

原因:SNS 邮件订阅需要点击确认链接才能激活,未确认的订阅处于 Pending 状态,不会收到任何通知。

解决:在 SNS 控制台检查订阅状态。如果显示 Pending confirmation,去邮箱找确认邮件(可能在垃圾箱),点击确认链接。建议创建预算后立即发一条测试通知验证。

坑 5:Lambda 自动停机脚本停错实例

现象:自动停机脚本停掉了生产数据库的 EC2 实例,导致服务中断。

原因:Lambda 脚本没有区分生产/测试环境,停掉了所有运行中的实例。

解决:使用标签(Tag)区分实例。给允许自动停止的实例打上 AutoStop=true 标签,脚本只停带此标签的实例。同时建议设置 Lambda 并发限制为 1,防止重复触发。

八、完整成本防护体系:Budgets + 免费套餐 + SP 组合拳

将 Budgets 与其他成本优化工具组合,构建完整的防护体系:

阶段工具作用
注册期免费套餐12 个月免费使用 750+ 小时 EC2 等服务
日常监控Budgets($10~$50 阈值)超预算立即告警
异常检测Cost Anomaly DetectionAI 自动发现异常花费波动
成本归因Cost Explorer + 标签知道钱花在哪里
长期省钱Savings Plans / 预留实例承诺消费换折扣(最高 72%)
自动止损Lambda + SNS超预算自动关停资源

每月成本复盘 SOP:

  1. 登录 Budgets Dashboard,确认所有预算状态
  2. 打开 Cost Explorer,查看过去 7 天和 30 天花费趋势
  3. 按服务排序,找出 Top 3 花费服务
  4. 检查免费套餐用量是否接近上限
  5. 评估是否需要购买 Savings Plans(按需用量 >$50/月时考虑)
  6. 删除不再使用的资源(闲置 EBS 卷、未挂载的 EIP、空闲 NAT Gateway)

总结

AWS Budgets 是零成本、高回报的账单防护工具:每月 2 个免费预算覆盖核心监控,三级阈值(50%/80%/100%)+ 多渠道告警(邮件/短信/Slack)确保不遗漏,配合 Lambda 自动停机脚本实现超预算自动止损。 记住口诀:\"新号先设预算再开资源,阈值分三级,告警分两层,每月花 10 分钟看 Dashboard。\" 结合 Cost Explorer 做成本归因、Cost Anomaly Detection 兜底异常、Savings Plans 长期省钱,构建完整的成本防护体系。还没有 AWS 账号的朋友,建议先从免费套餐教程开始,零成本体验 AWS 的同时养成良好的成本管理习惯。

🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。

⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。

本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多

常见问题(FAQ)

AWS Budgets 免费额度是永久的吗?

是的,每个 AWS 账号每月 2 个免费预算是永久政策,不限时间。但免费套餐(Free Tier)是 12 个月,到期后 Budgets 本身仍免费,但监控的资源开始计费。

可以给同一个预算设置多个告警阈值吗?

可以。一个预算最多可以设置 5 个告警阈值,建议设置 3 级:50%(关注)、80%(警告)、100%(告警),每级配置不同的通知渠道。

Budgets 告警有延迟吗?

有。AWS Budgets 的数据更新频率是每日一次(通常在 UTC 12:00-18:00 之间),不是实时的。如果需要实时监控,建议结合 CloudWatch 自定义指标 + 告警。

预算超支后,超出的部分怎么计费?

超出预算的部分仍按正常的按需价格计费,AWS 不会自动停止服务。Budgets 只是通知和监控工具,不会主动干预计费。要实现自动干预,需要配置 Lambda 脚本。

新账号没有消费记录,预算金额怎么定?

先设一个较低的金额(如 $10),观察 1~2 个月的实际花费后再调整。AWS Budgets 支持随时修改预算金额,不需要删除重建。

Budgets 能监控 RI(预留实例)的费用吗?

可以。RI 的预付费用和月度摊销费用都会计入 Budgets 的成本监控。同时,Savings Plans 利用率预算和覆盖率预算专门用于监控 SP 的使用情况。