Articles of aws api gateway

如何从AWS Api网关获取根path“/”资源?

我一直在尝试使用NodeJs AWS SDK从AWS Api Gateway的path“/”(root)检索资源。 我知道天真的解决办法就是这样做: var AWS = require('aws-sdk'); var __ = require('lodash'); var Promise = require('bluebird'); var resources = []; var apiGateway = Promise.promisifyAll(new AWS.APIGateway({apiVersion: '2015-07-09', region: 'us-west-2'})); var _finishRetrievingResources = function (resources) { var orderedResources = __.sortBy(resources, function (res) { return res.path.split('/').length; }); var firstResource = orderedResources[0]; }; var _retrieveNextPage = function […]

为什么我的Lambda函数超时,即使API网关callback已被调用?

我有一个AWS API网关方法,通过AWS Lambda代理请求。 但是,它在三秒钟后在日志中出现以下错误: 转换前的端点响应主体:{“errorMessage”:“2017-09-05T16:30:49.987Z 922186c0-9257-11e7-9db3-51921d5597a2任务在3.00秒后超时”} 因此,我继续检查我的Node 6.10 AWS Lambda函数,看看它为什么会超时。 我在每个函数调用之前和之后添加了日志logging。 令人惊讶的是,它做了所有它应该做的事情:称为API网关callback,然后对数据库运行一个查询。 所有需要0.6s的,据我所知,没有其他的代码需要运行。 尽pipe如此,它似乎继续在三秒钟的其余时间运行,然后超时。 (这是,我想,因为我打开数据库的连接。) 我在callback调用之前和之后放置的日志语句表明,该调用在半秒内执行。 然而,这种回应似乎并没有使它成为API网关,而三秒钟后的错误呢。 这可能是什么原因,我该如何debugging呢?

使用节点MySQ的无服务器框架,错误PROTOCOL_INCORRECT_PACKET_SEQUENCE

在AWS Lambda NodeJS(使用无服务器框架)上实施简单查询时遇到困难。 在本地运行它,但是当我将它上传到AWS,然后尝试使用API​​网关端点运行它时,出现此错误: { "code": "PROTOCOL_INCORRECT_PACKET_SEQUENCE", "fatal": true } 我无法find任何反应在谷歌,stackoverflow或git关于这个错误的问题。 而我无法弄清楚我做错了什么。 这就是我想要的。 var mysql = require('mysql'); var connection = mysql.createConnection({ host : '', user : '', password : '', database : '' }); function getLists (client_id,api_key,callback){ connection.query("SELECT * FROM list WHERE client_id = ?", [ client_id],function(error, results){ connection.end(); callback(error,results); } ); }; module.exports.run = […]

AWS Lambda,API网关返回格式错误的Lambda代理响应502错误

