基于 AWS CLI 为 Cost and Usage 预算创建成本告警通知:aws budgets create-notification 实战指南
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
导读
本指南围绕 AWS CLI 的aws budgets create-notification命令展开,讲解如何为指定的 Cost and Usage 预算创建阈值告警通知,包括通知结构(Notification)与订阅者(Subscriber)的完整参数语义、实际命令示例、以及与之配套的订阅者管理与通知查询命令。读完本文,你将能够熟练地为预算配置"实际花费超过预算 80% 即触发告警"这类通知,并通过邮件或 SNS 主题接收告警,同时了解底层服务模型对参数取值与数量上限的约束。
一、命令概览:为预算挂上"告警哨兵"
在 AWS Budgets 中,一个预算(Budget)只定义了"你计划花多少钱",而真正在花费超标时提醒你的,是绑定在预算上的通知(Notification)。aws budgets create-notification正是用来把一条通知与指定账号、指定预算关联起来的命令。
该命令的官方示例位于仓库 awscli/examples/budgets/create-notification.rst,其核心命令如下:
aws budgets create-notification \ --account-id 111122223333 \ --budget-name "Example Budget" \ --notification "NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=80,ThresholdType=PERCENTAGE" \ --subscriber "SubscriptionType=EMAIL,Address=example@example.com"这条命令的语义是:当111122223333账号下名为Example Budget的预算,其实际花费(ACTUAL)大于(GREATER_THAN)预算金额的80%(PERCENTAGE)时,向邮箱example@example.com发送告警邮件。
二、逐参数拆解:四个必需的输入
从服务模型 awscli/botocore/data/budgets/2016-10-20/service-2.json 中CreateNotificationRequest的定义可以看到,该请求的必需字段为AccountId、BudgetName、Notification、Subscribers四项,对应 CLI 中的四个参数:
| CLI 参数 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
--account-id | String | 是 | 与要创建通知的预算相关联的账号 ID(12 位数字) |
--budget-name | String | 是 | 预算名称,账号内必须唯一;示例中为"Example Budget" |
--notification | Structure | 是 | 通知的触发条件定义,采用 CLI 简写语法,见第三节 |
--subscriber | Structure | 是 | 接收告警的订阅者定义,见第四节。服务端要求每个通知至少一个订阅者 |
注意:示例中出现了两次--subscriber参数——CLI 允许重复传入该参数从而为一条通知一次性挂载多个订阅者,等价于服务模型中的Subscribers列表。
三、Notification:告警触发条件的三要素 + 阈值类型
--notification使用 AWS CLI 的简写语法(shorthand syntax),以逗号分隔的键=值形式构造结构体。其字段对应服务模型中Notification结构体(见 service-2.json 中"Notification"定义),四个成员中NotificationType、ComparisonOperator、Threshold为必需项,ThresholdType在 2017 年后的版本中可选但强烈建议显式指定。
1. NotificationType:告警基于实际值还是预测值
取值只有两个:
ACTUAL:当实际花费超过阈值时触发;FORECASTED:当预测花费(基于历史用量画像推算的月末值)超过阈值时触发,适合提前预警。
示例中使用ACTUAL,即"真金白银花超了才提醒"。
2. ComparisonOperator:比较运算符
服务模型枚举支持三种:
GREATER_THAN:花费大于阈值(示例所用);LESS_THAN:花费小于阈值(如预算低于某下限时告警);EQUAL_TO:花费等于阈值。
3. Threshold 与 ThresholdType:阈值数值及其语义
Threshold:数值本身。服务模型的约束为min=0、max=15000000000000(即 15 万亿)。官方文档说明:阈值通常是百分比,多数客户会选择在预算金额的 50%–200% 区间提醒,上限可达预算金额的 1,000,000% 以上。ThresholdType:阈值类型,枚举为:PERCENTAGE:百分比阈值。例如预算 200 美元、阈值 80%,则实际花费超过 160 美元时触发告警(示例即此场景);ABSOLUTE_VALUE:绝对金额阈值。服务会在总花费超过(或预测超过)该绝对数值时通知。
四、Subscriber:谁接收告警
--subscriber同样使用简写语法,对应服务模型中Subscriber结构体,包含两个必需成员:
SubscriptionType:订阅类型,枚举为EMAIL(邮件)与SNS(SNS 主题)。注意:服务文档明确说明枚举只包含SNS与EMAIL,早期的SMS已不在当前模型中;Address:接收地址,即邮箱地址或 SNS 主题 ARN。创建订阅者时,Address不能包含换行符。
关于订阅者数量,服务模型在Subscribers列表上定义了min=1、max=11的约束,官方文档进一步说明:一条通知可以绑定一个 SNS 订阅者加最多 10 个邮件订阅者,合计最多 11 个订阅者。
五、完整实战:从创建预算到通知、订阅者全链路
第一步:创建预算
通知必须挂载在已存在的预算上。仓库 awscli/examples/budgets/create-budget.rst 展示了如何先创建预算:
aws budgets create-budget \ --account-id 111122223333 \ --budget file://budget.json \ --notifications-with-subscribers file://notifications-with-subscribers.json其中budget.json定义了预算名称、类型(COST)与限额(如 100 USD),而notifications-with-subscribers.json可以把"通知 + 订阅者"一并在建预算时绑定。若预算已存在,则使用本指南主讲的create-notification单独追加通知。
第二步:创建通知(本指南主命令)
aws budgets create-notification \ --account-id 111122223333 \ --budget-name "Example Budget" \ --notification "NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=80,ThresholdType=PERCENTAGE" \ --subscriber "SubscriptionType=EMAIL,Address=example@example.com"第三步:为已有通知补充订阅者
如果通知已存在、但需要追加接收人,可使用create-subscriber(见 awscli/examples/budgets/create-subscriber.rst)。注意此时--notification参数必须与创建时的通知完全一致,因为服务端用它作为定位已有通知的键:
aws budgets create-subscriber \ --account-id 111122223333 \ --budget-name "Example Budget" \ --notification "NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=80,ThresholdType=PERCENTAGE" \ --subscriber "SubscriptionType=EMAIL,Address=ops@example.com"第四步:查询预算下的所有通知
使用describe-notifications-for-budget(见 awscli/examples/budgets/describe-notifications-for-budget.rst):
aws budgets describe-notifications-for-budget \ --account-id 111122223333 \ --budget-name "Example Budget" \ --max-results 5示例输出:
{ "Notifications": [ { "Threshold": 80.0, "ComparisonOperator": "GREATER_THAN", "NotificationType": "ACTUAL" } ] }该命令支持分页:根据 awscli/botocore/data/budgets/2016-10-20/paginators-1.json,其分页配置为input_token=NextToken、output_token=NextToken、limit_key=MaxResults、result_key=Notifications,因此也可以直接加上--paginate让 CLI 自动遍历所有页。
第五步:修改与删除通知
- 修改阈值:
update-notification用"旧通知 + 新通知"配对方式替换(见 awscli/examples/budgets/update-notification.rst):
aws budgets update-notification \ --account-id 111122223333 \ --budget-name "Example Budget" \ --old-notification "NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=80,ThresholdType=PERCENTAGE" \ --new-notification "NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=90,ThresholdType=PERCENTAGE"- 删除通知:
delete-notification只需提供与创建时一致的通知定义(见 awscli/examples/budgets/delete-notification.rst):
aws budgets delete-notification \ --account-id 111122223333 \ --budget-name "Example Budget" \ --notification "NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=80,ThresholdType=PERCENTAGE"六、参数约束与最佳实践(源码级依据)
综合 service-2.json 中的模型定义,可总结如下工程要点:
- 通知与订阅者上限:一个预算最多绑定10 条通知;每条通知必须至少 1 个订阅者,最多1 个 SNS + 10 个邮件订阅者(共 11 个);
- 阈值数值范围:
Threshold在[0, 15000000000000]之间,超出会触发参数校验错误; Notification是唯一标识:create-subscriber、update-notification、delete-notification、describe-subscribers-for-notification都要求传入与创建时完全一致的NotificationType/ComparisonOperator/Threshold组合来定位通知,任何字段不一致都会导致"找不到通知";- 简写语法:
--notification与--subscriber都依赖 AWS CLI 的 shorthand 解析器(相关实现见 awscli/awscli/shorthand.py),结构体字段以逗号分隔、键值以等号连接;当字段包含特殊字符或需复用配置时,可改用file://JSON 文件方式传入; - 组合推荐:官方文档给出的典型配置即示例所示——
ACTUAL+PERCENTAGE+GREATER_THAN+ 阈值 80,即"实际花费达到预算的 80% 时告警";如需更早预警,可叠加FORECASTED类型的第二条通知。
七、总结
aws budgets create-notification是与create-budget互补的细粒度告警配置入口:预算负责"划线",通知负责"吹哨",订阅者负责"传话"。结合本仓库的示例文件(create-notification.rst、create-subscriber.rst、describe-notifications-for-budget.rst、update-notification.rst、delete-notification.rst)与服务模型定义(service-2.json),你已经可以完整落地"预算阈值告警"的创建、查询、扩员、修改与删除全流程。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考