Articles of serverless framework

无服务器框架Facebook Bot慢(AWS Lambda)

我正在开发一个Facebook聊天机器人,我正在使用无服务器框架(Node.js)开发它并将其部署到aws lambda。 在开始的几个星期里,我使用无服务器的离线插件运行了一个本地无服务器的lambda模拟器,一切都很好。 昨天,我终于决定将其部署到AWS lambda,现在我看到性能和一致性的显着下降。 有时机器人需要10秒才能做出回应,有时甚至是瞬间的。 奇怪的是,在lambda云日志中,它总是说这个函数在150毫秒左右完成,这似乎超快,但脸谱机器人根本不反映速度。 我正在打一个数据库,但查询绝对不会花费近10秒的时间来运行。 更新: 我决定尝试使用邮差(这基本上是curl的)手动发送请求到API端点来testingbot。 每当api即时回复,即使我发送了与Messenger一样的请求主体。 所以看起来这个请求只是需要很长时间才能达到lambda api,但是当它到达那里时,它就像应该运行一样。 任何想法如何解决这个问题?

如何使用无服务器框架引用不在根文件夹中的函数?

我正在使用无服务器框架1.x,我想定义我的serverless.yml引用位于另一个文件夹(不在根级别)的函数。 例如,在下面的文件夹结构中,我想引用在文件夹函数内的function1.js文件中定义的handler() 函数 。 serverless.yml functions/ function1.js function2.js function3.js package.json node_modules/ .. 我所看到的所有示例都考虑以下基本情况:文件位于根目录中: serverless.yml handler.js 在哪里serverless.yml文件被定义为: functions: hello: handler: handler.hello

使用节点MySQ的无服务器框架,错误PROTOCOL_INCORRECT_PACKET_SEQUENCE

在AWS Lambda NodeJS(使用无服务器框架)上实施简单查询时遇到困难。 在本地运行它,但是当我将它上传到AWS,然后尝试使用API​​网关端点运行它时,出现此错误: { "code": "PROTOCOL_INCORRECT_PACKET_SEQUENCE", "fatal": true } 我无法find任何反应在谷歌,stackoverflow或git关于这个错误的问题。 而我无法弄清楚我做错了什么。 这就是我想要的。 var mysql = require('mysql'); var connection = mysql.createConnection({ host : '', user : '', password : '', database : '' }); function getLists (client_id,api_key,callback){ connection.query("SELECT * FROM list WHERE client_id = ?", [ client_id],function(error, results){ connection.end(); callback(error,results); } ); }; module.exports.run = […]

如何加载aws lambda中的lib文件夹?

在无服务器,我有以下文件夹结构 /component_a/function_1/function_1.js /component_a/lib/util.js 当我尝试从function_1.js使用加载util.js u = require('../lib/util.js') 它从无服务器CLI“无服务器function运行function__1”工作。 但是在lambda / api-gateway中找不到lib / util.js。 这是错误“错误:无法find模块”../lib/util'“ 我该如何解决?

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。

无法使用Serverless v1.4.0为AWS Lambda设置环境variables

在文档之后,我尝试在provider下的serverless.yml文件中声明环境variables: provider: cfLogs: true name: aws runtime: nodejs4.3 stage: dev region: eu-west-1 profile: serverless-admin environmnent: IS_REMOTE: ${file(./config.yml):IS_REMOTE} REMOTE_ENV: "YES" 尝试使用process.env.IS_REMOTE或process.env.REMOTE_ENV获取这些文件时,这些文件都不可用。 这是尝试console.log他们的日志: 2017-01-01 06:22:57.777 (+02:00) undefined REMOTE_ENV: undefined 2017-01-01 06:22:57.777 (+02:00) undefined IS_REMOTE: undefined 这是在使用serverless invoke (不在本地)时在Lambda内部。 希望有人能帮我弄清楚这一点,因为我似乎在跟踪有关正确的文档。

无服务器创buildLambda权限

