Запуск лямбды локально с использованием отдельных автономных пакетов без сервера ИЛИ AWS SAM Local ИЛИ библиотека Moto - PullRequest
0 голосов
/ 16 марта 2020

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

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

  1. Должен ли я создать безсерверный проект, где автономные плагины без сервера, такие как
    • serverless- s3 -local
    • serverless- Динамо -local
    • serverless-offline- ssm
    • serverless-offline- DynamodB

Так, когда этот проект выполняется эти службы на указанном c порту на локальной машине.

Использовать SAM Local .

  • Для этого мне нужно написать шаблон sam, так как в настоящее время я использовал фреймворк serverless.com, где скорее есть serverless.yml чем шаблон sam.
  • Существует также плагин serverless-sam для экспорта serverless.yml в шаблон sam, однако, он выдает ошибку для нескольких частей в serverless.yml, так как для нескольких инфра сборок мы используем вывод выполнение terraform в serverless.yml.
  • Эта terraform недоступна для локальных. Так что в принципе у меня нет возможности использовать функцию экспорта плагина serverless-sam. Мне нужно создать отдельный проект, который будет иметь шаблон sam, содержащий спецификации всех зависимых AWS сервисов.

Использование Python Библиотека Moto: https://github.com/spulec/moto#stand -alone-server-mode

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

1 Ответ

0 голосов
/ 07 апреля 2020

Звучит как хороший вариант использования для Localstack

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

Позитивы:

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

Минусы:

  • AWS Лямбды будут выполняться в своем собственном временном контейнере Docker. Это означает, что он не будет иметь прямого доступа к всеобъемлющему Localstack Docker.
    Другими словами, выполнение функции 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)

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

...