Следуя рекомендации @Dunedan, я создал объект Layers для каждой лямбда-функции с общим кодом, что фактически добавило эти процедуры в PythonPath для этих функций.Я также добавил следующее в определение шаблона API с новыми свойствами Layers
:
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, я обнаружил, что поддержка Layers
в CLI AWS SAM по-прежнему настолько нова и настолько глючит, что на данный момент еене работаетНадеюсь, в ближайшие месяцы это будет исправлено.Тем временем мне нужно вручную установить новые версии файла shared-zip.Вздох.