设置:我正在尝试设置一个 Lambda 函数,该函数由来自 API 网关的 Web 套接字以及它订阅的 SNS 主题触发。根据传入的事件,我确定哪个服务发起了调用并相应地处理事情。
问题:我在理解如何使用 DynamoDB 方面遇到了一个真正的问题。建立 Web 套接字连接后,我将该连接 ID 插入到 Dynamo 中,以便在来自 SNS 的消息进入时对其进行响应。无论出于何种原因,我对 Dynamo 的所有调用都没有调用它们各自的回调。我假设他们失败了,但看起来没有抛出任何错误。我在这里调用“put”命令的方式有问题吗?
我的 index.js 顶部的代码是:
const aws = require("aws-sdk");
const tableName = process.env.TABLENAME;
var accessKeyId = process.env.DYNAMODB_ACCESS_KEY_ID;
var secretAccessKey = process.env.DYNAMODB_SECRET_ACCESS_KEY;
var documentClient = new aws.DynamoDB.DocumentClient({
region: 'us-east-1',
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});
我处理 API Gateway 调用的方法是:
const {
requestContext: {connectionId, routeKey}
} = event;
if (routeKey === "$connect") {
// handle new connection
console.log("Adding Connection", event);
const putParams = {
Item: {
'ConnectionId': connectionId
},
TableName: tableName,
};
console.log("put params", putParams);
documentClient.put(putParams, function(err, data) {
if (err) {
console.log(err, err.stack);
return {
response: 400,
body: "Error " + JSON.stringify(err)
};
}
else {
console.log("Response Received: ", data);
return {
response: 200,
body: "Connected - " + connectionId
};
}
});
}
else if (routeKey === "$disconnect") {
// handle disconnection
console.log("Disconnected");
}
else {
// $default handler
console.log("Default");
return {
response: 200,
body: "default"
};
}
当我通过运行测试请求时,控制台日志会显示我所有环境变量的正确值(我授予 Lambda 函数对 dynamo db 的完全访问权限,所以我认为我的访问键值不是必需的,但我将它们放在那里只是因为我'此时正在尝试一切)但在我的 documentClient.put 调用之后没有记录任何内容,我认为从根本上不会调用 put 命令的回调。
我的 DynamoDB 有一个分区键:ConnectionId(这是我在那里唯一的值),没有 SortKey。
我对这一切都是新手,所以任何可以为我指明正确方向的帮助都会很棒。
先感谢您!