【问题标题】:DynamoDB items are not getting inserted at first request from lambda need to make 4-5 requestsDynamoDB 项目未在 lambda 的第一次请求时插入需要发出 4-5 个请求
【发布时间】:2020-09-03 19:29:32
【问题描述】:

我有一个带有一个本地二级索引 (LSI) 的 DynamoDB 表。当我尝试从本地机器插入新项目时,它会被插入到第一个请求中,但是当我将相同的代码部署到 AWS lambda 时,它需要 4-5 个请求,然后插入新记录。我为表格保留了自动缩放,它会影响它吗..?

插入记录的代码

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 });
      });
    });
  }

【问题讨论】:

  • 除非您提供失败请求的代码和症状,否则我们无能为力。
  • @jarmod 我已经用我的代码更新了问题,请看一下
  • 记录了哪些导致您重试的错误?另外,请注意,所有 DynamoDB SDK 调用都原生支持 Promise:例如,您可以编写 await dynamoDB.put(params).promise()

标签: node.js amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

您应该只调用await dynamoDB.put(params).promise() 而不是await DynamoDB.insertRecord(params);。您无需将其包装到额外的函数中。

【讨论】:

    【解决方案2】:

    lambda 在从主导出函数返回响应后中止运行的后台进程,因此这是导致问题的原因。我的主要 lambda 函数在将记录添加到 DynamoDB 之前返回响应

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      相关资源
      最近更新 更多