AWS SAM:Lambda函数之间的共享文件

问题描述 投票:0回答:1

我正在使用AWS SAM(无服务器应用程序模型)在API网关设置中构建Python 3.6 lambda代码。因此,我有一个template.yaml文件,可以创建多个Lambda函数。它们使用lambda函数进行组织,每个函数都在项目中的子目录中。 lambda还共享几个常见文件,我保存在共享文件夹中。

project-home
 -lambda_a_dir
   -lambda_a.py
 -lambda_b_dir
   -lambda_b.py
 -shared_dir
   -shared.py

问题是,虽然Pycharm可以清楚地看到shared.py,SAM不能并且拒绝识别共享文件,但有以下错误:Unable to import module 'lambdaA': No module named 'shared' If我将shared.py文件的副本移动到每个lambda目录中,Pycharm和SAM都很高兴我可以构建/部署到AWS。 我的问题:如何使用共享目录中的共享文件构建SAM模板? 到目前为止,我尝试过:

  • 符号链接和MacOS别名。
  • CodeUri替代品的各种组合
  • 本地包装与__init__setup.py。 (我不能使用公共包,因为代码是私有的,不能放在公共存储库中。)

这是我的模板文件:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  lambdaA:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: ./lambda_a_dir/
      Handler: lambda_a.lambda_handler
      Runtime: python3.6
  lambdaB:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: ./lambda_b_dir/
      Handler: lambda_b.lambda_handler
      Runtime: python3.6
amazon-web-services amazon-cloudformation aws-sam-cli
1个回答
1
投票

根据@Dunedan的建议,我使用共享代码为每个lambda函数创建了一个Layers对象,这有效地将这些例程添加到PythonPath中以实现这些功能。我还使用新的Layers属性将以下内容添加到API模板定义中:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  lambdaA:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: ./lambda_a_dir/
      Handler: lambda_a.lambda_handler
      Runtime: python3.6
      Layers: 
        - arn:aws:lambda:us-west-1:012345678:layer:my_shared_zip:1
  lambdaB:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: ./lambda_b_dir/
      Handler: lambda_b.lambda_handler
      Runtime: python3.6
      Layers: 
        - arn:aws:lambda:us-west-1:012345678:layer:my_shared_zip:1

请注意,代码需要在上载之前压缩,并且需要具有以下目录结构,并且代码位于具有该语言名称的目录中。在这种情况下,因为我使用的是Python,所以代码需要在python目录中,然后压缩python目录:

my_shared_zip.zip
 -python
   -shared.py
   -other_shared.py
   -more_shared.py

最后一点。理想情况下,这个shared-python目录应该由sam deploy命令直接部署到Layer对象中,我发现在AWS SAM CLI中对Layers的支持仍然是如此新颖且如此错误,此时它不起作用。希望在未来几个月内它将得到修复。在此期间,我需要自己手动安装新版本的shared-zip文件。叹。

© www.soinside.com 2019 - 2024. All rights reserved.