Articles of serverless framework

如何从无服务器框架中的aws lambda调用mongodb函数?

我一直在观看像这样的无服务器框架上的video教程,并根据我收集的信息,似乎使用框架是pipe理aws lambda函数的最有效的方法之一。 在上面的video链接中,给出了一个使用lambda函数连接到DynamoDB表的示例,然后将其保存。 我需要做的是连接到一个MongoDB表,然后从中获取数据。 我只find了在无服务器上使用DynamoDB但在MongoDB中没有的例子。 我认为这个过程应该是相似的,但似乎并非如此。 我发现这个教程,但它不使用无服务器框架。 下面是在无服务器框架中从lambda连接并保存到Dynamo数据库表的示例: const uuidV1 = require('uuid/v1'); const AWS = require('aws-sdk'); const promisify = require('es6-promisify'); const _ = require('lodash'); const dynamo = new AWS.DynamoDB.DocumentClient(); module.exports.saveUserToDatabase = function(userId, coffeeType, coffeeSize) { console.log('saveUserToDatabase'); const item = {}; item.drink = coffeeType; item.size = coffeeSize; item.userId = userId; return saveItemToTable('coffee-user-table', item); }; 以下片段是用于使用名为lambda-local的npm包连接到MongoDB Atlas数据库的代码: […]

AWS Lambdafunction在部署后不起作用

当我在本地部署我的服务器lessfunction它工作得很好,但是当它部署到aws lambda时,我已经包括了networking包也没有错误离线运行 Syntax error in module 'handler': SyntaxError (function (exports, require, module, __filename, __dirname) { import mongoose from 'mongoose'; ^^^^^^

无服务器框架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) […]