Amazon web services 使用Lambda在AWS Codestar中安装Python依赖项

Amazon web services 使用Lambda在AWS Codestar中安装Python依赖项,amazon-web-services,aws-lambda,aws-codestar,Amazon Web Services,Aws Lambda,Aws Codestar,我正在试用AWS Codestar。我的目标是部署一个非平凡的lambda端点,即处理程序具有依赖关系的地方。理想情况下,我希望能够在某个地方的requirements.txt文件中指定它们,但这似乎不是那么简单。具体地说,我想部署一个依赖于nltk的lambda处理程序,其中nltk标记器“punkt”的文件作为代码构建过程的一部分下载,并为lambda打包 如何通过buildspec.yml和template.yml实现这一点?下面,我试图将pip依赖项安装到子目录lib,并将其包含在zip

我正在试用AWS Codestar。我的目标是部署一个非平凡的lambda端点,即处理程序具有依赖关系的地方。理想情况下,我希望能够在某个地方的
requirements.txt
文件中指定它们,但这似乎不是那么简单。具体地说,我想部署一个依赖于nltk的lambda处理程序,其中nltk标记器“punkt”的文件作为代码构建过程的一部分下载,并为lambda打包

如何通过
buildspec.yml
template.yml
实现这一点?下面,我试图将
pip
依赖项安装到子目录
lib
,并将其包含在zip工件中

运行时,Codebuild能够安装依赖项、导入nltk并运行测试,部署到Lambda成功,并且正确的文件被打包到
lib
子文件夹中(我下载了ZIP文件以进行检查),但我在Lambda日志中看到错误:
无法导入模块“索引”:没有名为“nltk”的模块。

这是我的
buildspec.yml

version: 0.2 phases: install: commands: - pip install -r requirements.txt -t lib # Upgrade AWS CLI to the latest version - pip install --upgrade awscli pre_build: commands: - python -V - export PYTHONPATH=$PYTHONPATH:./lib - export HOME_DIR=`pwd` - mkdir $HOME_DIR/nltk_data/ - export NLTK_DATA=$HOME_DIR/nltk_data - python -m nltk.downloader -d $NLTK_DATA punkt - python -m unittest discover tests build: commands: - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml artifacts: type: zip files: - template-export.yml - '**/*' 版本:0.2 阶段: 安装: 命令: -pip安装-r requirements.txt-t lib #将AWS CLI升级至最新版本 -pip安装--升级awscli 预构建: 命令: -python-V -导出PYTHONPATH=$PYTHONPATH:./lib -export HOME_DIR=`pwd` -mkdir$HOME\u DIR/nltk\u数据/ -导出NLTK_数据=$HOME_目录/NLTK_数据 -python-m nltk.downloader-d$nltk_数据punkt -python-m单元测试发现测试 建造: 命令: -aws cloudformation包——template template.yml——s3 bucket $S3_BUCKET—输出模板template-export.yml 人工产品: 类型:拉链 文件夹: -template-export.yml - '**/*' 和my template.yml:

Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.6 Environment: Variables: PYTHONPATH: ./lib Role: Fn::ImportValue: !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] Events: GetEvent: Type: Api Properties: Path: / Method: get PostEvent: Type: Api Properties: Path: / Method: post Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.6 Environment: Variables: NLTK_DATA: ./nltk_data Role: Fn::ImportValue: !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] Events: GetEvent: Type: Api Properties: Path: / Method: get PostEvent: Type: Api Properties: Path: / Method: post 资源: HelloWorld: 类型:AWS::Serverless::Function 特性: 处理程序:index.Handler 运行时:python3.6 环境: 变量: 蟒蛇路径:./lib 角色: Fn::导入值: !加入['-',[!Ref'ProjectId',!Ref'AWS::Region','LambdaTrustRole']] 活动: GetEvent: 类型:Api 特性: 路径:/ 方法:获取 事后: 类型:Api 特性: 路径:/ 方法:邮寄
上述方法不起作用的原因是,无论出于何种原因,
PYTHONPATH
在AWS Lambda上不起作用(即使它似乎与Codebuild一起工作)。下面的配置工作正常

buildspec.yml:

version: 0.2 phases: install: commands: - pip install -r requirements.txt -t . # Upgrade AWS CLI to the latest version - pip install --upgrade awscli pre_build: commands: - python -V - export HOME_DIR=`pwd` - mkdir $HOME_DIR/nltk_data/ - export NLTK_DATA=$HOME_DIR/nltk_data - python -m nltk.downloader -d $NLTK_DATA punkt - python -m unittest discover tests build: commands: - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml artifacts: type: zip files: - template-export.yml - '**/*' 版本:0.2 阶段: 安装: 命令: -pip安装-r requirements.txt-t。 #将AWS CLI升级至最新版本 -pip安装--升级awscli 预构建: 命令: -python-V -export HOME_DIR=`pwd` -mkdir$HOME\u DIR/nltk\u数据/ -导出NLTK_数据=$HOME_目录/NLTK_数据 -python-m nltk.downloader-d$nltk_数据punkt -python-m单元测试发现测试 建造: 命令: -aws cloudformation包——template template.yml——s3 bucket $S3_BUCKET—输出模板template-export.yml 人工产品: 类型:拉链 文件夹: -template-export.yml - '**/*' 和my template.yml:

Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.6 Environment: Variables: PYTHONPATH: ./lib Role: Fn::ImportValue: !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] Events: GetEvent: Type: Api Properties: Path: / Method: get PostEvent: Type: Api Properties: Path: / Method: post Resources: HelloWorld: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.6 Environment: Variables: NLTK_DATA: ./nltk_data Role: Fn::ImportValue: !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] Events: GetEvent: Type: Api Properties: Path: / Method: get PostEvent: Type: Api Properties: Path: / Method: post 资源: HelloWorld: 类型:AWS::Serverless::Function 特性: 处理程序:index.Handler 运行时:python3.6 环境: 变量: NLTK_数据:./NLTK_数据 角色: Fn::导入值: !加入['-',[!Ref'ProjectId',!Ref'AWS::Region','LambdaTrustRole']] 活动: GetEvent: 类型:Api 特性: 路径:/ 方法:获取 事后: 类型:Api 特性: 路径:/ 方法:邮寄