运行AWS Lambda实现S3自动打标签时出现Bad handler错误如何解决?
AWS Lambda S3标签工具问题排查
错误根因与修复
你遇到的Runtime.MalformedHandlerName错误和你怀疑的get_user_tags没有关系,是Lambda入口配置格式错误导致的:
Response { "errorMessage": "Bad handler 'resource-auto-tagger-main/source/resource-auto-tagger': not enough values to unpack (expected 2, got 1)", "errorType": "Runtime.MalformedHandlerName", "stackTrace": []}
Lambda要求处理程序配置必须遵循[路径.]文件名.入口函数名的格式,你当前填写的配置只有路径和文件名,缺少入口函数名,所以系统解析失败。
修复步骤:
- 确认你的代码文件名为
resource-auto-tagger.py,代码中定义的入口函数为lambda_handler - 打开Lambda控制台「运行时设置」,将处理程序的值修改为
source.resource-auto-tagger.lambda_handler(路径用.分隔,不要用/)
代码其他待修复问题
你的代码目前还有多处问题需要调整才能正常运行:
- 缺少依赖导入
在代码最开头补充导入语句:
import boto3 import json import re import botocore
- 未定义函数调用
代码中调用了get_role_tags(role_name),但你没有实现这个函数,运行时会报NameError,要么补充该函数的实现,要么删除相关逻辑。 - 变量未定义错误
get_user_tags函数的错误日志中打印了未传入的resource_id变量,运行会报错,删除该打印行或者将resource_id改为函数入参。 - 功能与需求不匹配
当前代码是为EC2实例打标签的逻辑,完全没有处理S3对象的相关代码,要实现给S3最新上传对象打标签的需求,你还需要做以下修改:
- 将Lambda触发方式改为S3存储桶的「对象创建事件」
- 新增从事件中解析S3桶名、对象键的逻辑
- 替换EC2打标签的逻辑为S3的
put_object_tagging接口调用
内容的提问来源于stack exchange,提问作者user 01072021
相关产品推荐
相关产品推荐

