我正在使用AWS SAM(无服务器应用程序模型)在API Gateway环境下构建Python 3.6 Lambda代码。因此,我有一个单独的template.yaml
文件,可以创建多个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'
如果我将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
shared_dir
内容放在一个单独的层中应该能解决问题。 - Dunedanaws cloudformation package
命令应该遵循符号链接。 - matsev