3

我正在试用 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
              特性:
                小路: /
                方法:邮寄
4

1 回答 1

4

上述不起作用的原因是无论出于何种原因,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
              特性:
                小路: /
                方法:邮寄
于 2018-07-08T09:40:07.747 回答