我正在试用 AWS Codestar。我的目标是部署一个重要的 lambda 端点,即处理程序具有依赖关系的地方。理想情况下,我希望能够在某个requirements.txt文件中指定它们,但这似乎不是那么简单。具体来说,我想部署一个依赖于 nltk 的 lambda 处理程序,并且在其中下载 nltk 标记器“punkt”的文件作为 Codebuild 过程的一部分并为 Lambda 打包。
如何通过buildspec.ymland来做到这一点template.yml?下面,我正在尝试将pip依赖项安装到子目录lib并将其包含在 zip 工件中。
运行时,Codebuild 能够安装依赖项,导入 nltk 并运行测试,部署到 Lambda 成功,并且正确的文件被打包在lib子文件夹中(我下载了 ZIP 文件进行检查)但我在 Lambda 日志中看到错误: unable to import module 'index': No module named 'nltk'.
这是我的buildspec.yml:
版本:0.2
阶段:
安装:
命令:
- pip install -r requirements.txt -t lib
# 将 AWS CLI 升级到最新版本
- pip install --upgrade awscli
预构建:
命令:
-蟒蛇-V
- 导出 PYTHONPATH=$PYTHONPATH:./lib
- 导出 HOME_DIR=`密码`
- mkdir $HOME_DIR/nltk_data/
- 导出 NLTK_DATA=$HOME_DIR/nltk_data
- python -m nltk.downloader -d $NLTK_DATA punkt
- python -m unittest 发现测试
建造:
命令:
- aws cloudformation 包 --template template.yml --s3-bucket
$S3_BUCKET --output-template 模板-export.yml
文物:
类型:拉链
文件:
- 模板-export.yml
- '**/*'
和我的template.yml:
资源:
你好世界:
类型:AWS::Serverless::Function
特性:
处理程序:index.handler
运行时:python3.6
环境:
变量:
PYTHONPATH:./lib
角色:
Fn::ImportValue:
!Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
事件:
获取事件:
类型:API
特性:
小路: /
方法:获取
事后:
类型:API
特性:
小路: /
方法:邮寄