AWS SAM идеально подходит для этого случая использования! Если вы сравните его с CloudFormation, то вы сможете писать лямбда-функции и их триггеры более компактным способом намного . Я не уверен, что вы считаете сложным, но просто посмотрите на следующий пример. Это один AWS шаблон SAM, который определяет две AWS лямбда-функции, одна из которых запускается событиями S3, а другая - с запланированным выполнением каждые пять минут:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Runtime: python3.8
Resources:
Bucket:
Type: AWS::S3::Bucket
ProcessorFunction:
Type: AWS::Serverless::Function
Properties:
Handler: s3_processor.handler
CodeUri: src/
Policies: AmazonS3ReadOnlyAccess
Events:
PhotoUpload:
Type: S3
Properties:
Bucket: !Ref Bucket
Events: s3:ObjectCreated:*
ScheduledFunction:
Type: AWS::Serverless::Function
Properties:
Handler: scheduled_function.handler
CodeUri: src/
Events:
Timer:
Type: Schedule
Properties:
Schedule: rate(5 minutes)
Я не буду включать, как то же самое определение выглядело бы как с чистым CloudFormation, так как в нем было бы более ста строк.
Вы можете развернуть обе функции с помощью одного стека CloudFormation, который мне кажется желаемым.
Что касается кода, вы можете видеть, что я использовал два разных обработчика, так что вы просто s3_processor.py
и scheduled_function.py
в своем src/
-каталоге, и вы хороши для go. Вы можете легко хранить все это в одном git-хранилище и пользоваться преимуществами AWS возможностей локального тестирования SAM.
Если вы хотите иметь отдельный стек CloudFormation для AWS лямбда-функции, вы можно просто создать подкаталог в вашем git -репозитории для каждой AWS лямбда-функции.