Travis CI部署AWS Lambda时自动在handler_name前添加index问题
Fixing Travis CI's Automatic "index" Prefix for AWS Lambda Handler
我之前也踩过这个坑!Travis CI的Lambda部署插件有个默认行为会偷偷给你的handler路径加上index.前缀,直接导致你的Handler配置变成index.lambda/testfile.lambda_handler,完全不符合预期。
问题根源
Travis的Lambda部署工具默认假设你的代码会打包成一个包含index.js(或对应语言入口文件)的压缩包,所以自动给handler_name追加了index.前缀。但你的项目结构是把代码放在lambda目录下的testfile.py,这个默认逻辑就直接搞砸了配置。
解决方案
你需要在.travis.yml的deploy配置里新增zip字段指定打包目录,同时调整handler_name的格式,让Travis停止自动添加前缀。修改后的配置如下:
language: generic deploy: provider: lambda function_name: MyFunction region: us-east-1 role: correct_roleid runtime: python3.6 handler_name: testfile.lambda_handler # 移除lambda/目录前缀 zip: lambda/ # 指定要打包的lambda目录 access_key_id: key_id secret_access_key: secure: secret
为什么这样有效?
- 指定
zip: lambda/后,Travis会把lambda目录下的所有文件直接打包到压缩包根目录,而不是把整个lambda目录放进包内。这样testfile.py就处于压缩包的根路径下。 - 对应的
handler_name改成testfile.lambda_handler后,Travis不会再自动添加index.前缀,AWS Lambda就能正确找到testfile.py里的lambda_handler函数。
验证步骤
修改配置后重新触发Travis构建:
- 构建完成后,登录AWS Lambda控制台查看函数配置,Handler应该显示为
testfile.lambda_handler,不再有错误的index前缀。 - 执行一次函数测试,确认功能正常运行。
内容的提问来源于stack exchange,提问作者Aliaksei Maniuk
相关产品推荐
相关产品推荐

