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

Python3.8 Lambda遍历EC2实例Tags字段触发KeyError报错

问题根因

本次KeyError: 'Tags'报错和代码变更、Lambda运行时版本、AWS API迭代均无关系,核心原因如下:

  • AWS EC2 describe_instances 接口有固定返回规则:当EC2实例没有绑定任何标签(包括系统标签、自定义标签)时,返回的实例结构体中会直接省略Tags字段,而非返回空数组。
  • 函数此前稳定运行多年,说明历史上扫描覆盖的所有EC2实例都至少绑定了1个标签;约5天前你的跨账号扫描范围内新出现了1台无任何标签的EC2实例(常见来源包括临时创建的未打标测试实例、CloudEndure复制流程中尚未完成标签注入的中转实例、其他AWS服务自动拉起的底层资源实例),代码直接通过instance['Tags']硬索引字段时,就会触发键不存在的错误。

验证方式:在对应账号的us-east-1区域执行AWS CLI命令 aws ec2 describe-instances --query 'Reservations[].Instances[?!not_null(Tags)].InstanceId',返回的实例ID就是触发本次报错的无标签实例。

修复方案

仅需调整标签遍历部分的取值逻辑,使用字典get()方法为不存在Tags字段的场景设置默认空列表即可,无标签实例会直接跳过标签判断流程,不会中断函数执行。
将原代码第23行的标签遍历逻辑做如下修改:

# 原错误写法
# for tag in instance['Tags']:

# 修改为
for tag in instance.get('Tags', []):

可选优化(非本次报错强制修复项)

  • 原代码未处理describe_instances接口的分页逻辑,单区域实例数超过1000台时会出现漏扫,建议使用boto3自带的paginator分页器遍历全量结果
  • 日志中的拼写错误Deltetion protection可修正为Deletion protection,不影响功能运行但便于后续日志排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:18:20