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





Есть несколько вариантов. Следующие два - некоторые популярные.
Вот как я тестирую локальные лямбда-функции без бессерверных фреймворков, я запускаю 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
}
func main() {
environment := loadEnv()
if environment == "develop" {
router.NewRouter()
select {}
} else {
lambda.Start(lambdahandler.HandleRequest)
}
}
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, вы можете попробовать это вспомогательное расширение.
Если вы ищете что-то очень легкое, есть также несколько пакетов npmjs, которые позволяют это (NodeJS), например npmjs.com/package/lambda-local