AWS Lambda函数写入DynamoDB

时间:2017-03-06 10:23:42

标签: amazon-web-services amazon-dynamodb aws-lambda aws-sdk-nodejs

我是Amazon Web Services和NodeJS的初学者。

我写了一个由AWS IoT触发的Lambda函数,它解析了一个JSON。

enter code here
use strict';

console.log('Loading function');

exports.handler = (event, context, callback) => {
   console.log('Received event:', JSON.stringify(event, null, 2));
   console.log('Id =', event.Id);
   console.log('Ut =', event.Ut);
   console.log('Temp =', event.Temp);
   console.log('Rh =', event.Rh);
   //callback(null, event.key1);  // Echo back the first key value
   //callback('Something went wrong');
};

现在我想将json字段存储到DynamoDB表中。

有什么建议吗?

非常感谢!

2 个答案:

答案 0 :(得分:7)

预备步骤: -

  1. 创建可访问dynamodb的IAM Lambda角色
  2. 在与您的dynamodb区域相同的区域内启动Lambda
  3. 使用正确的键属性定义
  4. 创建DynamoDB表

    示例代码: -

    以下代码段是一个示例代码,可让您了解如何放置项目。请注意,必须根据您的要求略微更改(使用表名和键属性)。它没有经过完全测试的代码。

    use strict';
    
    console.log('Loading function');
    var AWS = require('aws-sdk');
    var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
    
    exports.handler = (event, context, callback) => {
        console.log(JSON.stringify(event, null, '  '));
        var tableName = "yourtablename";    
        dynamodb.putItem({
            "TableName": tableName,
            "Item" : {
                "Id": event.Id,
                "Ut": event.Ut,
                "Temp": event.Temp,
                "Rh":event.Rh
            }
        }, function(err, data) {
            if (err) {
                console.log('Error putting item into dynamodb failed: '+err);
                context.done('error');
            }
            else {
                console.log('great success: '+JSON.stringify(data, null, '  '));
                context.done('Done');
            }
        });
    };
    

    注意: -

    只要数据类型符合JavaScript字符串和数字,就不需要为String和Number显式提及数据类型。 DynamoDB将自动解释String和Number的数据类型。

答案 1 :(得分:1)

使用async / await还有一个较短的版本:

'use strict';

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = async (event) => {
    const tableName = "yourtablename"; 
    try {
      await dynamodb.putItem({
          "TableName": tableName,
          "Item" : {
              "Id": event.Id,
              "Ut": event.Ut,
              "Temp": event.Temp,
              "Rh":event.Rh
          }
      }).promise();
    } catch (error) {
      throw new Error(`Error in dynamoDB: ${JSON.stringify(error)}`);
    }  
};