如何通过无服务器框架在AWS EFS上安装大型依赖项

时间:2020-07-16 13:07:10

标签: aws-lambda tensorflow2.0 serverless-framework aws-elasticfilesystem aws-efs

我了解我们可以从 EC2实例 EFS 中安装依赖项,然后在AWS lambda中设置安装路径和PythonPath,以便lambda现在具有以下路径:依赖文件夹。

但是有没有办法从这种方法中消除EC2,而是从 serverless framework 安装那些依赖项?

我的情况是将tensorflow2依赖关系(> 500 MB)上传到AWS lambda。

任何潜在客户都会有所帮助和赞赏。

1 个答案:

答案 0 :(得分:0)

可以。我不确定您是否已经在无服务器上设置了EFS。 但是,假设已经完成,则可以明确地告诉无服务器lambda项目要连接到哪个vpc以及要使用哪些EFS IAM角色。

我没有EFS设置的详细信息,但是在我的项目中,它看起来像这样:

  name: aws
  profile: abcd
  runtime: python3.8
  region: us-west-1
  
  vpc:
    securityGroupIds:
      - sg-065647b2292ad63a2
    subnetIds:
      - subnet-02ad3xxxxxxxxxxxx
      - subnet-02ca2xxxxxxxxxxxx
      - subnet-01a14xxxxxxxxxxxx
  # Allow RW access to EFS services
  iamManagedPolicies:
    - "arn:aws:iam::aws:policy/AmazonElasticFileSystemClientReadWriteAccess"

在功能部分下,只需确保定义环境变量以指向您的库/代码:

functions:
  myfunc:
    runtime: python3.8
    handler: myhandler
    environment:
      PYTHONPATH: /mnt/efs/lib/python3.8/site-packages
      LD_LIBRARY_PATH: /mnt/efs/lib/python3.8/site-packages

最后是资源:

resources:
  extensions:
    MyfuncLambdaFunction:
      Properties:
        FileSystemConfigs:
          - Arn: arn:aws:elasticfilesystem:us-west-1:123456789012:access-point/fsap-0012abcde1234ab12
            LocalMountPath: /mnt/efs

FYI的Tensorflow,您可以结合使用将其降低到60MB左右 lambc / docker-lambda和

tensorflow packaging

但是,从长远来看,无论如何,使用EFS还是会更好的,值得一提。