Tag: amazon s3

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

我正在将许多图像存储在AWS S3中。 我需要从S3中检索URL并将其存储在DynamoDB中。 我不清楚如何通过NodeJS做到这一点。 有人可以解释一下如何使用Lambda函数吗?

aws ec2 getaddrinfo ENOTFOUND错误代码

我的目标是当我的脚本启动时得到instanceId。 (原因我想连接我的Web服务器作为后端与aws ELB。这甚至可以在我硬编码的ID)所以现在我试着编写一个函数,这个ID给我。 所以我知道的是我需要AWS.metadataService,但我不知道如何使用它。 我发现这个文档 (metaDataService)是一个命令行工具 。 我想我需要像这样结合起来: var meta = new AWS.MetadataService(); meta.request("http://169.254.169.254/latest/meta-data/", function(err, data){ if(err){ console.log(err); } console.log(data); }); 但是会产生这个错误: { [Error: getaddrinfo ENOTFOUND 169.254.169.254http 169.254.169.254http:80] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: '169.254.169.254http', host: '169.254.169.254http', port: 80 } 任何想法可以解决这个问题? 或者至less是什么原因导致这个错误。

Lambda超时与S3通信

我正在尝试使用Lambda简单列出S3存储桶中的所有文件 代码如下所示: var AWS = require('aws-sdk'); var s3 = new AWS.S3(); exports.handler = (event, context, callback) => { s3.listObjectsV2({ Bucket: "bucketname", }, function(err, data) { console.log("DONE : " + err + " : " + data); callback(null, 'Hello from Lambda'); }); }; 使用上述,我从来没有得到“完成”打印。 日志除了超时以外不显示任何信息。 有什么问题我可以在这里做? 我会认为,至less错误会在“完成”部分显示。

有什么方法可以使用适用于Node.js的AWS开发工具包来检查S3存储桶中是否存在path?

我想检查我的存储桶中是否存在path(例如/ myTest)。 我能处理它的唯一方法就是试着找出我的桶中是否存在一个对象,它的关键字匹配path+'\/?.*' /?。* path+'\/?.*'正则expression式。 适用于JavaScript的AWS开发工具包具有函数getObject,它在其params中获取key参数的string。 但似乎这个参数的值不能接受正则expression式。 所以我不确定是否有任何方法来检查S3存储桶中是否存在path。

如何用node.js保存S3文件中的表情符号

我从我的nodejs服务器上传一个JSONstring到S3,通过s3.upload方法。 var s3 = new AWS.S3(); s3.upload({ Bucket: myBucket, Key: 'myPath/' + thing.id + '.json', Body: JSON.stringify(thing), ContentType: 'application/json' }) 如果在上面的代码片段中, thing对象有一个包含emojis的String属性,我将如何修改这个操作来保存emoji字符。 在我的节点服务器上,我可以看到表情符号被存储在数据库中并正确地服务。 只有在上传之后,angular色才会失去完整性。 我认为有一些字符编码技巧可以应用于JSON.stringify结果,但我还不知道细节。 在这里寻求帮助。 JSON我得到节点服务器: JSON我在S3看到:

寻找node.js模块为不同的存储提供者提供统一的文件API

我使用Node.js来托pipe一个Web服务器。 服务器将与不同的第三方存储提供商进行通信,例如Box,Dropbox,Googledrive,amazon s3,skydrive,ftp服务器等。服务器将从文件下载或上传文件到存储提供商。 我正在使用OAuth模块来实施授权过程并获得auth_token和auth_secret。 OAuth模块统一了不同服务器的授权界面。 OAuth模块封装了oauth服务器的API,并提供了统一和友好的界面。 使用OAuth模块,我不需要在代码中调用oauth服务器的API。 这是相当不错的,并节省了我的工作很多。 从不同的存储提供商下载/上传文件时遇到一些困难。 我必须为每个存储服务器编写不同的实现。 比如调用APi把file upload到盒子,调用s3 API把file upload到s3等。不知是否有一些节点模块封装了存储提供者的所有API,就像授权API的OAuth模块一样工作。 下面的伪代码表示我期望这种模块的工作原理。 我想这个名字是'存储'。 var storage = require("storage"); // This is the storage library I'm looking for. var s3 = storage.s3(s3_aouth_token_and_secret); // The declaration for the s3_aouth_token_and_secret is omitted for simplification. var box = storage.box(box_aouth_token_and_secret); var dropbox = storage.dropbox(dropbox_aouth_token_and_secret); var local_file_name = "./report.docx"; […]

当我在Amazon S3中将Quiet设置为true以在deleteObjects()方法中启用安静模式时会发生什么?

我在Node.js中使用Amazon S3,我想从一个存储桶中删除一个或多个文件。 我想知道当我将Quiet参数设置为true时会发生什么。 var params = { Bucket: 'STRING_VALUE', /* required */ Delete: { /* required */ Objects: [ /* required */ { Key: 'STRING_VALUE', /* required */ VersionId: 'STRING_VALUE' }, /* more items */ ], Quiet: true || false }, MFA: 'STRING_VALUE' }; s3.deleteObjects(params, function(err, data) { if (err) console.log(err, err.stack); // an error […]

如何设置使用Amazon Lambda在S3中创build的文件的打开/下载权限?

我有一个成功将文件写入Amazon S3存储桶的Amazon Lambda函数。 但是,默认情况下,这些文件不能公开访问。 如何在写入时自动访问它们? 有没有办法改变桶本身,使所有的项目是公开可读的(打开/下载)? 或者,我已经收集到这可以通过IAMangular色策略来完成。 这是我的: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] } ] } 我认为这是“资源”,需要改变,但我不知道如何。 为了完整性(如果有其他人需要做类似的事情,并且涉及到Lambda文档),这里是我在客户端的ajax调用(我正在向S3写一个图像,并且需要返回文件名): $.ajax({ url: 'https://mylambdafunctionurl/', type: 'POST', crossDomain: true, contentType: 'application/json', data: JSON.stringify(data), dataType: 'json', […]

S3遍历桶/文件夹/文件

我正在使用s3.listObjects迭代S3存储桶,但我得到这个错误:{[UnexpectedParameter:在参数中find意想不到的关键'键']下面是我使用的代码:exports.handler = function(event,context){ var bucket = event.Records[0].s3.bucket.name; var key = event.Records[0].s3.object.key; var params = { Bucket: bucket, Key: key }; console.log('bucket name ', bucket); s3.getObject(params, function(err, data) { if (err) { console.log(err); } else { context.succeed(data.ContentType); } }); s3.listObjects(params, function(err, data) { if (err) return console.log(err); params = {Bucket: 'bucketName'}; }); }; 任何人都可以请build议我在这里做错了什么? 谢谢

在主程序之前在lambda中加载S3文件

我正在写一个lambda函数,需要加载一个存储在S3中的密钥。 它不会经常改变,所以我宁愿不要每次调用lambda函数都抓住它,所以我想在容器被启动时加载一次,然后在lambda容器的生命周期中保存该值。 但是,由于asynchronous方法getObject,这导致了一个问题,因为在运行main module.export代码时(特别是如果这是第一次运行并且正在创build容器),文件可能未被加载。 我已经使用setTimeout实现了一个解决方法,但是我想看看这个推荐的方法是什么,而且我的方法有什么问题,因为它感觉不对! 示例代码: var AWS = require('aws-sdk') var s3 = new AWS.S3(); var fileLoaded = false; var params = { Bucket: 'bucket-name', Key: 'file-name' }; s3.getObject(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else { console.log('File loaded from S3'); fileLoaded = true; } }); exports.handler = (event, context, […]