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

如何在账单阈值超限时自动停止EC2实例?

当账单达到阈值时自动停止EC2实例的实现方案

要实现账单达到限定额度或超出阈值时自动停止EC2实例,可通过AWS Budgets + SNS + Lambda的组合方案完成,以下是具体操作步骤:

1. 创建AWS预算并配置告警

  • 登录AWS控制台,进入「Billing and Cost Management」→「Budgets」页面。
  • 点击「Create budget」,选择「Cost budget」类型,设置预算周期(如月度)和具体限定额度。
  • 在「Alert thresholds」模块,设置触发条件:比如当实际成本达到预算的100%(或自定义比例)时触发告警。
  • 选择「Send notifications to an SNS topic」,关联后续创建的SNS主题(若未创建,可先记录主题ARN格式)。

2. 创建SNS主题

  • 进入SNS控制台,点击「Create topic」,选择「Standard」类型,输入主题名称。
  • 主题创建完成后,复制其ARN,用于后续预算告警与Lambda的关联配置。

3. 编写Lambda函数实现EC2停止逻辑

  • 进入Lambda控制台,点击「Create function」,选择「Author from scratch」,设置函数名称和Python(或你熟悉的语言)运行时。
  • 替换默认代码为以下示例(可按需调整实例筛选规则):
import boto3

def lambda_handler(event, context):
    ec2_client = boto3.client('ec2')
    
    # 筛选带有AutoStop=True标签的运行中EC2实例,避免误停其他实例
    response = ec2_client.describe_instances(
        Filters=[
            {'Name': 'tag:AutoStop', 'Values': ['True']},
            {'Name': 'instance-state-name', 'Values': ['running']}
        ]
    )
    
    target_instance_ids = []
    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            target_instance_ids.append(instance['InstanceId'])
    
    if target_instance_ids:
        ec2_client.stop_instances(InstanceIds=target_instance_ids)
        print(f"成功停止实例: {', '.join(target_instance_ids)}")
    else:
        print("未找到符合条件的运行中EC2实例")
  • 配置Lambda执行角色权限:给角色添加以下IAM策略,确保其能操作EC2并接收SNS消息:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StopInstances",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "sns:Receive",
            "Resource": "你的SNS主题ARN"
        }
    ]
}
  • 给Lambda添加触发源:选择「SNS」,关联之前创建的SNS主题,保存配置。

4. 验证与测试

  • 手动向SNS主题发送测试消息,检查Lambda是否正常触发并停止目标EC2实例。
  • 可先设置较低的预算阈值进行模拟测试,确保整个流程正常运行。

注意事项

  • 建议给需要自动停止的EC2实例添加统一标签(如示例中的AutoStop=True),避免误停业务实例。
  • 可设置多级告警:比如成本达到预算的80%时发送通知提醒,达到100%时触发停止操作。
  • 确保Lambda函数的执行角色权限最小化,避免过度授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:10:34