Tag: aws sdk

我如何在节点js s3上存储一个tar目录?

使用AWS开发工具包,我可以存储文件(压缩或未压缩)和压缩目录(使用tar),但不能解压缩目录。 安装程序和依赖关系: var aws = require('aws-sdk'), s3 = new aws.S3(), fs = require('fs'), fstream = require('fstream'), zlib = require('zlib'), tar = require('tar'), key = 'test', bucket = 'mybucket'; 修正了上传代码: var params = { Bucket: bucket, Key: key, Body: body }; s3.upload(params) .send(function(err, data) { console.log("data:", data); } }); 存储文件,未压缩: body = fs.createReadStream('/var/www/file.txt'); 存储文件,压缩: body = […]

为什么TLSWrap对象消耗内存?

我正在使用nodejs 4.2.3版本,最近我观察到,在将数据上传到S3存储区时,内存堆积得很快(大约每个文件大小为1.5 GB)。 我采取了堆快照,显示TLSWrap对象保留大小1GB左右。 任何人都面临同样的问题? 提前致谢。

AWS nodejs microservice:在S3存储桶中的文件发生更改时迭代调用服务

我使用nodejs在lambda上创build了一个微服务,以在S3存储桶中生成我的图像的缩略图。 但是,在将新映像上传到S3存储桶后,没有被触发。 我将触发器事件types设置为创build的S3对象。 而且我还将testing事件configuration为: "eventName": "ObjectCreated:*" ,这意味着在桶中创build/更改某些文件时,应该触发testing事件并调用此lambda函数。 我也在桶侧设置了相同的通知configuration。 它在我第一次从这个例子创build这个lambda函数的时候起作用: 创build一个部署包 该function只适用于确切的文件“HappyFace.jpg”,但失败的所有其他图像。 有时我得到“拒绝访问”错误。 我使用下面的代码: // dependencies var async = require('async'); var AWS = require('aws-sdk'); var gm = require('gm') .subClass({ imageMagick: true }); // Enable ImageMagick integration. var util = require('util'); var utils = require('utils'); // constants var MAX_WIDTH = 100; var MAX_HEIGHT = 100; // get […]

AWS Lambda调用函数(js sdk):超时重置为默认值

