Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“讯息”:&引用;“内部服务器错误”;Lambda/API网关和iOS存在问题_Ios_Amazon Web Services_Amazon Dynamodb_Aws Lambda_Aws Api Gateway - Fatal编程技术网

&引用;“讯息”:&引用;“内部服务器错误”;Lambda/API网关和iOS存在问题

&引用;“讯息”:&引用;“内部服务器错误”;Lambda/API网关和iOS存在问题,ios,amazon-web-services,amazon-dynamodb,aws-lambda,aws-api-gateway,Ios,Amazon Web Services,Amazon Dynamodb,Aws Lambda,Aws Api Gateway,我已经设置了一个lambda函数,并在API网关中创建了一些GET和POST方法,在web应用程序中测试它们时,这些方法似乎工作得很好。 然后,我尝试调用使用移动集线器设置的iOS应用程序中的函数。这些功能也可以通过移动集线器在测试设施内正常工作,但是当我实际测试应用程序内的功能时,我得到: "message" : "Internal server error" 我知道这个错误不太容易处理,但我想不出一个更详细的错误描述的方法 有什么想法吗?这可能是因为Lambda函数未设置为返回HTTP状态

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

"message" : "Internal server error"
我知道这个错误不太容易处理,但我想不出一个更详细的错误描述的方法


有什么想法吗?

这可能是因为Lambda函数未设置为返回HTTP状态码

exports.handler = (event, context, callback) => {
    callback(null, 'Hello from Lambda');
};

应该可以解决这个问题。

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

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

以上所有答案对我都不起作用。我有一个许可问题。下面是我如何解决它的

上下文

这是我的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。我使用了本文提供的示例代码

诊断

在lambda控制台中,我在lambda上运行了一个测试事件。因为我的lambda是超级基本的,所以我使用了helloworld测试模板,命名为,并保存了它。测试成功了

我查看了cloudwatch日志,但找不到任何有用的东西。我是AWS的新手,所以我不确定是否需要设置任何设置

在api网关控制台中,我运行了一个测试事件。我刚刚在事件的标题中添加了
Content-Type:application/json
,并运行了测试。无论出于什么奇怪的原因,测试结果都会返回到浏览器的右侧,因此必须向右滚动才能看到它们

我得到以下结果:
由于配置错误执行失败:Lambda函数的权限无效

解决方案

我检查了api网关和lambda集成的基本terraform示例,发现我缺少
aws\u lambda\u权限
资源。这是授予api网关调用lambda函数的权限所必需的


对于那些不使用terraform的用户,可以链接到aws文档,了解如何创建适当的权限。

我对以下代码也有同样的问题:

exports.handler=异步事件=>{
log(“你好世界”);
返回{
状态代码:200,
正文:事件
};
};
要解决这个问题,我需要做的就是
JSON.stringify()
body

exports.handler=异步事件=>{
log(“你好世界”);
返回{
状态代码:200,
body:JSON.stringify(事件),//请尝试

  • 为API网关授予执行lambda权限
  • 勾选复选框:使用Lambda代理集成
  • 查询字符串、标题和正文的句柄空指针

  • 该错误是API Gateway告诉您Lambda函数没有正确响应。您需要查看Lambda函数的CloudWatch日志,以了解实际错误是什么。我已经修复了CloudWatch日志中出现的错误,现在没有错误,但我仍然得到相同的错误。当我将查询字符串参数更改为ju时st“?”消息更改为“message”:null“这确实不够继续。但是您是否尝试过通过API网关控制台对其进行测试?您是否尝试过在API Getway和Lambda之间使用代理集成?您能否解释一下“{statusCode:200,body:'Hello from Lambda'”是什么意思'是什么意思?如果我在回调中替换成功消息的这一部分以显示一些变量,如-let a=10;然后是回调(null,a);这一部分是Lambda函数调用响应。如果替换为“let a”,则为“a”将是函数响应。此返回格式仅在代理模式下使用API网关Lambda组合时才起作用。如果不选中代理选项,则可以返回您想要的任何内容,API网关将转发它。这花了我半天的时间,在看到您的答案后,我记得我以前也遇到过同样的问题使用相同的解决方案解决。非常感谢。我使用python btw和str(body)完成了这项工作。
    exports.handler = function(event, context, callback) {
      callback(null, {
        statusCode: '200',
        body: JSON.stringify({ 'message': 'hello world' }),
        headers: {
          'Content-Type': 'application/json',
        },
      });
    };