Articles of lambda

Twilio客户端错误:使用AWS Lambda / AWS API网关进行Twilio IP消息传递

我试图做一个简单的聊天应用程序基于Twilio的例子( https://github.com/TwilioDevEd/ipm-quickstart-node )。 我能够快速启动并运行。 我想修改一下 无论何时用户通过Web界面( http://localhost:3000 )发送消息,都会触发Twilio的webhook。 这个webhook PING一个映射到AWS Lambda函数的AWS API端点。 此AWS Lambda函数接收Channel Sid,进行身份validation,并简单回复“您说了什么? 我已经正确设置了AWS Lambda和AWS API网关。 以下是我的Lambda代码示例: 'use strict'; var TWILIO = require('twilio'); var AccessToken = require('twilio').AccessToken; var IpMessagingGrant = AccessToken.IpMessagingGrant; var http = require("http"); module.exports.handler = function(event, context, cb) { var accountSid = 'TWILIO-ACCOUNT-SID'; var authToken = 'TWILIO-AUTH-TOKEN'; var IpMessagingClient = TWILIO.IpMessagingClient; […]

AWS Lambda函数在完成请求之前退出

我正在尝试遵循S3和Lambda的AWS指南 http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html 我在手动testing阶段,但是当我尝试运行testing时,我得到“errorMessage”:“在完成请求之前退出进程”。 在日志中,失败点与async.waterfall代码有关。 当我运行Lambda函数时,它会得到我的示例图像,resize并将其放入新的S3存储桶。 然后它看起来像asynchronous试图find一个未定义的“nextTask”运行。 我从来没有使用过asynchronous,所以我不知道如何解决这个问题。 cloudwatch日志文件给了我这个 2016-09-16T18:36:44.011Z 836d0280-7c3c-11e6-933a-9b5b3a5e8dd8 TypeError: undefined is not a function at /var/task/ResizeImages.js:98:13 at /var/task/node_modules/async/dist/async.js:486:20 at nextTask (/var/task/node_modules/async/dist/async.js:5008:33) at Response.<anonymous> (/var/task/node_modules/async/dist/async.js:5015:17) at Response.<anonymous> (/var/task/node_modules/async/dist/async.js:339:31) at Response.<anonymous> (/var/task/node_modules/async/dist/async.js:847:20) at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:355:18) at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20) at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10) at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:615:14) 要安装asynchronous(和imageMagik),我只是使用该命令 npm install async gm 在我的node_modules文件夹里面。 我使用的示例节点脚本是在这里,第98行被评论。 // dependencies var async […]

AWS API网关:由于configuration错误而导致执行失败:响应中的JSON无效

我有一个调用Lambda函数的自定义授权者的API网关设置。 为了testing的目的,我从这里复制了这个例子: http : //docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html#api-网关代理集成-λ-function的NodeJS 我得到的文件相同的答案,但是当我testing授权者,我得到这个堆栈跟踪: Endpoint request body after transformations: {"type":"TOKEN","authorizationToken":"test","methodArn":"arn:aws:execute-api:ap-southeast-2:893445519708:uyue0zqh15/null/GET/"} Authorizer result body before parsing: {"statusCode":200,"headers":{"x-custom-header":"my custom header value"},"body":"{\"message\":\"Hello World!\",\"input\":{\"type\":\"TOKEN\",\"authorizationToken\":\"test\",\"methodArn\":\"arn:aws:execute-api:ap-southeast-2:893445519708:uyue0zqh15/null/GET/\"}}"} Execution failed due to configuration error: Invalid JSON in response: {"statusCode":200,"headers":{"x-custom-header":"my custom header value"},"body":"{\"message\":\"Hello World!\",\"input\":{\"type\":\"TOKEN\",\"authorizationToken\":\"test\",\"methodArn\":\"arn:aws:execute-api:ap-southeast-2:893445519708:uyue0zqh15/null/GET/\"}}"} AuthorizerConfigurationException 为什么授权人不喜欢JSON响应?

