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

AWS Billing Budget告警阈值触发动作功能是否已移除?

关于AWS Billing Budgets动作功能及沙箱账户自动化控制的解决方案

一、Billing Budgets动作功能的现状

AWS Billing Budgets的阈值触发动作功能并没有被移除,而是整合到了Budget Actions模块中——可能是入口调整让你没找到。如果仍看不到该选项,大概率是权限问题:需确保你的IAM用户/角色拥有budgets:ModifyBudget、budgets:CreateBudgetAction这类权限;另外,个人沙箱账户可能存在部分功能限制,建议检查账户状态是否正常。

二、无法使用原生Budget Actions的替代方案

如果确实无法通过原生功能配置动作,用SNS+Lambda的组合完全可以实现需求:

  • 创建一个SNS主题,将Lambda函数设为订阅者
  • 在Billing Budgets的告警配置里,选择触发时向该SNS主题发送通知
  • 编写Lambda函数逻辑,接收SNS推送的预算触发消息,执行对应的资源管控操作(比如停止实例、删除非必要资源)

三、个人沙箱账户自动化阈值强制控制的具体实现

针对沙箱账户,推荐以下轻量方案:

  1. 标签化管理资源:给所有需要被强制管控的资源(EC2、RDS、EBS等)打上统一标签,比如BudgetControl:Yes,方便Lambda精准定位
  2. 配置IAM角色:给Lambda创建专属IAM角色,赋予最小必要权限,示例策略如下:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:StopInstances",
            "rds:StopDBInstance",
            "ec2:DeleteVolumes"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/BudgetControl": "Yes"
            }
          }
        },
        {
          "Effect": "Allow",
          "Action": "logs:CreateLogGroup",
          "Resource": "arn:aws:logs:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/*"
        }
      ]
    }
    
  3. 编写Lambda函数(Python示例):
    import boto3
    import json
    
    ec2 = boto3.client('ec2')
    rds = boto3.client('rds')
    
    def lambda_handler(event, context):
        # 解析SNS消息,确认是预算阈值触发
        sns_message = json.loads(event['Records'][0]['Sns']['Message'])
        if 'budgetThresholdExceeded' in sns_message.get('message', ''):
            # 停止带指定标签的EC2实例
            ec2_instances = ec2.describe_instances(Filters=[{'Name': 'tag:BudgetControl', 'Values': ['Yes']}])
            instance_ids = [inst['InstanceId'] for res in ec2_instances['Reservations'] for inst in res['Instances']]
            if instance_ids:
                ec2.stop_instances(InstanceIds=instance_ids)
                print(f"Stopped EC2 instances: {instance_ids}")
            
            # 停止带指定标签的RDS实例
            rds_instances = rds.describe_db_instances()
            rds_ids = [db['DBInstanceIdentifier'] for db in rds_instances['DBInstances'] if any(tag['Key'] == 'BudgetControl' and tag['Value'] == 'Yes' for tag in db['TagList'])]
            if rds_ids:
                for db_id in rds_ids:
                    rds.stop_db_instance(DBInstanceIdentifier=db_id)
                print(f"Stopped RDS instances: {rds_ids}")
        return {'statusCode': 200, 'body': 'Action executed successfully'}
    
  4. 测试与验证:手动触发SNS消息,或者调整预算阈值进行测试,确保Lambda能正确执行资源管控动作

注意事项

  • 沙箱账户有额度上限,建议将阈值设置在接近上限的80%-90%,提前触发动作避免超额
  • 避免给核心测试资源打管控标签,防止误操作影响正常开发
  • 定期检查Lambda日志,确认动作执行情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:58:24