我是亚马逊Lambda-API实施的初学者。
我只是部署一个非常简单的API:一个非常简单的lambda函数,使用Python 2.7打印" Hello World"我用API网关触发。但是,当我点击“调用网址”链接时,它会告诉我" {"消息":"内部服务器错误"} "
因此,我试图看看这里有什么问题,所以我点击了API本身,我可以看到以下在我的方法执行中是灰色的:" 集成响应:代理集成无法配置为转换回复。"
我测试了很多不同的配置,但我仍然面临同样的错误。我不知道为什么这一步是灰色的。
答案 0 :(得分:4)
尝试集成API网关和lambda函数时遇到了同样的问题。基本上,花了几个小时后,我发现了。 因此,在创建新资源或方法时,默认情况下会设置使用Lambda代理集成。
所以你需要删除它。按照集成请求并取消选中使用Lambda代理集成
完成此操作后再次部署API并测试功能。 Also, this topic will explain what's happening under the hood.
祝你好运......答案 1 :(得分:3)
Lambda响应应采用特定格式供API网关处理。您可以在帖子中找到详细信息。 https://aws.amazon.com/premiumsupport/knowledge-center/malformed-502-api-gateway/
exports.handler = (event, context, callback) => {
var responseBody = {
"key3": "value3",
"key2": "value2",
"key1": "value1"
};
var response = {
"statusCode": 200,
"headers": {
"my_header": "my_value"
},
"body": JSON.stringify(responseBody),
"isBase64Encoded": false
};
callback(null, response);
答案 2 :(得分:0)
我开发前端时,我的API在Postman中工作,但不在本地工作。尝试在我的资源上为GET,POST和OPTIONS启用CORS时遇到相同的错误,并且在@aditya答案中进行搜索后,使我走上了正确的轨道,但是我不得不对代码进行些微调整。
我需要添加res.statusCode
和两个标头,然后它开始工作。
// GET
// get all myModel
app.get('/models/', (req, res) => {
const query = 'SELECT * FROM MyTable'
pool.query(query, (err, results, fields) => {
//...
const models = [...results]
const response = {
data: models,
message: 'All models successfully retrieved.',
}
//****** needed to add the next 3 lines
res.statusCode = 200;
res.setHeader('content-type', 'application/json');
res.setHeader('Access-Control-Allow-Origin', '*');
res.send(response)
})
})