AWS EBS闲置卷清理脚本误删带clean:DND标签资源问题排查
故障根因分析
- 核心错误:原代码仅校验标签列表的第一个标签是否为
clean:DND,只要该豁免标签不是列表第一项,判断条件就不成立,导致带标签的卷被误删 - 隐含错误:代码引用了
botocore.exceptions但未导入对应模块,触发异常时会直接报错退出 - 逻辑冗余:两次独立判断标签是否存在,可合并简化
修复后代码
import boto3 import botocore ec2 = boto3.client('ec2', region_name='ap-southeast-2') def lambda_handler(event, context): try: for vol in ec2.describe_volumes()['Volumes']: if vol['State'] == 'available': # 检查是否存在豁免标签 skip_delete = False if vol.get('Tags'): for tag in vol['Tags']: if tag['Key'] == 'clean' and tag['Value'] == 'DND': skip_delete = True break # 无豁免标签则删除 if not skip_delete: ec2.delete_volume(VolumeId = vol['VolumeId']) print("deleted:", vol['VolumeId']) except botocore.exceptions.ClientError as e: error_code = int(e.response['Error']['Code']) if error_code == 404: exists = False
优化说明
- 遍历卷的所有标签进行匹配,只要存在任意一个
clean:DND标签就跳过删除,完全匹配业务规则 - 补全
botocore模块导入,异常处理逻辑可正常生效 - 合并标签判断逻辑,减少冗余代码
内容的提问来源于stack exchange,提问作者Levun
相关产品推荐
相关产品推荐

