2017-10-09 6 views
0

Désireux de construire un microservice au sein de Lambda. Je veux qu'il soit accessible via une requête HTTP, donc je crois que j'ai besoin de le configurer avec la passerelle API. Je ne suis pas sûr si je devrais utiliser API Gateway Proxy Request Event ou API Gateway Proxy Response Event.Quelle est la meilleure façon d'installer et de tester l'API Lambda?

Toujours en termes d'authentification de l'utilisateur, quel est le meilleur moyen?

Je pense à utiliser Auth0 afin qu'un utilisateur envoie essentiellement un JWT avec la requête HTTP.

Merci

Répondre

1

J'utilise la passerelle API demande Proxy. Configurer le Integration Request à utiliser Use Lambda Proxy integration qui se traduira par la mise à jour Integration Response à Proxy integrations cannot be configured to transform responses.

Je puis traiter les réponses au sein de la fonction lambda lui-même. Par exemple, je vais avoir les éléments suivants pour une réponse positive:

context.succeed({ 
    statusCode: 200, 
    headers: { 'Content-Type': 'Application/json'}, 
    body 
}); 

Et pour un exemple de prévu échouer, je:

context.succeed({ 
    statusCode: 404, 
    headers: { 'Content-Type': 'Application/json'}, 
    body: JSON.stringify({'Error': error}) 
}); 

REMARQUE: Il est important de noter que j'utilise context.succeed sur la gestion des erreurs et non context.fail.

J'ai développé localement mon lambda dans Node et utilisé une combinaison de lambda-local et lambda-tester pour la fonctionnalité de débogage/test. Par exemple, je courrais la commande suivante pour passer dans le lambda et l'événement:

lambda-local -f ~/Desktop/lambdaNode/myNewAPI.js -e ~/Desktop/lambdaEvents/testEvent.json

Un événement exemple ressemblera à ceci:

{ 
     "queryStringParameters": 
     { 
      "param1": "1234567890", 
      "param2": "0987654321", 
     } 
} 

Pour mes tests unitaires, je lambda-tester ainsi mocha comme suit:

const LambdaTester = require('lambda-tester'); 
describe('handle my new lambda: ',() => { 

    it('should do exactly what I expect',() => { 
    return LambdaTester(myNewAPI.handler) 
     .event(testEvents.newLambdaEvent) 
     .expectSucceed((result) => { 
     expect(result.statusCode).to.equal(200); 
     }); 
    }); 
}); 

test ci-dessus avec npm test si vous êtes configuré pour que, par ailleurs juste mocha testFile

Pour mon cas d'utilisation, l'authentification est traitée différemment car il s'agit d'une API interne. Pour votre cas, je pense que JWT est la meilleure voie à suivre, même si je suis désolé de ne pouvoir fournir plus d'informations à ce sujet.

+0

Y a-t-il un moyen de développer cela localement? J'ai jeté un oeil à un paquet npm lambda-local mais je n'ai trouvé aucun moyen de tester une requête http sur la fonction lambda. Dans quel environnement avez-vous développé votre script? – Stretch0