我遇到了无服务器v1.5(在编写本文时现在可用的最新版本)的问题, 我必须为lambda函数添加权限,我试图通过创build一个CF模板并与该函数的部署一起运行来实现: resources: Resources: logsGroup: Type: "AWS::Lambda::Permission" Properties: Action: lambda:InvokeFunction FunctionName: Fn::GetAtt: – "${self:custom.${opt:stage}.name}" – "Arn" Principal: "logs.amazonaws.com" SourceAccount: Ref: "AWS::AccountId" SourceArn: "arn:aws:logs:${self:provider.region}:*:log-group:*:*" 这应该是这样的。 我的问题是,当我尝试部署它时,我得到一个错误,说该函数还没有创build,这是可以理解的。 我怎样才能克服这个问题? 有任何想法吗?

如何从lambda访问cognito联合身份的身份数据集

让我先从我想要实现的全面描述开始。 我正在使用Lambda,Cognito(联合身份validation),API网关等构build无服务器API。我正在使用aws_iam作为API网关中的授权者。 在某些端点,我需要访问例如用户的电子邮件或用户名或任何东西,所以我可以发回它的响应(也是没有提出请求的用户的数据)。 我想我正在寻找某种“pipe理”访问身份池,所以我可以检索基于cognitoIdentityId的数据。 在我的情况下,这些数据存储在Cognito的数据集中。 问题是,我如何从我的Lambda函数(node.js)访问这些数据? 这是一个很好的方法吗? 我应该使用别的东西而不是数据集? 有什么地方有个例子吗? 如有需要,我会很乐意提供更多的细节。 谢谢 编辑#1: 这里是我的lambda函数的代码: module.exports.getDataSet = (event, context, callback) => { console.log("event: " + JSON.stringify(event)); AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: IDENTITY_POOL_ID }); try { AWS.config.credentials.get(function() { var client = new AWS.CognitoSync(); var params = { DatasetName: 'userinfo', IdentityId: event.requestContext.identity.cognitoIdentityId, IdentityPoolId: IDENTITY_POOL_ID }; client.listRecords(params, function (err, data) […]

如何在无服务器框架中为POST端点添加请求模型

如何为POST端点添加请求模型,以便在导出API for iOS时显示在API网关中? 我可以在AWS中手动添加请求模型,但是由于这是通过服务器部署的,所以我需要在那里。 我看到有一个responseModels定义端点,但我看不到一个requestModels? 我的s-functions.json有这个 "endpoints": [ { "path": "blog/graphql", "method": "POST", "type": "AWS", "authorizationType": "AWS_IAM", "authorizerFunction": false, "apiKeyRequired": false, "requestParameters": {}, "requestTemplates": { "application/json": "{\"query\" : $input.json(\"$\")}" }, "responses": { "400": { "statusCode": "400" }, "default": { "statusCode": "200", "responseParameters": {}, "responseModels": {}, "responseTemplates": {}, "application/json": "" } } } ] 在AWS APIGateway中,我需要手动添加请求模型 […]

无服务器与nodejs和mysql =>进程退出之前完成请求

我正在用nodejs模板开发一些无服务器function。 我有一个服务,连接到一个MySQL数据库并检索一些数据。 当我第一次打电话时,一切都很好,但是当我重复一遍时,我会收到一个“完成请求前退出的进程”错误消息。 如果我再次尝试同一个电话,我会收到数据。 所以这个服务在奇怪的调用上是正确的,并且在偶数调用上返回错误(有趣的是?)。 这是处理函数的代码: module.exports.getAll = (event, context, done) => { deviceRepository.getAllDevices().then((response) => { done(null, { response }); }).catch((error) => { done(error); }); }; 这是版本库函数的代码: const mysql = require('mysql'); const when = require('when'); const config = require('./config'); const conn = mysql.createConnection({ host: config.RDSHOST, user: config.RDSUSER, password: config.RDSPASS, database: config.RDSDB, port: config.RDSPORT }); module.exports.getAllDevices […]