вызов ApiGatewayManagementApi.postToConnection () дает мне 500 внутренних ошибок сервера? - PullRequest
0 голосов
/ 21 февраля 2019

, поэтому я пытаюсь разработать функцию веб-сокета aws с использованием лямбды.Но кажется, что всякий раз, когда я пытаюсь вызвать «postToConnection», он просто выдает мне 500 внутренних ошибок сервера.

Наблюдение за облаками также не регистрирует полученную ошибку.

И то, что я получаю на терминале после отправки сообщения, таково:

"{"message": "Internal server error", "connectionId":"xxx", "requestId":"xxx"}"

(что вообще не дает мне никакой информации)

Это весь мой код лямбда-функции.

var AWS = require('aws-sdk');
AWS.config.update({ region: "us-west-2" });
var DDB = new AWS.DynamoDB({ apiVersion: "2012-10-08" });

require('aws-sdk/clients/apigatewaymanagementapi');

exports.handler = function (event, context, callback) {
  var url_handler = event.requestContext.domainName + "/" + event.requestContext.stage;
  // var params = event.requestContext;
  // console.log(params);


  var scanParams = {
    TableName: "tbl-web-socket-connection",
    ProjectionExpression: "id"
  };


  DDB.scan(scanParams, function (err, data) {
      // callback(null, {
      //   statusCode: 200,
      //   body: "Data send to"
      // });
    if (err) {
      callback(null, {
        statusCode: 500,
        body: JSON.stringify(err)
      });
    } else {
      var apigwManagementApi = new AWS.ApiGatewayManagementApi({
        apiVersion: "2018-11-29",
        endpoint: event.requestContext.domainName + "/" + event.requestContext.stage
      });

      var postParams = { 
        Data: JSON.parse(event.body).data
      };
      var count = 0;

      data.Items.forEach(function (element) {
        postParams.ConnectionId = element.id.S;
          console.log(postParams);

          apigwManagementApi.postToConnection(postParams, function (err, data) {

            if (err) {
              // API Gateway returns a status of 410 GONE when the connection is no
              // longer available. If this happens, we simply delete the identifier
              // from our DynamoDB table.

              if (err.statusCode === 410) {
                console.log("Found stale connection, deleting " + postParams.connectionId);
                DDB.deleteItem({ TableName: process.env.TABLE_NAME,
                                Key: { connectionId: { S: postParams.connectionId } } });
              } else {
                console.log("Failed to post. Error: " + JSON.stringify(err));
              }
            } else {
              count++;
            }
          });

      });

      callback(null, {
        statusCode: 200,
        body: "Data send to " + count + " connection" + (count === 1 ? "" : "s")
      });
    }
  });
};

Также обновлен aws-sdk, я объявил его на лямбда-слое, и это то, что я использую.

Любая идеячто вызывает это?

1 Ответ

0 голосов
/ 22 февраля 2019

Это происходит из-за тайм-аута, динамодаб просматривает все записи, которые вызывают тайм-аут.

Похоже, облачные часы действительно регистрировали ошибку, но я был слишком сосредоточен на ошибке терминалачто дает мне 500, Внутренняя ошибка сервера.

Чтобы исправить это, просто перейдите к лямбда-функции и увеличьте ограничение по времени.

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