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

如何用Boto3编写Lambda函数删除标签state=undeployed的Auto Scaling Groups

用Boto3筛选并删除带有state:undeployed标签的Auto Scaling Groups

Boto3的describe_auto_scaling_groups接口标签过滤语法确实和AWS CLI不同,CLI用--filters的简化写法,而Boto3需要通过Filters参数传入结构化的字典列表。下面是实现需求的完整代码和关键说明:

实现步骤

  • 按标签筛选ASG:使用Filters参数指定标签键值对,格式为{'Name': 'tag:<标签键>', 'Values': ['<标签值>']}
  • 处理分页结果:当ASG数量超过默认返回上限时,需要通过NextToken循环获取所有结果
  • 删除符合条件的ASG:调用delete_auto_scaling_group接口,若ASG仍有运行实例,需添加ForceDelete=True参数强制删除

修改后的完整代码

#!/usr/bin/python
import boto3

client = boto3.client('autoscaling', region_name='us-east-1')

def lambda_handler(event, context):
    # 初始化分页查询器
    paginator = client.get_paginator('describe_auto_scaling_groups')
    # 设置标签过滤条件
    filter_params = {
        'Filters': [
            {
                'Name': 'tag:state',
                'Values': ['undeployed']
            }
        ]
    }
    
    # 遍历所有分页结果
    for page in paginator.paginate(**filter_params):
        for asg in page['AutoScalingGroups']:
            asg_name = asg['AutoScalingGroupName']
            print(f"准备删除ASG: {asg_name}")
            try:
                # 强制删除ASG(会先终止关联实例)
                client.delete_auto_scaling_group(
                    AutoScalingGroupName=asg_name,
                    ForceDelete=True
                )
                print(f"成功删除ASG: {asg_name}")
            except Exception as e:
                print(f"删除ASG {asg_name}失败: {str(e)}")

关键说明

  • 标签过滤规则:Boto3中标签过滤必须用tag:<标签键>作为Filter的Name,Values是数组格式,即使只有一个值也要用列表包裹
  • 分页处理:使用get_paginator可以自动处理分页逻辑,避免遗漏超过默认返回数量的ASG
  • 强制删除注意事项:ForceDelete=True会直接终止ASG关联的所有EC2实例再删除ASG,执行前请确认该操作不会影响业务
  • 权限要求:Lambda执行角色需要具备autoscaling:DescribeAutoScalingGroups和autoscaling:DeleteAutoScalingGroup的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:01:37