我正在运行在AWS Lambda上执行长操作的Meteor(Node 4.4.7)应用程序。 我从我的代码调用lambda函数并等待响应,然后继续下一个调用。 我将超时设置为300000ms,如前一个问题所述 (在我的代码中都在Lambda和AWS.Lambda对象中)。 我的问题是,有时AWS.Lambda超时值被重置为默认值120000毫秒。 由于我的Lambda函数需要更多时间来执行(但仍小于最大值300),所以我没有收到响应。 此外,我看到我的函数被调用了3次,按照默认的maxRetries值,甚至认为我把它设置为1。 我不知道重现它的步骤。 这似乎是随机的。 它通常发生在几天后运行我的应用程序。 如果我检查了我的AWS.Lambda对象的属性,它仍然具有300000ms的超时值,虽然它的行为就像默认的120000ms值。 一旦发生这种情况,所有后续调用请求都有同样的问题,我必须重新启动应用程序,使其再次工作。 请注意,在Lambda日志中,我看到函数正在正确执行。 持续时间<120s返回在我的代码。 持续时间> 120s重试。 示例代码: var options = { maxRetries: 1, httpOptions: { timeout: 300000 } }; var lambda = new AWS.Lambda(options); var myEventObject = {…}; var payload = JSON.stringify('myEventObject'); var params = { FunctionName: 'myLambdaFunction' InvocationType: 'RequestResponse', LogType: 'None', Payload: […]

AWS S3标准上传schemevs基于浏览器的节点上传

我试图了解标准AWS S3上传scheme(例如使用aws-sdk)和基于浏览器的上传(特别是在node.js中)之间的实现差异。 我知道在任何情况下,都需要有一个服务器来存储我的AWS凭据并在S3上签名。 但是有一些我不明白的东西: 如果我使用基于浏览器的上传,我将在客户端使用HTML表单,并在隐藏字段中使用我的服务器获取的策略值。 但是,如果我使用标准scheme上传文件,即完全通过我的服务器,它究竟是如何实现的? 服务器端实现有很多代码示例,但客户端应该发生什么? 所以,会有一个HTML表单, action属性指向我的服务器的URL,指定用于file upload,对吧? 但是会发生什么呢? 将文件首先上传到我的服务器的存储,然后到S3? 或者它会以某种方式使用stream媒体或什么? 它真的让我困惑,我真的很感激一些代码示例,其中有服务器端和客户端代码。 这两个上传计划有什么优点和缺点? 我应该什么时候比另一种方式更倾向于一种方法(我的个人用例 – 用多帐户系统上传video)?

从VPC中运行的Lambda使用AWS SDK

我有一个简单的lambda函数如下 var AWS = require("aws-sdk"); exports.handler = (event, context, callback) => { var ec2 = new AWS.EC2({region:'us-east-1'}); return ec2.describeRegions({}).promise() .then(function(regionResponse) { console.log(regionResponse.Regions) callback(null, regionResponse.Regions); }) .catch( function (err) { console.log({"error" : err}); callback(err, null); } ) }; 我可以在VPC之外成功运行此function。 我使用VPC向导创buildVPC,并使用单个公有子网和Internet网关创buildVPC。 我将这个函数放在VPC中,并赋予它一个具有Lambda VPC执行权限的执行angular色。 它现在失败了,我已经设置为10秒(正常执行1秒) 我的configuration中缺less什么function来阻止该function访问VPC内部的AWS SDK?

如何在s3中使用节点js中的aws-sdk存储Excel文件?

var xls = json2xls(data); var bufferdata = new Buffer(xls).toString('base64'); console.log("inside upload s3 function……..", data); //var buf = new Buffer(data, 'base64'); var uploaddata = { Key: "exception.xls", Body: bufferdata, ContentEncoding: 'base64', ContentType: 'application/vnd.ms-excel' }; 我可以通过s3保存和检索文件。 但格式不匹配即将到来。 请帮助我如何解决这个问题。

由于crypto.DEFAULT_ENCODING ='binary',节点6升级导致aws-sdk的SignatureDoesNotMatch错误。

我已经从节点4移动到节点6,这导致任何使用aws-sdk返回以下错误消息: SignatureDoesNotMatch:我们计算的请求签名与您提供的签名不匹配。 检查您的AWS秘密访问密钥和签名方法。 详细信息请参阅服务文档。 看看代码,这似乎是由我的代码调用encryption来创build和validation散列和集合 crypto.DEFAULT_ENCODING = 'binary' 如果我从“二进制”更改为“缓冲区”(这是默认),aws-sdk的作品,但我的代码无法validation旧哈希值。 这是用来创build和检查散列的代码: crypto.pbkdf2(password, salt, iterations, keysize, function (err, derivedKey) { callback(null, [salt.toString('base64'), new Buffer(derivedKey).toString('base64')]) }); 查看crypto.DEFAULT_ENCODING的encryption文档我不确定使用缓冲区和二进制文件有什么区别。 有没有办法使用二进制编码仅用于这种encryption方法,而不会影响aws-sdk? 如果没有的话,是否有一种方法可以将使用“缓冲”编码的pbkdf2产生的散列转换为使用“二进制”编码时产生的散列?

通过策略和证书即时创buildAWS IoT“事物”

我正在使用NodeJS以及AWS JS SDK和AWS IoT Device JS SDK ,以便在连接到我的服务器后自动创build新事物并为其分配证书和策略。 我正在关注“即时注册”文章 ,以创build,注册和激活我的CA证书。 据我所知,CA证书已成功添加到AWS IoT,已激活并启用了自动注册。 我不明白的是这个步骤是如何执行的(引用文章): 当设备尝试连接AWS IoT未知的,但已通过在AWS IoT中注册的CA签名的X.509证书时,设备证书将由AWS IoT以新的PENDING_ACTIVATION状态自动注册。 我如何做一个“尝试”连接? 由于我使用aws-iot-device-sdk-js SDK和手动创build的证书,所以我通常会像这样连接我的设备: const device = deviceModule.device({ host: 'myendpoint.iot.us-east-1.amazonaws.com', region: 'us-east-1', keyPath: `certs/${deviceID}.key`, certPath: `certs/${deviceID}.pem`, caPath: 'certs/rootCA.pem', clientId: deviceID, baseReconnectTimeMs: 4000, keepalive: 30, protocol: 'mqtts', }); 但是现在我没有在keyPath和certPath包含的证书和密钥,我不能在没有它的情况下实例化我的设备。 我试图自己创build证书,使用AWS SDK中的createKeysAndCertificate() ,将它们保存到磁盘,手动附加策略,手动附加主体,甚至尝试手动将证书标记为“主动”,如下所示: iot.createThing({ thingName: deviceID }, (err, d) => { […]

AWS.DynamoDB.DocumentClient对象的getBatchItem方法是否支持全局二级索引?

我在nodejs程序中使用AWS.DynamoDB.DocumentClient从多个Dynamodb表中获取项目。 为了使代码简单,我select使用BatchGetItem / BatchGet方法。 我面临的挑战是我需要基于全局二级索引 (例如name + age)来获取项目,而不是创build表时生成的初始主键。 我经历了BatchGetItem / BatchGet,但没有看到使用全局二级索引的任何参数。 我用下面的代码运行了一些testing var params = { RequestItems: { 'Table-1': { Keys: [ { name: 'abc', age: 18, }, ] } } }; var docClient = new AWS.DynamoDB.DocumentClient(); docClient.batchGet(params, function(err, data) { if (err) console.log(err); else console.log(data); }); 并得到以下错误。 > ValidationException: The provided key element does […]