2017-10-09 62 views
0

希望在Lambda中构建一个微服务。设置和测试Lambda API的最佳方式是什么?

我希望它可以通过HTTP请求访问,所以我相信我需要使用API​​网关对其进行配置。我不确定我是否应该使用API Gateway Proxy Request EventAPI Gateway Proxy Response Event

同样在验证用户方面,最好的方法是什么?

我想使用Auth0,所以用户本质上只是发送一个JWT的HTTP请求。

谢谢

回答

1

我使用API​​网关代理请求。我配置Integration Request使用Use Lambda Proxy integration这将导致Integration Response更新到Proxy integrations cannot be configured to transform responses.

然后我处理lambda函数本身的响应。例如,我将有一个成功的响应如下:

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

并为预期失败的例子,我有:

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

注:注意我用的是很重要的context.succeed错误处理,而不是context.fail

我在Node中本地开发了我的lambda,并使用lambda-locallambda-tester的组合来调试/测试功能。例如,我会运行下面的命令在lambda和事件经过:

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

一个例子事件将是这样的:

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

对于我的单元测试,我用lambda-tester与摩卡沿如下:

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); 
     }); 
    }); 
}); 

测试上面npm test如果你设置为,否则只是mocha testFile

对于我的用例,身份验证的处理方式不同,因为它是一个内部API。对于你的情况,我认为智威汤逊是最好的方式,但我很抱歉无法提供更多信息。

+0

有什么办法可以在本地开发吗?我看了一个npm包lambda-local,但找不到任何方式来测试lambda函数上的http请求。你在什么环境下开发你的脚本? – Stretch0

相关问题