在 API 个网关端点后面本地测试 AWS Lambda
Testing AWS Lambdas locally behind API Gateway endpoints
这里是 AWS 菜鸟。这有点 'best practice development question' - 但我会尽量具体:
我知道我可以使用 json 文件在本地测试节点中的 Lambdas 输入,但我不确定 'integration test' 我的网络应用程序的最佳方式,它将 运行 在 S3 中调用 Lambdas 以响应 API 网关端点调用。
使用我实际的 API 网关配置文件使我能够在本地调用相同的方法并在本地执行我的 Lambda 会很棒。本文表明这是不可能的,但由于没有本地 API 网关测试环境:http://nickmchardy.com/blog/2015/09/my-thoughts-about-aws-api-gateway-working-with-aws-lambda
也许这还不清楚,举个例子:如果我在 API 网关中有一个 users/ 方法,使用 GET 和 POST,它们连接到 listUsers.js 和 createUser.js 分别在 AWS 中的 Lambda;在开发中,我想调用:http://localhost:0000/users GET/POST 并让它 运行 Lambdas 并给出正确的响应,这样我就可以在本地 运行 我的整个架构。
显然在 url 调用一个东西并不是特别复杂,所以我的问题更多:考虑到我将拥有我的(Cloudfront!?JAWS!?)配置,这样做的最佳实践是什么这些东西如何 link 在 AWS 中组合在一起,我是否可以将其用于本地测试?
如果不清楚或非常明显,我们深表歉意!
不幸的是,无法在本地 运行 API 网关。
我不确定是否有最佳实践,但我们所做的是在 API 网关中拥有相同 API 的多个副本:开发、暂存和实时 API。我们没有选择使用阶段,因为端点将连接到同一个 lambda 函数,而且版本控制非常困难(现在好一些了)。创建单独的 APIs 和单独的 Lambda 函数很容易准备好三个设置。使用我们构建的几个 shell 脚本,我们可以部署到任何阶段。
缺点是只能在线开发,不过对我们来说这算不上什么缺点。
哦。答案显然是 'Serverless'(以前的 JAWS):https://github.com/serverless/serverless。需要继续谷歌搜索,抱歉!现在不确定是否删除这个问题?!我想这可能对其他人有帮助?尤其是无服务器是新事物?
目前,AWS API Gateway 和 AWS Lambda 没有本地测试版本,但我们会考虑作为功能请求。
我建议您执行以下操作:
1.When 你写一个 lambda 确保它不知道调用它的是什么(例如 http),而是它知道它需要从事件中知道的所有信息 json。
2.If 你已经完成了“1” 然后使用 "grunt" :https://www.npmjs.com/package/grunt-aws-lambda
用于使用自定义 "event" 文件测试您的 Lambda。
这将允许您将 Lambda 与 aws api 网关分开进行统一测试。
3.use npm test 使用 http 请求构建 E2E 测试以检查您的 body 操作是否正确完成。
最近,我一直在使用 ClaudiaJS 来帮助我进行 AWS Lambda 开发。创建者还构建了这个名为 claudia-api-builder 的库,它将帮助您构建触发 lambda 事件的 AWS API 网关。在此框架内,您可以在测试 class 中测试端点,或者通过创建类似
的内容来测试端点
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 进行单元测试。
我们的套件 (Bespoken Tools) 将允许您完全做到这一点。本教程解释了如何:
http://docs.bespoken.tools/en/latest/tutorials/tutorial_lambda_local/
简短的总结是:
1) 安装定制工具
npm install bespoken-tools -g
2) 使用您的 Lambda
启动代理
bst proxy lamdba index.js
3) 获取它打印出来的 URL 并在 API Gateway
中使用它
将 API 网关配置为 HTTP 集成,并使用在步骤 2 中启动代理时打印出的 URL。
希望对您有所帮助!设置完成后,对 API 网关的调用将直接到达笔记本电脑本地的 Lambda 运行。
您也可以使用aws-sam-local
首先你必须安装docker。接下来,执行以下步骤:
$ npm install -g aws-sam-local
$ cd path/to/your/code
$ sam local start-api
CLI 会将您的 API 函数映射到本地主机 URL。现在您可以使用 cURL、Postman 或您的浏览器来访问 API 端点。
这里是 AWS 菜鸟。这有点 'best practice development question' - 但我会尽量具体:
我知道我可以使用 json 文件在本地测试节点中的 Lambdas 输入,但我不确定 'integration test' 我的网络应用程序的最佳方式,它将 运行 在 S3 中调用 Lambdas 以响应 API 网关端点调用。
使用我实际的 API 网关配置文件使我能够在本地调用相同的方法并在本地执行我的 Lambda 会很棒。本文表明这是不可能的,但由于没有本地 API 网关测试环境:http://nickmchardy.com/blog/2015/09/my-thoughts-about-aws-api-gateway-working-with-aws-lambda
也许这还不清楚,举个例子:如果我在 API 网关中有一个 users/ 方法,使用 GET 和 POST,它们连接到 listUsers.js 和 createUser.js 分别在 AWS 中的 Lambda;在开发中,我想调用:http://localhost:0000/users GET/POST 并让它 运行 Lambdas 并给出正确的响应,这样我就可以在本地 运行 我的整个架构。
显然在 url 调用一个东西并不是特别复杂,所以我的问题更多:考虑到我将拥有我的(Cloudfront!?JAWS!?)配置,这样做的最佳实践是什么这些东西如何 link 在 AWS 中组合在一起,我是否可以将其用于本地测试?
如果不清楚或非常明显,我们深表歉意!
不幸的是,无法在本地 运行 API 网关。
我不确定是否有最佳实践,但我们所做的是在 API 网关中拥有相同 API 的多个副本:开发、暂存和实时 API。我们没有选择使用阶段,因为端点将连接到同一个 lambda 函数,而且版本控制非常困难(现在好一些了)。创建单独的 APIs 和单独的 Lambda 函数很容易准备好三个设置。使用我们构建的几个 shell 脚本,我们可以部署到任何阶段。
缺点是只能在线开发,不过对我们来说这算不上什么缺点。
哦。答案显然是 'Serverless'(以前的 JAWS):https://github.com/serverless/serverless。需要继续谷歌搜索,抱歉!现在不确定是否删除这个问题?!我想这可能对其他人有帮助?尤其是无服务器是新事物?
目前,AWS API Gateway 和 AWS Lambda 没有本地测试版本,但我们会考虑作为功能请求。
我建议您执行以下操作: 1.When 你写一个 lambda 确保它不知道调用它的是什么(例如 http),而是它知道它需要从事件中知道的所有信息 json。
2.If 你已经完成了“1” 然后使用 "grunt" :https://www.npmjs.com/package/grunt-aws-lambda 用于使用自定义 "event" 文件测试您的 Lambda。 这将允许您将 Lambda 与 aws api 网关分开进行统一测试。
3.use npm test 使用 http 请求构建 E2E 测试以检查您的 body 操作是否正确完成。
最近,我一直在使用 ClaudiaJS 来帮助我进行 AWS Lambda 开发。创建者还构建了这个名为 claudia-api-builder 的库,它将帮助您构建触发 lambda 事件的 AWS API 网关。在此框架内,您可以在测试 class 中测试端点,或者通过创建类似
的内容来测试端点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 进行单元测试。
我们的套件 (Bespoken Tools) 将允许您完全做到这一点。本教程解释了如何: http://docs.bespoken.tools/en/latest/tutorials/tutorial_lambda_local/
简短的总结是:
1) 安装定制工具
npm install bespoken-tools -g
2) 使用您的 Lambda
启动代理
bst proxy lamdba index.js
3) 获取它打印出来的 URL 并在 API Gateway
中使用它
将 API 网关配置为 HTTP 集成,并使用在步骤 2 中启动代理时打印出的 URL。
希望对您有所帮助!设置完成后,对 API 网关的调用将直接到达笔记本电脑本地的 Lambda 运行。
您也可以使用aws-sam-local 首先你必须安装docker。接下来,执行以下步骤:
$ npm install -g aws-sam-local
$ cd path/to/your/code
$ sam local start-api
CLI 会将您的 API 函数映射到本地主机 URL。现在您可以使用 cURL、Postman 或您的浏览器来访问 API 端点。