所以我正在尝试使用lambda开发aws websocket函数。但是似乎每当我尝试调用“ postToConnection”时,它只会给我500个内部服务器错误。
Cloud watch也不会记录我收到的错误。
发送消息后,我在终端上收到的内容是:
"{"message": "Internal server error", "connectionId":"xxx", "requestId":"xxx"}"
(根本不给我任何信息)
这是我关于lambda函数的全部代码。
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也已更新,我在lambda层上声明了它,这就是我正在使用的。
你知道是什么原因造成的吗?
答案 0 :(得分:0)
这是由于超时导致的,dynamodb遍历了所有导致超时的记录。
cloudwatch似乎确实记录了该错误,但是我太关注终端错误了,这给了我500(内部服务器错误)。
要解决此问题,只需转到lambda函数并增加时间限制。