如何从s3存储和检索dynamodb中的照片url?

我正在将许多图像存储在AWS S3中。

我需要从S3中检索URL并将其存储在DynamoDB中。

我不清楚如何通过NodeJS做到这一点。 有人可以解释一下如何使用Lambda函数吗?

  1. 一定要把你的S3水桶全部设置成你所需要的。 不知道为什么你想要这个,但我会假设你已经设置为私人或公共。
    • 如果你已经启用了静态主机,这个url就是这个了
  2. 导航到Lambda并设置您的function。 把名字,描述等,但没有在代码字段(我们会到达那里)
  3. 设置您的内存和权限( 至less必须具有基本的DynamoDB执行权限)
  4. 现在,它会加载一秒钟,当它完成 – 粘贴在这个代码

    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/

  1. 填写你的信息表,哈希,范围等
  2. 转到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" } ] } 
  3. 现在运行你的testing,你应该会在你的数据库中看到一条logging – 如果没有,继续编辑你的数据库参数,直到你得到正确的结果

    • 确保为分配给此Lambda函数的angular色设置了所有权限
  4. 一旦工作,转到顶部的Event sources选项卡,然后select+ Add event source => Event source type => S3
  5. 应该出现一个请求类似S3的信息的菜单。 放入你想要的桶,前缀,后缀,然后selectEvent type => Object Created ,或者(All)或列出的方法之一

您需要创build一个将由S3 put事件调用的Lambda函数。 一个Lambda函数抓取event详细信息(和相应的variables)的JSON问题是对象的URL不会进入JSON,但是您可以使用JSON参数来构buildURL,URL将如下所示:

https:// s3- 地区 .amazonaws.com / 存储桶 / 密钥

您可以使用NodeJS的AWSSDK将此URL插入到DynamoDB中。 弗吉尼亚州(US-Standard)地区的URL格式将有所不同。 无论如何, 这里你有链接的更多信息。

然后,在S3控制台的存储桶中创build事件,或直接在Lambda控制台中创build事件,然后上传文件。

问候