AWS预算超支后如何停止组织单元(OU)内的服务?
AWS预算超支后停止OU内所有运行服务的实现方案
一、仅靠AWS Budget能不能实现?
不行。AWS Budget自带的操作只能指定单个或特定的EC2、RDS实例执行停止,没法直接对整个组织单元(OU)下的所有资源批量操作——就像你试过的那样,只能手动选择具体实例,覆盖不了OU范围内的全部资源。
二、可行的替代方法
方法1:AWS Budgets + Lambda + AWS Organizations API
这是最常用的落地方式,步骤如下:
- 创建AWS Budget并设置超支阈值,触发告警时通过SNS主题发送通知。
- 编写Lambda函数订阅该SNS主题,函数逻辑包含:
- 调用
listAccountsForParentAPI获取目标OU下的所有账号。 - 遍历每个账号,调用对应服务的API停止运行中资源:比如EC2用
describeInstances筛选运行实例,再调用stopInstances执行停止;RDS用describeDBInstances+stopDBInstance处理,以此类推。 - 注意:Lambda需要配置跨账号访问权限,可通过IAM角色信任策略或组织内的SCP实现。
- 调用
方法2:AWS Budgets + EventBridge + Systems Manager Automation
- 当AWS Budget触发超支告警时,通过EventBridge规则触发Systems Manager自动化文档。
- 自定义自动化文档实现:
- 拉取目标OU下的所有账号。
- 针对每个账号,执行停止EC2、RDS等运行中资源的步骤。
- 借助Systems Manager的跨账号执行能力,无需编写复杂Lambda代码。
方法3:AWS Control Tower + 自定义告警动作
如果你的环境基于AWS Control Tower管理:
- 在Control Tower中为目标OU设置预算规则。
- 结合Control Tower的生命周期事件,触发自定义Lambda函数批量停止OU内资源。
注意事项
- 确保执行停止操作的IAM角色权限充足:需具备访问Organizations的权限,以及跨账号停止EC2、RDS等资源的权限。
- 建议先在测试OU中验证方案,避免误停止生产环境资源。
- 可扩展逻辑:比如停止前给管理员发送通知,或排除特定关键资源不执行停止操作。
内容的提问来源于stack exchange,提问作者Krizzon
相关产品推荐
相关产品推荐

