我似乎无法使用amazon api网关设置我的错误集成响应

我添加了一个集成响应,但它没有返回400错误,而是继续返回200响应
{
"errorMessage": "foose",
"errorType": "Error",
"stackTrace": [
"exports.handler (/var/task/index.js:11:19)"
]
}
Run Code Online (Sandbox Code Playgroud) 我试图从AWS Lambda函数返回一个对象而不是一个简单的字符串.
// ...
context.fail({
"email": "Email address is too short",
"firstname": "First name is too short"
});
// ...
Run Code Online (Sandbox Code Playgroud)
我已经使用了errorMessage映射错误响应状态代码,这很好:
// ...
context.fail('That "username" has already been taken.');
// ...
Run Code Online (Sandbox Code Playgroud)
我只是想尝试做一些AWS API Gateway无法承受的事情吗?
我也已经发现这篇文章有所帮助:有没有办法更改Amazon API Gateway返回的http状态代码?.
http amazon-web-services http-response-codes aws-lambda aws-api-gateway
我们在AWS EC2实例上运行api.我们对AWS API Gateway感兴趣,可使用Cognito和版本控制对API调用进行身份验证.
任何人都可以告诉我如何在不公开的情况下允许访问EC2实例上托管的API?我只希望API Gateway访问该API.
我无法在文档中找到任何解决方案.
我正在尝试使用Amazon的AWS API网关来使用REST来支持传统的SOAP服务.我能够在Body Mapping Template中获取资源请求并基本上硬编码SOAP请求.调用SOAP服务并返回XML SOAP响应.到现在为止还挺好.
在Integration Response中,我需要使用这个SOAP信封(基本上只是XML)并将其映射回JSON模型.我不知道如何做到这一点,但我必须遗漏一些东西.以下代码将获得原始响应,但我没有看到任何方法来访问元素:
#set($inputRoot = $input.path('$'))
{
$input.body
}
Run Code Online (Sandbox Code Playgroud)
想象一下,我的回答如下:
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getProdResponse xmlns:ns1="urn:productlist">
<code xsi:type="xsd:string">100</return>
<message xsi:type="xsd:string">this is a book</return>
</ns1:getProdResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>Run Code Online (Sandbox Code Playgroud)
然后在Body Mapping Template中,我想做这样的事情:
#set($inputRoot = $input.path('$'))
{
"response-code" : "$input.Envelope.Body.getProdResponse.code",
"response-message" : "$input.Envelope.Body.getProdResponse.message"
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以写一个Lambda函数来调用SOAP服务,但这似乎并不合理.我运气不好吗?
我们想要使用API网关,我们需要Perfect Forward Secrecy(https://en.wikipedia.org/wiki/Forward_secrecy).
实现此目的的一种方法是在通过HTTPS/TLS1.2连接时将密码限制为基于Diffie Hellman的密码(即不允许RSA).有没有办法限制API网关中的密码?
或者,有没有办法配置API网关,使其不会终止HTTPS,而是将其转发给AWS负载均衡器(因为AWS负载均衡器确实支持限制密码套件)?
我的研究表明,API Gateway确实允许使用不支持Perfect Forward Secrecy的密码进行HTTPS连接.
谢谢!
如何使用API网关POST请求调用AWS步骤函数,并将请求的JSON有效负载调用到步骤函数?
我有超过5MB的样本json,
不使用Lambda集成时,请尝试发布请求
413 Request Too Long
Run Code Online (Sandbox Code Playgroud)
如果我使用lambda集成,它会给
502 Internal server error
Run Code Online (Sandbox Code Playgroud)
请求未达到我的lambda函数
在响应标题中,出现以下错误:
X-Cache: Error from cloudfront
Run Code Online (Sandbox Code Playgroud)
如果我使用模拟服务,它将正常工作并给出200响应。
根据Api文档,它最多支持10MB。
我想在请求中获取此json。
有什么办法吗?
我有一个AWS API Gateway方法,可以将请求代理到AWS Lambda.但是,日志中的以下内容在三秒后出现错误:
转换前的端点响应体:{"errorMessage":"2017-09-05T16:30:49.987Z 922186c0-9257-11e7-9db3-51921d5597a2任务在3.00秒后超时"}
因此,我继续检查我的Node 6.10 AWS Lambda函数,看看它为何超时.我在每个函数调用之前和之后都添加了日志语句.令人惊讶的是,它完成了它应该做的所有事情:称为API网关回调,然后在数据库之后运行查询.所有需要0.6秒,据我所知,没有其他代码可以运行.然而,它似乎继续运行三秒钟的剩余时间,然后超时.(我想,这是因为我要打开与数据库的连接.)
我在callback调用之前和之后放置的日志语句表明该调用在不到半秒的时间内执行.然而,该响应似乎没有进入API网关,而三秒后的错误确实如此.
可能是什么原因,我该如何调试呢?
我已经在API网关后面建立了一个Lambda函数,它可以很好地工作.我有一个托管网站,我只想要某个位置来访问API.
https://www.example.com/(从托管服务器提供html)
https://www.example.com/foobar(返回由Lambda生成并由AWS返回的JSON有效内容)
这是我的服务器块:
location = /foobar {
proxy_pass https://someawsuri;
proxy_redirect default;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过审阅文档并阅读多篇SO帖子,但我无法做到我想要的.我尝试过的所有东西都产生了错误502 Bad Gateway.
如何配置nginx向API网关发出请求?
谢谢.
我想将AWS机器的端口公开给Lambda函数,该函数集成到AWS Gateway API.出于安全考虑,我不想公开该端口.我们能做到吗?
aws-api-gateway ×10
aws-lambda ×5
amazon-ec2 ×2
json ×2
encryption ×1
http ×1
nginx ×1
node.js ×1
soap ×1
ssl ×1
xml ×1