gpt4 book ai didi

amazon-web-services - AWS SAM : Shared files across Lambda functions

转载 作者:行者123 更新时间:2023-12-02 08:58:02 27 4
gpt4 key购买 nike

我正在使用 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':没有名为“共享”的模块
如果我将 shared.py 文件的副本移至每个 lambda 目录中,Pycharm 和 SAM 都会满意,我可以构建/部署到 AWS。
我的问题:如何使用共享目录中的共享文件构建 SAM 模板?
到目前为止,我已经尝试过:

  • 符号链接(symbolic link)和 MacOS 别名。
  • CodeUri 替代方案的各种组合
  • 包含 __init__setup.py 的本地包。 (我无法使用公共(public)包,因为代码是私有(private)的,不能放在公共(public)存储库中。)

这是我的模板文件:

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

最佳答案

根据 @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

最后一点。虽然理想情况下,此共享 python 目录应通过 sam deploy 命令直接部署到 Layer 对象中,但我发现 AWS SAM CLI 中对 Layers 的支持仍然存在如此新且如此有缺陷,以至于目前它还不起作用。希望在接下来的几个月里它能够得到修复。与此同时,我需要自己手动安装新版本的共享压缩文件。叹息。

关于amazon-web-services - AWS SAM : Shared files across Lambda functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566279/

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