Tag: lambda

AWS Lambda中的stream转换会导致写入错误

我正在尝试使用Fastcsv nodejs包来转换CSV文件。 有趣的是,我的系统上的代码片段在本地很好地工作。 但是,如果我尝试将其与AWS lambda程序集成,则会提供写入错误。 var stream = fs.createReadStream(s3EventInfo.inputDownloadLoc) .pipe(csv.parse({headers: true})) //pipe the parsed input into a csv formatter .pipe(csv.format({headers: true})) //Using the transfrom function from the formatting stream .transform(function(row, next){ transformLine(row, next); }) .pipe(fs.createWriteStream(s3EventInfo.outputFileLoc)) .on("end", function(){ callback(); }); 这是aws日志中的错误.. Error: write after end at writeAfterEnd (_stream_writable.js:133:12) at PassThrough.Writable.write (_stream_writable.js:181:5) at write (_stream_readable.js:602:24) at flow […]

为什么AWS Lambda执行时间长,使用pg-promise

我开始使用AWS Lambda执行一个非常简单的任务,即执行SQL查询以从RDS postgres数据库检索logging,并在结果上创buildSQS消息库。 因为Amazon默认只提供aws-sdk模块(使用node 4.3引擎),所以我们需要执行这个SQL查询,所以我们必须创build一个包含pg-promise的自定义部署包。 这是我正在使用的代码: console.info('Loading the modules…'); var aws = require('aws-sdk'); var sqs = new aws.SQS(); var config = { db: { username: '[DB_USERNAME]', password: '[DB_PASSWORD]', host: '[DB_HOST]', port: '[DB_PORT]', database: '[DB_NAME]' } }; var pgp = require('pg-promise')({}); var cn = `postgres://${config.db.username}:${config.db.password}@${config.db.host}:${config.db.port}/${config.db.database}`; if (!db) { console.info('Connecting to the database…'); var db = pgp(cn); […]

在使用AWS lambda这样的无状态FaaS上使用PostgreSQL是一个好主意?

我想在我的AWS lambda函数中使用Postgresql作为数据库,但是我担心性能。 我担心Lambdas是无状态的,只是在执行的时候才存在,所以我想像每次Lambda被触发时,它都会尝试启动一个全新的PG连接。 我不知道这是否会降低性能或以某种方式导致旧的连接问题。 任何人都知道更多这个? 我知道DynamoDB更符合Lambda,但我确实需要一个关系数据库,但同时也是Lambda的可扩展性。

在AWS lambda函数中使用require

我目前正在研究AWS lambda函数,如果我可以在其中使用require语句,我就可以find任何地方,这样我就可以使用其他非lambda函数。 我知道关于压缩节点模块文件夹,但这不帮我在这里,因为我不打算使用节点模块,感谢任何答案!

将较大的CSV文件加载到DynamoDb中的最佳/最佳方法

我的本地机器上有一个巨大的.csv文件。 我想要在DynamoDB(欧洲西部-1,爱尔兰)中加载这些数据。 你会怎么做? 我的第一个方法是: 在本地迭代CSV文件 通过curl -X POST -d '<row>' …/connector/mydata向AWS发送一行 在lambda中处理以前的调用,并在DynamoDB中写入 我不喜欢这个解决scheme,因为: 有太多的要求 如果我发送没有CSV头信息的数据,我必须对lambda进行硬编码 如果我使用CSV标头发送数据,则stream量太大 我也在考虑把这个文件放到一个S3存储桶中,然后用一个lambda ,但是这个文件很大,lambda的内存和时间限制让我感到恐慌。 我也在考虑在EC2机器上做这个工作,但是我失去了反应(如果我在不使用的时候关掉机器)或者我赔钱(如果我不关机的话)。 我被告知Kinesis可能是一个解决scheme,但我不相信。 请告诉我,如果你是我,那么获得DynamoDB中huge CSV文件的最佳方法是什么。 我想尽量减less“秒”上传的工作量。 我更喜欢使用Node.js或R. Python作为最后的解决scheme可能是可以接受的。

AWS Lambda返回PDF文件

我创build了一个使用无服务器的lambda函数。 这个函数是通过GET请求的API网关触发的,并且应该从缓冲区中返回一个pdf文件。 我正在使用html-pdf创build缓冲区,并尝试使用以下命令返回PDF文件 let response = { statusCode: 200, headers: {'Content-type' : 'application/pdf'}, body: buffer.toString('base64'), isBase64Encoded : true, }; return callback(null, response); 但浏览器只是无法加载PDF,所以我不知道如何将PDF文件直接返回到浏览器。 无法find解决scheme。

数组for each传递“push”作为参数

在JS面临奇怪的问题。 我收到此错误: let a = [] let b = [1,2,3] b.forEach(a.push) TypeError: Array.prototype.push called on null or undefined at Array.forEach (native) at repl:1:3 at REPLServer.defaultEval (repl.js:262:27) at bound (domain.js:287:14) at REPLServer.runBound [as eval] (domain.js:300:12) at REPLServer.<anonymous> (repl.js:431:12) at emitOne (events.js:82:20) at REPLServer.emit (events.js:169:7) at REPLServer.Interface._onLine (readline.js:211:10) at REPLServer.Interface._line (readline.js:550:8) 当然,我提出了一个build议,即上下文丢失了。 所以我试图通过这种方式来实现: b.forEach([].push.bind(a)) 结果变得不可预测: [ 1, […]

aws lambdaerror handling

我试图从外部node.js应用程序(即不在AWS上)调用lambda函数。 我使用AWS文档中的代码示例,对名义情况非常有用。 但是,在发生错误的情况下,我的调用函数永远无法正确处理它。 我的调用代码如下: //AWS.config before var pullParams = { FunctionName : 'myFunctionName', InvocationType : 'RequestResponse', LogType : 'None', Payload : JSON.stringify({ "myParam" : params }) } var lambda = new AWS.Lambda(); lambda.invoke(pullParams, function(invocationError, data) { console.log("error value: " + invocationError) if (invocationError) { console.log("Error invoking AWS " + invocationError); //process error } else { […]

节点使用全局variables

我是NodeJS的新手,但是经验丰富的程序员。 我正在做一个项目,让我的脚与节点湿润。 我在看MongoDB的存储。 要开始我只想testing在节点中创build一些基本的CRUDfunction。 我在下面列出了我的代码。 我的问题是关于全球变化“更新”。 它被用在“读”和“更新”函数中,以控制下一个被调用的函数。 我想按照以下顺序调用它们:创build,读取,更新,读取,删除。 这是我的理解是,我不能传递一个函数参数来“读”来指定下一个要调用的函数,因为这是asynchronous调用的,而我定义的lambda函数是我的callback函数mongojs.read将不会有父函数参数使用。 什么是正确的方法来做到这一点? 使用全球感觉就像一个黑客。 🙂 // app.js //<user>:<password>@<server>/<database> var connection = "foo:bar@127.0.0.1/blah"; var collections = ["scores"] var db = require("mongojs").connect(connection, collections); //console.log(db); var updated = false; function my_create() { console.log("my_create"); db.leaderboard.save({name: "sunder", score: 42}, function(err, result) { if(err || !result ) { console.log("Score save failed"); console.log(err); } else […]

AWS lambda node.js

我在从node.js.写入的Lambda函数将数据保存到DynamoDB时遇到了问题。 我想问一下,如果我的代码写得不错,因为我将需要每秒钟保存约100个项目,而且我找不到其他方式将数据从Lambda函数保存到DynamoDB,而不是使用put函数。 当我尝试保存约500个项目(500条logging)时,它使任务超时延迟。 如果我保存了大约50个项目,它有时会保存所有的数据,但有时有大约20个项目,有时它不保存任何东西。 我的lambda代码: var AWS = require("aws-sdk"); var dynamodb = new AWS.DynamoDB.DocumentClient(); var numberOfInsertedRows = 0; var actualInsertedRow = 0; var insertItem = function(oneRow, context){ var params = {}; params.TableName = 'MyTable'; params.Item = oneRow; dynamodb.put(params, function(err, data) { if (err) { console.log('ERROR'); console.log(err); context.fail('some error'); } else { actualInsertedRow++; if(actualInsertedRow == numberOfInsertedRows){ […]