首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS API网关总是返回502坏网关

AWS API网关总是返回502坏网关
EN

Stack Overflow用户
提问于 2019-04-02 18:19:57
回答 1查看 10.9K关注 0票数 4

我在AWS中创建了一个简单的lambda函数,从DynamoDB返回列表。我还创建了API来触发lambda函数。当我在AWS控制台中进行测试时,该函数可以正常工作。但是当我在邮递员中测试这个功能时,我总是得到502坏网关下面的错误。({“消息”:“内部服务器错误”)}

以下是node.js中的函数:

代码语言:javascript
复制
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网关端点的详细信息。

代码语言:javascript
复制
API endpoint: https://iabzqisam7.execute-api.us-east-1.amazonaws.com/test/moneyAppDynamoDBOperationsLambda
Authorization: NONE
Method: ANY
Resource path: /moneyAppDynamoDBOperationsLambda
Stage: test

下面是我如何尝试使用Postman测试API:

代码语言:javascript
复制
 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控制台中运行得非常好。

知道为什么我在从邮递员打API网关的时候一直收到502个坏网关错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-02 19:56:54

502坏网关异常,通常用于从Lambda代理集成后端返回的不兼容输出,有时用于重负载导致的无序调用。

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

API网关返回502,这意味着它不理解Lambda返回的输出,并给您{“message”:“内部服务器错误”} 502。

调试使用API getway上的启用日志记录

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

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents",
                "logs:GetLogEvents",
                "logs:FilterLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

信任策略:

代码语言:javascript
复制
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

在API网关控制台->转到->添加API网关的ARN -CloudWatch日志记录角色->‘保存’

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

请检查日志和共享错误日志。

如果函数输出是一种不同的格式或格式错误,API网关返回一个502坏网关错误响应。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55481238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档