AWS API Gateway всегда возвращает 502 неверных шлюза - PullRequest
0 голосов
/ 02 апреля 2019

Я создал простую лямбда-функцию в AWS, которая возвращает список из DynamoDB. Я также создал API-шлюз для запуска лямбда-функции. Функция отлично работает, когда я тестирую в консоли AWS. Но я всегда получаю 502 плохой шлюз ниже ошибки, когда я тестирую эту функцию в Почтальоне. ({ "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

Вот как я пытаюсь протестировать 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.

Есть идеи, почему я продолжаю получать ошибку 502 неверного шлюза при вызове API Gateway из Почтальона?

1 Ответ

1 голос
/ 02 апреля 2019

502 Bad Gateway Исключение, обычно для несовместимого результата из бэкэнда интеграции Lambda прокси и иногда для неправильные вызовы из-за больших нагрузок.

Вывод API getway не скажет вам, что проблема связана с лямбда-ошибкой, API getway или проблемой политики.

Шлюз API возвратил 502, что означает, что он не понимает вывод, возвращаемый лямбда, и выдает {«message»: «Внутренняя ошибка сервера»} 502.

Отладка с использованием разрешения входа в API getway

Создайте новую роль IAM, чтобы API-шлюз мог отправлять журналы в 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 -> Перейти к настройкам -> Добавить ARN роли ведения журнала API Gateway-CloudWatch -> «Сохранить»

Перейти на этап вашего API. В разделе «Настройки CloudWatch» выберите «Включить журналы CloudWatch». Установите для «Log level» значение «INFO». Выберите «Журнал полных запросов / ответов».

Plesae проверяет журнал и делится журналами ошибок, о которых идет речь.

Если выходные данные функции имеют другой формат или имеют неправильный формат, API Gateway возвращает сообщение об ошибке 502 Bad Gateway.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...