我正在努力在AWS S3中存储许多图片。
我需要从S3检索URL并将其存储在DynamoDB中。
我不知道如何通过NodeJS做到这一点。有人可以解释它如何与Lambda函数一起工作吗?
答案 0 :(得分:3)
现在它加载了一秒,当它完成时 - 粘贴在此代码中
const
AWS = require( 'aws-sdk' );
AWS.config.region = 'us-east-1';
exports.handler = function( event, context ) {
var ddb = new AWS.DynamoDB(),
bucket = event.Records[ 0 ].s3.bucket.name,
key = event.Records[ 0 ].s3.object.key,
params = {
TableName: '[table]',
Item: {
hash: '[hash]',
range: '[range]',
s3key: 'https://s3.amazonaws.com/' + bucket + '/' + key
}
};
console.log( '\n\n{\n Bucket: ' + bucket + ',\n Key: ' + key + ',\n URL: ' + params.Item.s3key + '\n}\n' );
ddb.put( params, function( err, data ) {
// respond with whatever you want
context.succeed( ( err ) ? JSON.stringify( err, null, 2 ) : JSON.stringify( data, null, 2 ) );
} );
};
示例: - https://s3.amazonaws.com/cerenity/SOResources/favicon.ico
更新: @agl提醒我,如果您不使用"美国标准"区域,指定的区域将是:https://s3-[here].amazonaws.com/
转到Actions
=> Configure test event
=> Sample event template
=> S3 Put
你应该看到:
{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": "arn:aws:s3:::mybucket",
"name": "sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}
现在运行您的测试,应该查看数据库中的记录 - 如果没有,继续编辑数据库参数,直到它们正确为止
Event sources
标签,然后选择+ Add event source
=> Event source type
=> S3
Event type
=> Object Created
和(All)
或列出的其中一种方法答案 1 :(得分:0)
您需要创建一个由S3 put event调用的Lambda函数。 Lambda函数使用event
详细信息(以及相应的var
抓取JSON。问题是JSON中不会包含对象的URL,但您可以使用JSON参数构建URL。网址将是这样的:
https://s3-region.amazonaws.com/bucket/key
您可以使用AWSSDK for NodeJS将此网址插入DynamoDB。弗吉尼亚州(美国标准)地区的URL格式将有所不同。无论如何,HERE你有链接了解更多信息。
然后,在S3控制台或直接在Lambda控制台中创建存储桶中的事件,上传文件即可。
此致