Локальный запуск лямбда-выражений с использованием отдельных бессерверных автономных пакетов ИЛИ AWS SAM Local ИЛИ библиотеки Moto

Мне нужно создать проект интеграции, который при выполнении должен запускать все имитирующие службы aws, такие как S3, API-шлюз, SQS, Dynamo db и SSM. Мы использовали фреймворк serverless.com для разработки лямбда-выражений в Node.js, которые используют указанные выше сервисы AWS внутри компании. Также эти лямбда-выражения вызывают другую лямбда-выражение с использованием шлюза API, где тип X-вызова является событием для асинхронных вызовов.

Любые предложения о том, какой подход следует выбрать для локального запуска этих лямбда-выражений:

  1. Should i create a serverless project where serverless-offline plugins such as
    • serverless-s3-local
    • бессерверный - динамо - локальный
    • serverless-offline- ssm
    • serverless-offline- динамодб

Поэтому, когда этот проект будет выполнен, он запустит эти службы на определенном порту на локальном компьютере.

  1. Используйте SAM Local.

    • For this i need to write a sam template as currently i have used serverless.com framework where there is serverless.yml rather than sam template.
    • Существует также плагин serverless-sam для экспорта serverless.yml в шаблон sam, однако он выдает ошибку для нескольких частей в serverless.yml, поскольку для некоторых инфра-сборок мы используем вывод выполнения terraform в serverless.yml.
    • Эта терраформа недоступна для местных. Так что в основном у меня нет возможности использовать функцию экспорта плагина serverless-sam. Мне нужно будет создать отдельный проект, в котором будет шаблон sam, содержащий спецификацию всех зависимых сервисов AWS.
  2. Используйте библиотеку Python Moto: https://github.com/spulec/moto#stand-alone-server-mode

заранее спасибо


person Amar Panigrahy    schedule 16.03.2020    source источник


Ответы (1)


Похоже, это хороший вариант использования Localstack.

Localstack будет запускать локальный экземпляр Docker, который может действовать как локальная конечная точка AWS и сразу же поддерживать множество сервисов и функций.

Положительные:

  • Единый фреймворк вместо использования нескольких плагинов
  • Независимость от языка - если вы в какой-то момент решите отказаться от бессерверного плагина
  • Он поддерживает все упомянутые вами сервисы: S3, API-шлюз, SQS, Dynamo db и SSM.
  • Он также сможет запускать AWS Lambda.

Минус:

  • AWS Lambdas будет выполняться в собственном временном контейнере Docker. Это означает, что у него не будет прямого доступа к всеобъемлющему Docker Localstack.
    Другими словами, выполнение функции Lambda через Localstack не сможет сразу вызвать Localstack API Gateway. Чтобы это работало, вы должны явно установить для параметра конечной точки в AWS SDK значение http: / localhost: xxxx (вместо https://apigateway.amazonaws.com)

(См. Этот код в качестве примера, где Lambda работает в собственном контейнере Docker, но во время тестов ему требуется доступ к автономному экземпляру EC2: https://github.com/spulec/moto/blob/master/tests/test_awslambda/test_lambda.py#L55)

Полное раскрытие: я сотрудничаю с Moto, который используется Localstack под капотом.

person Bert Blommers    schedule 07.04.2020