设置和测试Lambda API的最佳方法是什么?

时间:2017-10-09 19:58:13

标签: amazon-web-services lambda aws-api-gateway

想要在Lambda中构建微服务。

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

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

我在考虑使用Auth0,因此用户基本上只需发送带有HTTP请求的JWT。

由于

1 个答案:

答案 0 :(得分: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和mocha,如下所示:

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对其进行测试,否则只需RsaKeyPairGenerator

对于我的用例,身份验证的处理方式不同,因为它是内部API。对于你的情况,我认为JWT是前进的最好方式,虽然我很抱歉我无法提供更多这方面的信息。