Я работаю с AWS SAM (Serverless Application Model) над созданием лямбда-кода Python 3.6 в настройке шлюза API. Таким образом, у меня есть один template.yaml
файл, который создает несколько лямбда-функций. Они организованы с помощью лямбда-функций, каждая из которых находится в своем собственном подкаталоге внутри проекта. Лямбда также разделяет несколько общих файлов, которые я храню в общей папке.
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
в каждый каталог лямбда, и 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
на отдельный слой должно помочь. - person Dunedan   schedule 08.04.2019aws cloudformation package
должна следовать символическим ссылкам. - person matsev   schedule 08.04.2019