AWS中lambda与DynamoDB的集成

前言:我在整个集成过程中,存在最大的问题有两个,

  1. 没有考虑到lambda函数的权限,即对DynamoDB或者其他如Kinesis的权限授权,导致无法写入或者读取。

2.最初使用了异步方式调用,导致无法写数据到DynamoDB,把代码改成同步调用即可

创建Lambda函数

javascript 复制代码
'use strict'
console.log('Loading function');

var aws = require('aws-sdk');
var docClient = new aws.DynamoDB.DocumentClient({region: 'ap-southeast-1'});


exports.handler = function(event, context,callback)  {
    var records = event.Records;
    if(records){

        records.forEach(function(record){
            //console.log('record:',record);
            //var payload = new Buffer(record.kinesis.data,'base64').toString('ascii');
            var payload = Buffer.from(record.kinesis.data, 'base64').toString('ascii');
           
            console.log('Decode payload:',payload);
           
           var params ={
                Item:{
                    date:Date.now(),
                    message:payload
                },
                TableName:"Lambda-Dynamo-Write-Read-China"
            };
            if(docClient){
                console.log('docClient is not null');
                console.log('params date:',params.Item.date);
                //         //await ddb.put(params).promise();
                //await ddb.put(params).promise();
                docClient.put(params,function(err,data){
                    if(err){
                        console.log("Fail to Write into AWS DynamoDB");
                        callback(err,null);
                        
                    }else{
                        console.log("Successfully write item into AWS DynamoDB")
                        callback(null,data)
                    }
                    
                });
            }else{
                console.log('docClient is null');
            }
            
        });
        
    }else{
        console.log('records is empty');
    }
    
};

创建好之后保存,然后进行部署(deploy)

然后在IAM中,对相应的角色进行授权(lambda-kinsis-guangzhou-role-xxx)这个角色名是创建lambda自动生成的,在上面增加相应的权限即可。

创建触发器

创建DynamoDB 的表

创建好后,给表增加属性字段

注意:只需要增加一个分区字段date即可,message字段,在Lambda方法中,作为入参传入即可

创建Kinesis

在本地使用aws-cli发送消息报文

在DynamoDB如果能看到发送的数据,即集成成功

相关推荐
Sheffield4 小时前
command和shell模块到底区别在哪?
linux·云计算·ansible
DolitD8 小时前
云流技术深度剖析:国内云渲染主流技术与开源和海外厂商技术实测对比
功能测试·云原生·开源·云计算·实时云渲染
翼龙云_cloud8 小时前
阿里云渠道商:阿里云 ECS 从安全组到云防火墙的实战防护指南
安全·阿里云·云计算
YongCheng_Liang9 小时前
从零开始学虚拟化:桌面虚拟化(VDI)入门指南(架构 + 产品 + 部署)
运维·云计算
万物得其道者成9 小时前
阿里云 H5 一键登录接入实战:前后端完整实现
阿里云·云计算·状态模式
翼龙云_cloud1 天前
国际云代理商:2026年国际云注册风控升级实战指南 8 大平台无卡解决方案对比
服务器·阿里云·云计算
阿里云大数据AI技术1 天前
全模态、多引擎、一体化,阿里云DLF3.0构建Data+AI驱动的智能湖仓平台
人工智能·阿里云·云计算
摇滚侠1 天前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
m0_694845571 天前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
ESBK20251 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信