web-dev-qa-db-fra.com

Comment puis-je tester les fonctions AWS Lambda localement?

Expliquez-moi s'il vous plaît quelle est la meilleure façon de tester localement la fonction lambda. J'ai utilisé sam local et cette solution https://github.com/lambci/docker-lambda pour les tests, mais par exemple, lorsque j'appelle un lambda à partir d'une autre erreur se produit. En général, je ne peux pas créer de stubs pour les méthodes car lambda s'exécute dans un conteneur

9
Vladimir Boyko

Il y a quelques options. Les deux suivants sont populaires.

6
gayashanbc

Voici comment je teste les fonctions lambda locales sans frameworks sans serveur, je lance un post HTTP sur local (configuration assez simple pour Go)

  • découpler la logique lambda comme ceci:
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
}
  • la fonction principale vérifie ensuite s'il s'agit d'une instance locale, puis exécute le point de terminaison local, sinon démarre lambda
func main() {
    environment := loadEnv()
    if environment == "develop" {
        router.NewRouter()
        select {}
    } else {
        lambda.Start(lambdahandler.HandleRequest)
    }
}
  • entre les deux, vous avez un modèle d'adaptateur qui convertit votre demande http en tout ce que votre fonction lambda accepte, par exemple:
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
}
0
mel3kings