AWS API Gateway 始终返回 502 bad gateway

2024-03-07

我在 AWS 中创建了一个简单的 lambda 函数,它从 DynamoDB 返回列表。我还创建了 API Gateway 来触发 lambda 函数。当我在 AWS 控制台中测试时,该函数运行良好。但是当我在 Postman 中测试此功能时,我总是收到 502 bad gateway Below 错误。 ({ "message": "内部服务器错误" }

下面是node.js中的函数:

const doc = require('dynamodb-doc');

const dynamo = new doc.DynamoDB();

/**
 * Provide an event that contains the following keys:
 *
 *   - operation: one of the operations in the switch statement below
 *   - tableName: required for operations that interact with DynamoDB
 *   - payload: a parameter to pass to the operation being performed
 */
exports.handler = async (event) => {

    const operation = event.operation;
    const payload = event.payload;

    if (event.tableName) {
        payload.TableName = event.tableName;
    }

    switch (operation) {
        case 'create':
            return await dynamo.putItem(payload).promise();
        case 'read':
            return await dynamo.getItem(payload).promise();
        case 'update':
            return await dynamo.updateItem(payload).promise();
        case 'delete':
            return await dynamo.deleteItem(payload).promise();
        case 'list':
            return await dynamo.scan(payload).promise();
        case 'echo':
            return payload;
        case 'ping':
            return 'pong';
        default:
            throw new Error(`Unrecognized operation "${operation}"`);
    }
};

以下是生成的 API 网关端点详细信息。

API endpoint: https://iabzqisam7.execute-api.us-east-1.amazonaws.com/test/moneyAppDynamoDBOperationsLambda
Authorization: NONE
Method: ANY
Resource path: /moneyAppDynamoDBOperationsLambda
Stage: test

以下是我尝试使用 Postman 测试 API 的方法:

 Postman  URL(Get) : https://iabzqisam7.execute-api.us-east-1.amazonaws.com/test/moneyAppDynamoDBOperationsLambda

    Headers: Key: content-type, Value: application/json
    Body (raw) :
    {
        "operation": "list",
        "tableName": "Advertiser",
        "payload": {
            "TableName": "Advertiser"
        }
    }

它在 AWS 控制台中运行得非常好。

知道为什么我在从 Postman 调用 API Gateway 时不断收到 502 bad gateway 错误吗?


502 Bad Gateway Exception,通常是返回不兼容的输出 来自 Lambda 代理集成后端,偶尔用于 由于负载过重而导致乱序调用。

API 网关输出不会告诉您问题与 Lambda 错误或 API 网关或策略问题有关。

API 网关返回 502,这意味着它不理解 Lambda 返回的输出,并为您提供 {“message”: “Internal server error”} 502。

使用 API 网关上的启用日志记录进行调试

创建新的 IAM 角色以允许 API Gateway 将日志推送到 CloudWatch。 附以下政策附件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents",
                "logs:GetLogEvents",
                "logs:FilterLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

信托政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

在 API Gateway 控制台中 --> 转到设置 -> 添加 API Gateway-CloudWatch 日志记录角色的 ARN --> '保存'

转到您的 API 阶段。在“CloudWatch 设置”下,选择“启用 CloudWatch Logs”。将“日志级别”设置为“信息”。选择“记录完整请求/响应数据”。

请检查日志并分享有问题的错误日志。

  • 如何查看外部调用的 AWS Gateway 日志? https://stackoverflow.com/questions/33042498/how-can-i-see-aws-gateway-logs-for-external-calls

    用于代理集成的 Lambda 函数的输出格式

如果函数输出的格式不同或格式错误,API Gateway 将返回 502 Bad Gateway 错误响应。

  • https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
  • https://aws.amazon.com/premiumsupport/knowledge-center/malformed-502-api-gateway/ https://aws.amazon.com/premiumsupport/knowledge-center/malformed-502-api-gateway/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS API Gateway 始终返回 502 bad gateway 的相关文章

随机推荐

  • 为什么记录器建议每个类使用一个记录器?

    根据 NLog 的文档 大多数应用程序将为每个类使用一个记录器 其中记录器的名称与类的名称相同 这与 log4net 的操作方式相同 为什么这是一个好的做法 使用 log4net 每个类使用一个记录器可以轻松捕获日志消息的来源 即写入日志的
  • Scala:当两个项目之一满足某些条件时进行模式匹配

    我经常编写比较两个对象的代码 并根据它们是否相同或不同 根据它们的不同之处 生成一个值 所以我可能会写 val result v1 v2 match case Some value1 Some value2 gt a case Some v
  • 工人、网络或服务;无论如何要访问窗口对象?

    我正在尝试在 webOS 中利用 Web Worker 来进行标牌应用程序 因为存在一个奇怪的错误 即使用 SCAP API 执行文件下载之间的时间呈指数级减慢 我的想法是尝试网络工作人员下载文件 希望这意味着问题会消失 应用程序会更快一些
  • 将 MySql 与 Entity Framework 4 和代码优先开发 CTP 结合使用

    我想我应该尝试一下 Scott Guthrie 的最新的帖子 http weblogs asp net scottgu archive 2010 07 16 code first development with entity framew
  • 在 Winforms 中将属性绑定到控件

    将属性绑定到控件的最佳方法是什么 以便当属性值更改时 控件的绑定属性也会随之更改 所以如果我有房产FirstName我想将其绑定到文本框txtFirstName文本值 所以如果我改变FirstName值 Stack 然后属性txtFirst
  • 将所有列表值增加一个增量[重复]

    这个问题在这里已经有答案了 我觉得我现在正经历一个白痴时刻 我有一个清单 我需要为每个数字加上 170 list1 1 2 3 4 5 6 7 8 list2 171 172 173 具体答复 使用列表理解 In 2 list1 1 2 3
  • 根据文字大小调整图像大小

    下面的 PHP 代码生成文本作为动态创建的图像 我如何才能使图像仅与文本一样大 谢谢
  • MDX 按维度属性计算的成员过滤器

    我想创建一个计算成员并按维度过滤它 这是工作示例 Policy Policy Status Void Policy Tran Type Renewal Measures FK Policy Distinct Count 但如果我想像这样过滤
  • 使用 jcc 在 pylucene/inheritance 中编写自定义分析器?

    我想用 pylucene 编写一个自定义分析器 通常在java lucene中 当你编写一个分析器类时 你的类继承了lucene的Analyzer类 但 pylucene 使用 jcc 即 java 到 c python 编译器 那么如何使
  • 使用 unittest.mock 在 Python 中模拟 os.remove

    我该如何嘲笑os remove with unittest mock 我的尝试 使用pytest def test patch remove with patch os remove remove foo 给出错误 remove foo E
  • Python:在循环内仅打印一次

    我有一个代码 我想从相机捕获视频 我想使用 Python 的日志库在 shell 上获取消息或将它们导出到文本文件 这是我的代码的一部分 在 while 循环内我想打印相机打开成功 import numpy as np import cv2
  • 在 php 中清理整个 $_POST 数组的好方法是什么? [复制]

    这个问题在这里已经有答案了 我有一个包含很多变量的表单 然后发送电子邮件 而不是清理每个变量 POST价值与filter var POST var FILTER SANITIZE STRING 我正在寻找一段更简单的代码 我想出了下面的内容
  • knit:在 Rmd 文档中编织单独的 Rnw 文档

    我有一个 R markdown 主文档 Rmd 我想在其中knit一些separate其中一个块中的 Rnw 文档 无子文档 然而 当我打电话时knit在Rnw文档上 包含的R代码块似乎没有被处理 导致尝试运行时出错texi2pdf在他们
  • 如何在 WPF 中播放 .flv 文件?

    如何在 WPF 中播放 flv 文件 请任何人帮助我 Create the interop host control var host new WindowsFormsHost Create the ActiveX control var
  • matlab中的散点极坐标图

    我正在尝试绘制楔形图 赤经与红移 我想我可以在极坐标中使用散点图 matlab中的极坐标函数似乎非常有限 甚至这个 polar a 1 a 2 Linewidth 1 给我一个错误 Error using polar line 23 Too
  • 在我的 math.h 中找不到 log2?

    我正在使用相当新安装的 Visual C 2008 Express 我正在尝试编译一个使用 log2 函数的程序 该程序是通过在 Mac 上使用 Eclipse 找到的 但是这台 Windows 计算机找不到该函数 错误 C3861 log
  • 通过 Segue 传递数据 (swift 2)

    这是一个小费计算器项目 它必须有一个设置视图 我可以在其中选择默认小费率 我在传递数据时遇到一些问题 当我选择默认小费百分比时 它在视图控制器中不会更改 而且我想让应用程序在关闭应用程序并重新打开时记住默认费率 如果有人纠正我的代码并对其进
  • 具有一个参数的多个构造函数

    因此 在学校我们接到了一项作业 用 OOP 制造一辆汽车 到目前为止 这一切都非常简单和直接 但现在我需要创建四个构造函数 一个不带参数 两个带一个参数 一个带两个参数 据我所知 重载的工作方式是检查您提供的参数数量 然后检查它必须使用哪个
  • ChartJS:图表不显示所有数据

    由于某种原因 该图表没有显示数组中的最后两个数据 var data labels Brasil Argentina Chile Paraguai Peru Bol via M xico datasets data 9 19 7 77 6 8
  • AWS API Gateway 始终返回 502 bad gateway

    我在 AWS 中创建了一个简单的 lambda 函数 它从 DynamoDB 返回列表 我还创建了 API Gateway 来触发 lambda 函数 当我在 AWS 控制台中测试时 该函数运行良好 但是当我在 Postman 中测试此功能