![](/img/trans.png)
[英]Can I migrate data from an AWS DynamoDB to a new Global Table using export/import to S3
[英]Can I export data from s3 to dynamoDB using lambda?
我想构建一个 lambda 进程,当 s3 进来时自动将数据发送到 dynamodb。但是由于 dynamodb 没有像下图那样设置为目的地,我该怎么办? (权限是管理员。)
您应该了解如何使用 lambda 事件源(事件触发器)。 这里的事件源是 S3,一旦有存储的对象,S3 就会向 lambda 函数触发一个事件。 要完成这项工作,您必须为 S3 事件添加对 lambda 的权限。 一探究竟 :
现在,放入 S3 的每个对象都会向 Lambda 触发一个事件。 类似于告诉 lambda 新的 S3 对象。 您可以从 lambda 代码中检查事件对象,如以下示例代码:
exports.handler = async (event) => {
event.Records.forEach((record, i)=>{
if (record.eventName == 'ObjectCreated:Put')
console.log(record);
})
return;
}
测试文件上传到您的 s3 存储桶并转到 cloudwatch 检查您的 lambda 日志。
接下来,如果要将文件内容存储到 dynamodb,您将为 lambda 角色添加策略并在 lambda 函数上写一些行,为示例策略添加权限 s3:GetObject 和 dynamodb:PutItem 为 lambda 角色:
{
"Sid": "Stmt1583413548180",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "your_s3Bucket_ARN"
},
{
"Sid": "Stmt1583413573162",
"Action": [
"dynamodb:PutItem"
],
"Effect": "Allow",
"Resource": "your_dynamodbTable_ARN"
}
这是 lambda 代码的示例:
let s3 = new AWS.S3();
let dynamoDB = new AWS.DynamoDB.DocumentClient();
let TextDecoder = require("util").TextDecoder;
exports.handler = async (event) => {
let records = [];
event.Records.forEach((record, i)=>{
if (record.eventName == 'ObjectCreated:Put')
records.push(fileContent());
if (i == event.Records.length-1)
if (records.length > 0)
return Promise.all(records).then(()=>{
console.log("All events completed")
return "All events completed";
}).catch((e)=>{
console.log("The tasks error: ",e)
throw "The tasks error";
})
else
return "All events completed";
})
}
/* Get the file content and put new dynamodb item */
function fileContent(obj) {
let params = {
Bucket: obj.bucket.name,
Key: obj.object.key
}
return s3.getObject(params).promise().then((content)=>{
console.log("GetObject succeeded");
content = new TextDecoder("utf-8").decode(content.Body);
let Item = {
Key: obj.object.key,
dataContent: content
}
return dynamoDB.put({
TableName: 'table_name',
Item:Item
}).promise();
})
}
好吧,让我继续步骤:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.