AWS lambda无服务器网站会话维护

我开发了一个使用node.js作为后端的网站。 最近我试图使它无服务器,并部署到lambda。 我将重写大部分代码,但是在用户login后还没有想出如何维护会话。我使用“express-session”模块,会话数据全部logging在数据库中。 说实话我对会议没有很深的理解。 我search了谷歌,没有find我所需要的。 有没有人有一些使用lambda维护会话的示例代码? 或任何资源。 非常感谢!

Lambda从MySQL RDS获取数据,但超时

我正在使用Lambda连接到RDS与VPC和正常工作。 我可以成功从MySQL获取数据,但Lambda会超时。 CloudWatch日志: 2017-02-15T18:56:18.609Z [RowDataPacket {userInfo:'xxx'}] END RequestId:xxx REPORT RequestId:xxx持续时间:300001.69 ms计费时间:300000 ms内存大小:512 MB使用的最大内存:22 MB 2017-02-15T19:01:18.306Z xxx任务在300.00秒后超时 Handle.js db.getPersonInfo("xxx", function (err, result) { console.log(result); const response = { statusCode: 200, body: JSON.stringify({ message: 'test', input: event, }), }; callback(null, response); }); DB.js var getPersonInfo = function(userId, callback){ pool.getConnection(function(err, connection){ var sql = 'SELECT userInfo FROM user […]

Lambda函数失败无法导入模块“索引”

错误: Unable to import module 'index': Error at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object.<anonymous> (/var/task/node_modules/slack-incoming-webhook/lib/index.js:3:19) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) 通过看起来这个我的代码是不是问题这是一个问题,松散的传入webhook节点模块,但是一块有问题的代码是这条线,看起来完全正常。 var SlackClient = require('./client'); 我已经尝试了4个不同的包(request,http,node-webhooks和slack-incoming-webhooks),并且它们都在节点模块中都失败了。 我非常困惑,因为我可以让代码在我自己的计算机上和Amazon Linux AMI EC2实例上运行(运行相同的节点版本) 所有的代码被压缩并使用aws-cli发送到lambda,并且我已经在lambda上部署了node.js代码,没有任何问题(alexa技能)。 我已经试过在ec2实例npm安装,我已经尝试了几个不同的包,我已经得出结论必须有某种configuration错误的lambda,但我找不到什么。 有人能指点我吗? 这里是我的代码,如果有人也好奇拉姆达触发器是aws iotbutton。 const slack = require('slack-incoming-webhook'); const send […]

将AWSconfiguration传递给导入的模块

我正在尝试通过在本地运行JS单元来testingJS AWS Lambda。 为了模拟Lambda环境,我假定Lambda与AWS.config.credentials具有相同的angular色,然后简单地调用我导入的Lambda函数。 这工作如果我复制和粘贴到testing文件的Lambda函数,但如果我导入它然后似乎函数运行一个干净的AWS.config没有我的configuration。 我可以更改Lambda模块导入AWS的方式(使其成为全局或执行其他操作),以便从testing中获取configuration,但是我更愿意将文件保存为应该上传到Lambda的文件。 在AWS Lambda中,AWS凭证以某种方式预先configuration,而模块不必执行任何操作,我想模拟该function。 这怎么能在Node中完成? 编辑:您可以在AWS Lambda中运行任何示例函数。 例如,只需在适当的AWS Lambda中运行下面的代码即可。 var AWS = require("aws-sdk"); var dynamo = new AWS.DynamoDB.DocumentClient(); dynamo.query(…) 要在本地运行,必须在此代码之前加上以下内容: AWS.config.update({region: 'us-east-1'}); AWS.config.credentials = new AWS.SharedIniFileCredentials(); AWS.config.credentials = new AWS.TemporaryCredentials({ RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials', }); 问题是,在unit testing文件中运行此configuration步骤不会使configuration可用于导入的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的可扩展性。