此处为AWS noob。这有点像"最佳实践开发问题",但我会尽量具体一点:
我知道我可以用json文件在节点中本地测试Lambdas进行输入,但我不确定"集成测试"我的web应用程序的最佳方式,该应用程序将在S3中运行,并响应API网关端点调用调用调用Lambdas。
使用我实际的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/usersGET/POST,让它运行Lambdas并给出正确的响应,这样我就可以在本地运行我的整个体系结构。
显然,在url上调用一个东西并不是特别复杂,所以我的问题更多:考虑到我将拥有我的(Cloudfront!?JAWS!?)配置,以了解这些东西如何在AWS中链接在一起,这样做的最佳实践是什么?我能利用它进行本地测试吗?
如果这一点不清楚或非常明显,请道歉!
哦。答案显然是"Serverless"(以前的JAWS):https://github.com/serverless/serverless。需要继续在谷歌上搜索,抱歉!现在不确定是否删除此问题?!我想这可能对其他人有帮助?尤其是在无服务器时代?
目前,AWS API网关和AWS Lambda没有本地测试版本,但我们将考虑作为功能请求。
我们的套件(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网关中使用该URL
将API网关配置为HTTP集成,并使用步骤2中启动代理时打印的URL。
希望能有所帮助!设置好后,对API网关的调用将直接到达在笔记本电脑上本地运行的Lambda。
最近,我一直在使用ClaudiaJS来帮助我开发AWS Lambda。创建者还构建了这个名为claudia-api-builder的库,它将帮助您构建触发lambda事件的AWS api网关。在这个框架内,您可以在测试类中测试端点,或者通过创建类似的东西来测试端点
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进行单元测试。
您也可以使用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的终点。
不幸的是,无法在本地运行API网关。
我不确定是否有最佳实践,但我们所做的是在API网关中拥有同一个API的多个副本:一个开发、分段和实时API。我们没有选择使用stage,因为端点将连接到同一个lambda函数,版本控制非常困难(现在好多了)。要创建单独的API和单独的Lambda函数,很容易准备好三个设置。使用我们构建的几个shell脚本,我们可以部署到任何阶段。
缺点是你只能在网上进行开发,但对我们来说,这并不是一个真正的缺点。
我建议您执行以下操作:1.当您编写lambda时,请确保它不知道是什么调用了它(例如http),而是知道它需要从事件json中知道的所有信息。
2.如果你已经完成了"1",那么使用"咕哝":https://www.npmjs.com/package/grunt-aws-lambda用于使用自定义"事件"文件测试Lambda。这将允许您将Lambda从aws-api网关中分离出来进行统一测试。
3.使用npm测试构建一个带有http请求的E2E测试,以检查你的身体操作是否正确。