经过大量的谷歌search和几个小时的试错,我找不到为什么我得到这个错误消息: 由于configuration错误,执行失败:Lambda代理响应格式错误 当我使用testinglambdafunction运行lambda时,它工作正常。 对这个状态的类似问题的答案,来自lambda的响应需要符合这种格式: { "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", … }, "body": "…" } 下面是我使用的lambda(遵守这种格式): 'use strict'; var aws = require('aws-sdk'); var ses = new aws.SES(); var RECEIVER = "XXXX@XXXX.com"; var SENDER = "XXXX@XXXX.com"; const response_success = { 'isBase64Encoded': false, 'statusCode': 200, 'headers': { 'Content-Type': 'application/json', }, body: JSON.stringify({ message: 'ok' […]

AWS Lambda返回PDF文件

我创build了一个使用无服务器的lambda函数。 这个函数是通过GET请求的API网关触发的,并且应该从缓冲区中返回一个pdf文件。 我正在使用html-pdf创build缓冲区,并尝试使用以下命令返回PDF文件 let response = { statusCode: 200, headers: {'Content-type' : 'application/pdf'}, body: buffer.toString('base64'), isBase64Encoded : true, }; return callback(null, response); 但浏览器只是无法加载PDF,所以我不知道如何将PDF文件直接返回到浏览器。 无法find解决scheme。

离子内容只有在点击SideMenu后才显示出来

我有一个离子的应用程序工作正常,但现在它显示有点怪异的行为,当我运行该应用程序它不显示数据,但是当我点击侧面菜单一次或两次,然后加载并显示数据。 我有一个nodejs api从数据来到我的应用程序和相同的api已被放在aws api网关,我注意到这种行为,因为我实现了aws sdk绑定数据在我的APP。 什么可能是相同的根本原因? 我可以分享代码,但我不确定问题出在控制器还是视图中?

如何在无服务器框架中为POST端点添加请求模型

如何为POST端点添加请求模型,以便在导出API for iOS时显示在API网关中? 我可以在AWS中手动添加请求模型,但是由于这是通过服务器部署的,所以我需要在那里。 我看到有一个responseModels定义端点,但我看不到一个requestModels? 我的s-functions.json有这个 "endpoints": [ { "path": "blog/graphql", "method": "POST", "type": "AWS", "authorizationType": "AWS_IAM", "authorizerFunction": false, "apiKeyRequired": false, "requestParameters": {}, "requestTemplates": { "application/json": "{\"query\" : $input.json(\"$\")}" }, "responses": { "400": { "statusCode": "400" }, "default": { "statusCode": "200", "responseParameters": {}, "responseModels": {}, "responseTemplates": {}, "application/json": "" } } } ] 在AWS APIGateway中,我需要手动添加请求模型 […]

以编程方式创buildaws API密钥并将其添加到单一function的使用计划?

我需要: 创buildAPI密钥 将新创build的API密钥添加到使用计划 在文档之后 ,我可以通过调用apigateway.createApiKey()来生成API key ,然后通过调用另一个函数来为该生成的api密钥添加使用计划。 apigateway.createUsagePlanKey()对于以后的情况似乎是最合适的function。 我可以在单个函数中执行这两个function吗,而不是象任何生成一个新的API密钥的函数那样分别调用两个函数并添加一个使用计划?

根据Swagger API定义来检查JSON负载是否有效

我正在使用swagger来定义我的API和API网关来承载这个API。 我发现下面的lib( 请参阅这里 )将我的API定义导入到AWS,并自动创buildAPI(模型,端点等)。 这个很酷。 但是,它无法validation基于模型的请求(在Swagger定义中定义)。 这意味着您可以发送没有必填字段的JSON负载。 我不想编写node.JS代码来检查格式,因为模式更新不会太简单。 我想知道是否有可能检查JSON有效载荷是否与在swagger(在“definitions”部分中定义的对象)中定义的特定types的对象兼容。 如果可能的话,它将允许我只更新我的大摇大摆的定义。 谢谢,罗曼。

AWS Api网关:如何处理授权,身份validation,SSO等

我正在评论几种使用微服务结合api网关重新开发node.js restful单片应用程序的方法。 在使用aws api网关看来,虽然似乎有一些项目,我一直没能find很多的文件。 首先,我devise的应用程序必须能够支持SSO,我希望用户能够通过创build本地login或使用其当前的Facebook,Twitter等社交帐户进行注册。 这个过程如何被aws api网关处理,尤其是因为我需要使用自定义的数据库来写和读,更不用说授权用户了。 另外,例如,我的微服务有以下有限的上下文: 帐户(login,注册,档案pipe理), 计费(由于运行时间可能不适合无服务器,可能会selectdocker + ec2), 朋友(build立朋友关系), 文件(用户可以上传图片和video到他们的时间线 – 似乎是另一个docker+ ec2候选人); 我想使用api网关来保护所有的微服务端点,除了那些特定于login和注册的微端服务端点,应该怎么做呢? Node.js包含一个包,似乎通过Facebook,Twitter,本地等称为护照处理jwt和authentication用户,我可以使用这个与api网关authentication? 另外,如果api网关正在保护微服务,请求对象和响应对象如何在网关和微服务之间传递以满足各种请求? 此外,如果我决定构build一个自定义api网关,其中的网关正在监听另一个端口并包含在单独的docker容器中,它应该如何调整其他docker容器中侦听其他端口的微服务的权限? 简而言之,任何真正遍历这个过程并回答上面列出的问题的文档都是非常有用的。 此外,如果我以错误的方式看待这个问题或者提出错误的问题,那么在这方面的build议也会有所帮助。