我已经设置了一个lambda函数,并在API网关中创建了一些GET和POST方法,这些方法在Web应用程序中进行测试时似乎工作正常。 然后我尝试调用使用移动集线器设置的iOS应用程序中的函数。这些功能也可以通过移动集线器在测试设备内部完美地工作,但是当我实际测试app中的功能时,我得到了:
"message" : "Internal server error"
我知道错误并不多,但我无法找到一种方法来获得更详细的错误描述。
有什么想法吗?
答案 0 :(得分:24)
这可能是因为您的Lambda函数未设置为返回HTTP状态代码。
从
改变exports.handler = (event, context, callback) => {
callback(null, 'Hello from Lambda');
};
到
exports.handler = (event, context, callback) => {
callback(null, { statusCode: 200, body: 'Hello from Lambda' });
};
应该解决问题。
答案 1 :(得分:0)
JSON.stringify()
解决了我的问题。 response.body
必须采用String
格式,而不是JSON
。我希望这会有所帮助。
exports.sendRes = (body, status = 200) => {
var response = {
statusCode: status,
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(body)
};
return response;
};
答案 2 :(得分:0)
另一个可能的原因可能是API网关(10MB)和/或Lambda(6MB)的有效负载/请求/响应限制
答案 3 :(得分:0)
以上所有答案均不适用于我。我遇到了权限问题。以下是我的解决方法。
上下文
这是我的lambda函数:
exports.handler = function(event, context, callback) {
callback(null, {
statusCode: '200',
body: JSON.stringify({ 'message': 'hello world' }),
headers: {
'Content-Type': 'application/json',
},
});
};
我使用terraform来配置api网关和lambda。我使用了blog post提供的示例代码。
诊断
在lambda控制台中,我在lambda上运行了一个测试事件。由于我的lambda非常基础,因此我使用了hello world测试模板,命名并保存了它。测试返回成功。
我检查了cloudwatch日志,但找不到任何用处。我是AWS的新手,因此不确定是否必须进行任何设置。
在api网关控制台中,我运行了一个测试事件。我只是将Content-Type:application/json
添加到事件的标题并运行了测试。出于任何奇怪的原因,测试结果都会在浏览器的右侧返回,因此必须滚动到右侧才能看到它们。
我得到了这个结果:Execution failed due to configuration error: Invalid permissions on Lambda function
解决方案
我检查了api网关和lambda集成here的基本terraform示例,并注意到我缺少aws_lambda_permission
资源。需要此权限才能授予api网关调用lambda函数的权限。
对于不使用terraform here的用户,该链接指向有关如何创建适当权限的aws文档。
答案 4 :(得分:0)
我在以下代码上遇到了同样的问题:
exports.handler = async event => {
console.log("hello world");
return {
statusCode: 200,
body: event
};
};
要解决所有问题,请JSON.stringify()
body
。
exports.handler = async event => {
console.log("hello world");
return {
statusCode: 200,
body: JSON.stringify(event), // <-- here
};
};
答案 5 :(得分:0)
请尝试