How can I test AWS Lambda functions locally?

前端 未结 3 947
Happy的楠姐
Happy的楠姐 2021-02-04 05:48

Explain to me please what is the best way to locally test the lambda function. I used sam local and this solution https://github.com/lambci/docker-lambda for testin

3条回答
  •  闹比i
    闹比i (楼主)
    2021-02-04 06:31

    This is how I test local lambda functions without Serverless frameworks, I run an HTTP post on local (quite easy setup for Go)

    • decouple lambda logic like so:
    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 function then checks if it is a local instance then run local post endpoint, else start lambda
    func main() {
        environment := loadEnv()
        if environment == "develop" {
            router.NewRouter()
            select {}
        } else {
            lambda.Start(lambdahandler.HandleRequest)
        }
    }
    
    • in between you have an Adapter Pattern that converts your http request to whatever your lambda function accepts, for example:
    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
    }
    

提交回复
热议问题