DynamoDB 项目没有在 lambda 的第一个请求中插入需要发出 4-5 个请求
DynamoDB items are not getting inserted at first request from lambda need to make 4-5 requests
我有一个 DynamoDB table 和一个 本地二级索引 (LSI)。当我尝试从本地机器插入新项目时,它会插入到第一个请求中,但是当我将相同的代码部署到 AWS lambda 时,它需要 4-5 个请求,然后插入新记录。我为 table 保留了 自动缩放 是否影响它..?
插入记录的代码
async function addLogstoDynamoDB(body, tries = 1) {
var params = {
TableName: config.tableName,
Item: {
start: body.timestamp, //Local secondary index
number: "+" + body.cli, //Primary key
id: "CON-" + body.callid, //Sort key
},
};
let result = await DynamoDB.insertRecord(params);
if (result.error !== null && tries < 3) {
console.log(result.error);
tries++;
addLogstoDynamoDB(body, tries);
}
}
DynamoDB.insertRecord() 代码
static insertRecord(params) {
return new Promise((resolve) => {
dynamoDB.put(params, function (error, data) {
resolve({ error, data });
});
});
}
您应该调用 await dynamoDB.put(params).promise()
而不是 await DynamoDB.insertRecord(params);
。您无需将其包装到额外的函数中。
lambda 在从主导出函数返回响应后中止后台进程 运行,因此这是导致问题的原因。我的主要 lambda 函数在将记录添加到 DynamoDB 之前返回响应
我有一个 DynamoDB table 和一个 本地二级索引 (LSI)。当我尝试从本地机器插入新项目时,它会插入到第一个请求中,但是当我将相同的代码部署到 AWS lambda 时,它需要 4-5 个请求,然后插入新记录。我为 table 保留了 自动缩放 是否影响它..?
插入记录的代码
async function addLogstoDynamoDB(body, tries = 1) {
var params = {
TableName: config.tableName,
Item: {
start: body.timestamp, //Local secondary index
number: "+" + body.cli, //Primary key
id: "CON-" + body.callid, //Sort key
},
};
let result = await DynamoDB.insertRecord(params);
if (result.error !== null && tries < 3) {
console.log(result.error);
tries++;
addLogstoDynamoDB(body, tries);
}
}
DynamoDB.insertRecord() 代码
static insertRecord(params) {
return new Promise((resolve) => {
dynamoDB.put(params, function (error, data) {
resolve({ error, data });
});
});
}
您应该调用 await dynamoDB.put(params).promise()
而不是 await DynamoDB.insertRecord(params);
。您无需将其包装到额外的函数中。
lambda 在从主导出函数返回响应后中止后台进程 运行,因此这是导致问题的原因。我的主要 lambda 函数在将记录添加到 DynamoDB 之前返回响应