AWS Budgets 完整实战:预算设置、告警通知、自动停机,避免天价账单(2026最新教程)
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 控制台
- 登录 AWS 管理控制台,搜索 Budgets 并进入
- 点击 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 status | Green/Yellow/Red | Green = 正常,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 Detection | AI 自动发现异常花费波动 |
| 成本归因 | Cost Explorer + 标签 | 知道钱花在哪里 |
| 长期省钱 | Savings Plans / 预留实例 | 承诺消费换折扣(最高 72%) |
| 自动止损 | Lambda + SNS | 超预算自动关停资源 |
每月成本复盘 SOP:
- 登录 Budgets Dashboard,确认所有预算状态
- 打开 Cost Explorer,查看过去 7 天和 30 天花费趋势
- 按服务排序,找出 Top 3 花费服务
- 检查免费套餐用量是否接近上限
- 评估是否需要购买 Savings Plans(按需用量 >$50/月时考虑)
- 删除不再使用的资源(闲置 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 的使用情况。