使用 Lambda 在 AWS Codestar 中安装 Python 依赖项
Posted
技术标签:
【中文标题】使用 Lambda 在 AWS Codestar 中安装 Python 依赖项【英文标题】:Installing Python dependencies in AWS Codestar with Lambda 【发布时间】:2018-12-15 21:11:42 【问题描述】:我正在试用 AWS Codestar。我的目标是部署一个重要的 lambda 端点,即处理程序具有依赖项的位置。理想情况下,我希望能够在某处的requirements.txt
文件中指定它们,但这似乎并不那么简单。具体来说,我想部署一个依赖于 nltk 的 lambda 处理程序,并且在其中下载 nltk 标记器“punkt”的文件作为 Codebuild 过程的一部分并为 Lambda 打包。
如何通过buildspec.yml
和template.yml
做到这一点?下面,我尝试将 pip
依赖项安装到子目录 lib
并将其包含在 zip 工件中。
运行时,Codebuild 能够安装依赖项,导入 nltk 并运行测试,部署到 Lambda 成功,并且正确的文件被打包在 lib
子文件夹中(我下载了 ZIP 文件进行检查)但是我查看 Lambda 日志中的错误:unable to import module 'index': No module named 'nltk'
。
这是我的buildspec.yml
:
还有我的 template.yml:
资源: 你好世界: 类型:AWS::Serverless::Function 特性: 处理程序:index.handler 运行时:python3.6 环境: 变量: PYTHONPATH:./lib 角色: Fn::ImportValue: !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 事件: 获取事件: 类型:API 特性: 小路: / 方法:获取 事后: 类型:API 特性: 小路: / 方法:邮寄【问题讨论】:
【参考方案1】:上述不起作用的原因是,无论出于何种原因,PYTHONPATH
在 AWS Lambda 上都不起作用(即使它似乎适用于 Codebuild)。以下配置有效。
buildspec.yml:
版本:0.2 阶段: 安装: 命令: - pip install -r requirements.txt -t 。 # 将 AWS CLI 升级到最新版本 - pip install --upgrade awscli 预构建: 命令: -蟒蛇-V - 导出 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 环境: 变量: NLTK_DATA: ./nltk_data 角色: Fn::ImportValue: !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 事件: 获取事件: 类型:API 特性: 小路: / 方法:获取 事后: 类型:API 特性: 小路: / 方法:邮寄【讨论】:
以上是关于使用 Lambda 在 AWS Codestar 中安装 Python 依赖项的主要内容,如果未能解决你的问题,请参考以下文章
使用AWS CodeStar Python项目和JetBrain PyCharm