Amazon web services 使用Lambda在AWS Codestar中安装Python依赖项
我正在试用AWS Codestar。我的目标是部署一个非平凡的lambda端点,即处理程序具有依赖关系的地方。理想情况下,我希望能够在某个地方的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
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
特性:
路径:/
方法:邮寄