在API网关端点后面本地测试AWS Lambdas

时间:2015-12-26 10:06:09

标签: aws-lambda aws-api-gateway

AWS noob在这里。这是一个最佳实践发展问题' - 但我会尝试具体:

我知道我可以使用json文件在本地节点中测试Lambdas以进行输入,但是我不确定进行集成测试的最佳方法'我的网络应用程序,它将在S3中运行并调用Lambdas以响应API网关端点调用。

使用我的实际API网关配置文件可以让我在本地调用相同的方法并在本地执行我的Lambdas。本文建议不可能,但由于没有本地API网关测试环境:http://nickmchardy.com/blog/2015/09/my-thoughts-about-aws-api-gateway-working-with-aws-lambda

也许这还不清楚,例如:如果我在API网关中有一个用户/方法,使用GET和POST,它们分别连接到AWS中的listUsers.js和createUser.js Lambdas;在开发中我想调用:http://localhost:0000/users GET / POST并让它运行Lambdas并给出正确的响应,这样我就可以在本地运行我的整个架构。

显然,在网址上调用一​​个东西并不是特别复杂,所以我的问题更多:考虑到我将使用我的(Cloudfront!?JAWS!?)配置,这样做的最佳做法是什么?这些东西如何在AWS中链接在一起,我可以将其用于本地测试吗?

道歉,如果这不清楚或非常明显!

7 个答案:

答案 0 :(得分:15)

喔。答案显然是无服务器' (原JAWS):https://github.com/serverless/serverless。需要保持谷歌搜索,道歉!现在不确定是否要删除这个问题?!我想这对其他人有帮助吗?特别是无服务器是新的吗?

答案 1 :(得分:6)

目前,AWS API Gateway和AWS Lambda没有本地测试版本,但我们会将其视为功能请求。

答案 2 :(得分:3)

我们的套件(Bespoken Tools)将允许您完成此操作。本教程解释了如何: http://docs.bespoken.tools/en/latest/tutorials/tutorial_lambda_local/

简短摘要是:
1)安装bespoken工具
    npm install bespoken-tools -g
2)使用Lambda发起代理     bst proxy lamdba index.js
3)获取它打印出来的URL并在API网关中使用它 将API网关配置为HTTP集成,并使用在步骤2中启动代理时打印出的URL。

希望有所帮助!设置完成后,对API网关的调用将直接发送到笔记本电脑本地运行的Lambda。

答案 3 :(得分:2)

最近,我一直在使用ClaudiaJS来帮助我开发AWS Lambda。创建者还构建了名为claudia-api-builder的库,它将帮助您构建触发lambda事件的AWS API Gateway。在此框架中,您可以测试测试类中的端点,或者通过创建类似

的端点
var apiRequest = {
  context: {
    path: '/task',
    method: 'GET'
  },
  queryString: {
    name: 'mike'
  }
};
// This method will simulate your api gateway endpoint
api.router(apiRequest, {done: function(err, data){
  console.log(data);
}});

尽管这种方式并不容易理解,但至少它可以帮助我通过api网关对我的lambda api进行单元测试。

答案 4 :(得分:1)

不幸的是,无法在本地运行API网关。

我不确定是否有最佳做法,但我们所做的是在API网关中拥有相同API的多个副本:dev,staging和live API。我们没有选择使用阶段,因为端点将连接到相同的lambda函数,并且版本控制非常困难(现在它稍微好一些)。要创建单独的API和单独的Lambda函数,可以很容易地准备好三个设置。使用我们构建的一些shell脚本,我们可以部署到任何阶段。

缺点是你只能在网上发展,但对我们来说这并不是一个真正的缺点。

答案 5 :(得分:1)

我建议你做以下事情: 1.当你写一个lambda时,确保它不知道它叫什么(例如http),而是知道它需要从事件json知道的所有内容。

2.如果你已经完成了" 1"然后使用" grunt" :https://www.npmjs.com/package/grunt-aws-lambda 用自定义"事件"测试你的Lambda文件。 这将允许您将与lambs api网关分离的Lambda统一起来。

3.使用npm test建立一个带有http请求的E2E测试,以检查你的身体操控是否正确完成。

答案 6 :(得分:1)

您还可以使用aws-sam-local 首先你必须安装docker。接下来,请按照下列步骤操作:

$ npm install -g aws-sam-local
$ cd path/to/your/code
$ sam local start-api

CLI会将您的API函数映射到localhost URL。现在,您可以使用cURL,Postman或浏览器来查看API端点。