Как локально отладить функцию AWS SAM Lambda (Python), которая ссылается на слой, существующий в другом репозитории / проекте git

Краткое изложение моей проблемы:

  • Я хочу иметь возможность локально запускать AWS SAM lambda (Python) и использовать отладчик для перехода к коду, который существует на уровне lambda.

Конфигурация проекта:

  • Репозиторий Git для лямбда-функции
  • Репозиторий Git для слоя, на который будет ссылаться функция

Чем я могу заниматься сейчас:

  • Использование руководства от здесь, используя AWS SAM local, я могу запустить отладчик только для лямбда, и это работает нормально, но я не могу перейти к методу, определенному в слое

Что происходит, когда я пытаюсь перейти на метод со слоя:

  • Используя отладчик vscode, я перенаправляюсь куда-то в лямбда-движок Python (файл: bootstrap.py), и я не могу перейти оттуда на уровень

Используемые мной технологии / библиотеки:

  • Python3.8 (лямбда, слой)
  • Отладчик: debugpy
  • IDE: vscode
  • Лямбда-фреймворк: AWS SAM

Команда, которую я запускаю (перед подключением через vscode к сеансу отладки):

sam local generate-event apigateway aws-proxy | sam local invoke MyFunction -d 5890 --event inputs/my_event.json

Шаблон AWS SAM (раздел функций) выглядит так:

MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub "${Environment}_${Branch}_my_function"
      CodeUri: my_function.zip
      Handler: app.handler
      Timeout: 180
      MemorySize: 512
      Layers: # to be substituted with layer arn
        - <LAYER_ARN>:<LAYER_VERSION>

Если я прав, когда я запускаю команду сверху, происходит следующее:

  1. Контейнер Docker создается из образа SAM Docker
  2. Контейнер Docker содержит слой, загруженный с AWS
  3. SAM распаковывает содержимое из my_function.zip и монтирует содержимое в контейнер докера.
  4. В контейнере Docker есть порт отладки 5890, поэтому мы можем подключиться из vscode (например) к сеансу отладки.

Моя теория заключается в том, что, пока уровень загружается с AWS, я не смогу увидеть этот код в сеансе отладки в vscode? Итак, одна вещь, о которой я думаю, но не уверен, возможно ли это, - вместо ссылки на LAYER_ARN я ссылаюсь на конкретную папку на моем локальном компьютере, где существует код слоя.

Вопрос 1: Если моя теория верна, можно ли это сделать и как? Вопрос 2: Если моя теория неверна, есть ли другие способы добиться отладки кода слоя в этой настройке?


person Bakir Jusufbegovic    schedule 04.02.2021    source источник


Ответы (1)


Я не уверен, сможем ли мы вызывать лямбда-слои с помощью SAM. Последнее, что я проверял, не работало. Однако вы можете вызвать лямбду следующим образом:

sam build "mylambda" && sam local invoke "mylambda"

Вышеупомянутое предназначено только для Python. Для node.js вы можете просто сделать

sam local invoke "mylambda"

Если вы хотите передавать события, вы можете сделать

sam build "mylambda" && sam local invoke "mylambda" -e mylambdaevt.json

Вы даже можете передавать переменные среды в другой файл json.

sam build "mylambda" && sam local invoke "mylambda" --env-vars local-env.json -e events/mylambdaevt.json
person Vishnu Pradeep    schedule 29.04.2021