Как я могу протестировать функции AWS Lambda локально?

Объясните мне, пожалуйста, как лучше всего локально протестировать лямбда-функцию. Я использовал sam local и это решение https://github.com/lambci/docker-lambda для тестирования, но, например, когда я вызываю одну лямбду из другой, возникает ошибка. В общем, я не могу делать заглушки для методов, так как лямбда работает в контейнере.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
0
22 942
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Есть несколько вариантов. Следующие два - некоторые популярные.

Если вы ищете что-то очень легкое, есть также несколько пакетов npmjs, которые позволяют это (NodeJS), например npmjs.com/package/lambda-local

Cukic0d 30.04.2019 15:05

Вот как я тестирую локальные лямбда-функции без бессерверных фреймворков, я запускаю HTTP-сообщение на локальном компьютере (довольно простая настройка для Go)

  • разделите лямбда-логику следующим образом:
func HandleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    _, _ = pretty.Println("parsed:", request.Body)
    return events.APIGatewayProxyResponse{Body: "response is working", StatusCode: 200}, nil
}
  • Затем функция main проверяет, является ли это локальным экземпляром, затем запускает локальную конечную точку post, иначе запускает лямбда
func main() {
    environment := loadEnv()
    if environment == "develop" {
        router.NewRouter()
        select {}
    } else {
        lambda.Start(lambdahandler.HandleRequest)
    }
}
  • между ними у вас есть шаблон адаптера, который преобразует ваш HTTP-запрос во все, что принимает ваша лямбда-функция, например:
func MapToApiGateway(w http.ResponseWriter, r *http.Request) (interface{}, error) {
    request := new(EmailResponderRequest)
    if err := json.NewDecoder(r.Body).Decode(request); err != nil {
        return err.Error(), err
    }
    apiGatewayRequest := mapHttpRequestToGatewayRequest(*request)
    events, err := lambdahandler.HandleRequest(nil, apiGatewayRequest)
    if err != nil {
        return err.Error(), err
    }
    return events, nil
}

Для локального ручного тестирования (не модульного тестирования) с sam cli вы можете указать файл переменных среды с опцией -n, --env-vars PATH и использовать свои реальные идентификаторы ресурсов, как вы обычно делаете в своем шаблоне Cloud Formation (дополнительную информацию см. В официальная документация).

Это должно позволить вам напрямую вызывать другие функции и использовать настоящую таблицу DynamoDB и все другие ресурсы облака AWS.

Примечание: если вы используете VSCode, вы можете попробовать это вспомогательное расширение.

Другие вопросы по теме