gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:14:51 25 4
gpt4 key购买 nike

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

这如何通过 buildspec.ymltemplate.yml 完成?下面,我尝试将 pip 依赖项安装到子目录 lib 并将其包含在 zip 工件中。

运行时,Codebuild 能够安装依赖项,导入 nltk 并运行测试,部署到 Lambda 成功,正确的文件被打包到 lib 子文件夹中(我下载了 ZIP 文件检查)但我在 Lambda 日志中看到错误:unable to import module 'index': No module named '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        - '**/*'

和我的 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

最佳答案

上述方法不起作用的原因是,无论出于何种原因,PYTHONPATH 不适用于 AWS Lambda(即使它似乎适用于 Codebuild)。以下配置有效。

构建规范.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        - '**/*'

和我的 template.yml:

    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

关于amazon-web-services - 使用 Lambda 在 AWS Codestar 中安装 Python 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com