如何用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
相关产品推荐
相关产品推荐

