“消息”:Lambda / API网关和iOS的“内部服务器错误”问题

问题描述 投票:8回答:3

我已经设置了一个lambda函数,并在API网关中创建了一些GET和POST方法,这些方法在Web应用程序中进行测试时似乎工作正常。然后我尝试调用使用移动集线器设置的iOS应用程序中的函数。这些功能也可以通过移动集线器完美地在测试设备内部工作,但是当我实际测试应用程序内部的功能时,我得到:

"message" : "Internal server error"

我知道这个错误并不多,但我无法找到一种方法来获得更详细的错误描述。

有任何想法吗?

ios amazon-web-services amazon-dynamodb aws-lambda aws-api-gateway
3个回答
25
投票

这可能是因为您的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
投票

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;
};

0
投票

另一个可能的原因可能是API网关(10MB)和/或Lambda(6MB)上的有效负载/请求/响应限制


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文档的链接。

© www.soinside.com 2019 - 2024. All rights reserved.