【问题标题】:Node lambda not writing to DynamoDB and no error节点 lambda 未写入 DynamoDB 且没有错误
【发布时间】:2019-07-30 16:42:51
【问题描述】:
var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'})
AWS.config.update({region: 'eu-west-1'})
var docClient = new AWS.DynamoDB.DocumentClient()
  const params = {
    TableName: 'TC_QUESTIONS',
    Item: {
      'questionId' : {S: '001'},
      'questionText' : {S: 'Richard Roe'}
    }
  }

  var putItemPromise = docClient.put(params).promise()
  putItemPromise.then(function(data) {
    console.log("Added item:", JSON.stringify(data, null, 2));
  }).catch(function(err) {
    console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
  });

  await putItemPromise

没有返回错误。没有成功回调。当我使用错误的列名时,我从 Dynamo 收到错误消息。我试过在本地和 lambda 上运行它。它执行并退出。没有行被添加到表中。我做错了什么?

编辑: 这是我的 DynamoDB 表的 CF:

QuestionsTable:
  Type: AWS::DynamoDB::Table
  Properties:
    TableName: 'TC_QUESTIONS'
    AttributeDefinitions:
      - AttributeName: questionId
        AttributeType: S
      - AttributeName: questionText
        AttributeType: S
    KeySchema:
      - AttributeName: questionId
        KeyType: HASH
      - AttributeName: questionText
        KeyType: RANGE
    ProvisionedThroughput: 
      ReadCapacityUnits: "5"
      WriteCapacityUnits: "5"

【问题讨论】:

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


    【解决方案1】:
    'use strict';
    const AWS = require('aws-sdk');
    const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'});
    
    exports.handler = async (event) => {
    
        const params = {
          TableName: 'TC_QUESTIONS',
          Item: {
            'questionId': '001',
            'questionText' : 'Richard Roe'
          }
        }
      
        try {
          await docClient.put(params).promise()
        } catch (e) {
          console.log(e.message)
        }
    };
    

    如果您的表存在并且 questionId 是您的分区键,则上面的代码有效。

    我认为您有些混淆了,因为您使用的是DocClient,因此您不需要指定 DynamoDB 的类型。这是您的代码的问题。只需指定原始值(就像我在上面所做的那样,传递字符串本身),它就会起作用。

    【讨论】:

    • 好的,谢谢,我删除了类型,但得到了相同的结果。我为表格添加了 Cloudformation。我是否遗漏了有关分区键的内容?
    • 我在控制台中确认 questionId 是分区键。真的难倒这里,仍然没有得到任何添加到桌子上。通过查看控制台确认。
    • OK.. 我的代码在一个模块中,该模块正在从 lambda 处理程序导入和调用。将此发电机代码直接移动到处理程序中,一切正常......我组织文件/模块的方式是错误的。感谢您的帮助。
    • 您可能没有得到任何结果,因为我作为示例创建的代码是async,因此它返回了一个承诺。在你客户的代码上,你也应该在上面await,然后它应该可以工作,而不必在你的处理程序中移动代码。
    • 确实如此 - 我错过了等待。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2018-08-27
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2016-11-15
    相关资源
    最近更新 更多