Tag: serverless framework

如何在无服务器框架中为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 […]

无服务器AWS Lambda Express应用程序中的摩卡testing

我有一个nodejs应用程序基于expressjs ,我正在testing使用gruntjs作为任务运行者和mochajs作为testing框架。 因此,我编写了组件testing,集成testing和unit testing,这些testing是通过grunt test执行的,或者是在开发过程中直接通过mocha test/component/v1/apiX本地执行的,而在部署过程中作为CIstream程的一部分在testingVM上执行。 现在,当考虑将此应用程序迁移到AWS Lambda(也称为无服务器)时 ,会想到以下有关我的testing和CI过程的问题(请注意,我将使用aws-serverless-express ,因此不必明确写入lambda函数) : 1)如何实现通过HTTP API请求完成的组件/ e2etesting? 2)如何实现只加载和testing应用程序的一部分的集成和unit testing? 3)如果任何一个testing失败,如何整合一个拒绝部署的新的CIstream程? 我认为问题1)大部分已经解决了:从外部testingAWS Lambda的方法有很多。 您可以执行lambda-to-lambdatesting,从testinglambda直接调用您的lambda-to-test,也可以使用来自test-lambda的HTTP通过AWS API Gateway调用lambda-to-test,如此处所述。 你也可以使用serverless-mocha-plugin进行本地lambdatesting(如果使用无服务器的话 )。 这是2)它变得有趣:一旦你的lambda部署它是一个黑匣子。 你不能执行任何没有被明确声明为lambda接口的东西。 我如何保存或重新实施现有的摩卡咖啡单元和集成testing? 3)相同:你如何让你的CI运行所有的部署testing,如果失败,拒绝部署? 这里是我自己的方法:只有在testing环境中,我才能使我的节点应用程序无服务器。 简单地让它作为经典的节点HTTP服务,通过使所有无服务器的变化有条件的取决于环境。 由于几乎没有变化,这应该是可能的和可维护的。 现在我可以像往常一样在本地运行testing,并使用grunt和mocha进行部署。 然后,如果我想确认无服务器版本也可以,我仍然可以进行最后的lambda-to-lambdatesting。

无服务器NodeJS文件/文件夹结构

我正在使用无服务器设置我的第一个项目,当我find很多很好的“入门”教程时,我很难find关于实际项目结构的任何信息。 我的想法是使用下面的结构为我的function,共享库和核心configuration/依赖项: |- functions/ |— users/ |—– handler.js |—– serverless.yml |— roles/ |—– handler.js |—– serverless.yml |- shared/ |— common.js |- node_modules/ |- package.json 我主要的好奇心是围绕部署,以及如何与依赖和共享文件有关。 此外,自动部署这个结构似乎很奇怪,因为我正在收集我需要分别部署每个函数,我可以脚本,但想知道是否需要或build议。

你如何将aws-sdk-js绑定到无服务器框架优化包中?

由于SDK的加载方式,无法通过browserify运行适用于node.js的AWS开发工具包 我想包括一个更新版本的AWS开发工具包的节点,然后什么是包含在lambda中,但我也想优化(通过browserify)我的lambda node.js代码。 我如何解决这个问题?

如何优化AWS Lambda?

我目前正在使用带有无服务器框架的 AWS Lambda构buildWeb API。 在我的lambda函数中,它们每个都连接到Redis(elasticache)和RDB(Aurora,RDS)或DynamoDB以检索数据或写入新数据。 而我所有的lambda函数都在我的VPC中运行。 除了当lambda函数首次执行或执行一段时间后,执行lambda函数需要相当长的时间(1-3秒),或者有时甚至会响应网关超时错误(大约在30秒),即使我的lambdafunctionconfiguration为60秒超时。 正如在这里所说,我假设1-3秒是为了初始化一个新的容器。 但是,我不知道是否有办法缩短这个时间,因为1-3秒或网关超时并不是真正的生产使用的理想select。

无服务器NodeJS /本机node_modules

我遇到了使用无服务器框架在AWS Lambda中加载节点模块的问题。 我的一个节点包使用本机库,所以我使用EC2来创buildnode_module文件夹,然后将它们复制到我的无服务器项目。 一切正常,如果我手动压缩项目并上传到AWS Lambda,但如果我使用serverless deploy没有指定的工件,我得到关于该模块的错误(特别是: ELF file's phentsize not the expected size关于一个.node文件) 我已经尝试添加excludeDevDependencies: false ,这使得部署更大,但仍然给我的错误。 目前,只有在我压缩项目文件夹的内容并将该文件指定为要上载的工件时才有效。 有没有一种不同的方式来获得具有本地绑定节点模块部署无服务器? 更新:在closures开发依赖项的排除之后,使用serverless package并检查serverless package扩展的zip文件创build,我发现.o和.a文件的文件大小在打包版本中与原始文件大小不同。 这是正常的吗?

AWS Lambda可以与S / FTP进行交互吗?

我写了一些基本的js来列出一个FTP的文件,但我得到: “完成请求之前退出进程” 那是因为Lambda无法与FTP交互? 我正在使用jsftp btw。 这是我的设置: 我使用无服务器来创build项目 对于我的lambda,我使用了nodejs,而且我正在使用JSFTP来处理ftp的东西。 我的代码: // Require Serverless ENV vars var ServerlessHelpers = require('serverless-helpers-js').loadEnv(); // Require Logic var lib = require('../lib'); // Lambda Handler module.exports.handler = function (event, context) { lib.respond(event, function (error, response) { return context.done(error, response); }); }; 我的ftp lambda代码: var JSFtp = require("jsftp"); module.exports.respond = function (event, cb) […]

AWS Lambda和无服务器推荐使用什么本地节点版本

从AWS-Lambda和无服务器框架开始,我对节点版本感到困惑: AWS帮助网站表示(截至2016年3月21日) AWS Lambda支持以下运行时版本: Node.js:v0.10.36 所以我没有在我的本地机器上安装Node.js v0.10.36。 通过安装最新的(v 0.4.2)无服务器框架 npm install serverless -g 它给出了以下警告: npm WARN引擎serverless@0.4.2:想要:{“node”:“> = 4.0”}(current:{“node”:“0.10.36”,“npm”:“1.4.28”}) 我认为在AWS上本地使用相同版本可能有助于获得一致的开发环境…我错了吗? 我应该在本地运行什么Node.js版本以最大限度地利用无服务器?

我应该如何从AWS Lambda函数连接到Redis实例?

我正在尝试使用AWS Lambda和无服务器框架为单页Web应用程序构buildAPI。 我希望使用Redis Cloud进行存储,主要是为了兼顾速度和数据持久性。 我将来可能会使用更多的Redis Cloudfunction,所以我宁愿避免使用ElastiCache。 我的Redis Cloud实例与我的function在同一AWS区域中运行。 我有一个名为related的函数,它将GET请求中的hashtag接收到API端点,并检查数据库中是否有条目。 如果它在那里,它应该立即返回结果。 如果不是,则应查询RiteTag ,将结果写入Redis,然后将结果返回给用户。 我很新,所以我可能做一些天真的事情。 这是事件处理程序: 'use strict' const lib = require('../lib/related') module.exports.handler = function (event, context) { lib.respond(event, (err, res) => { if (err) { return context.fail(err) } else { return context.succeed(res) } }) } 这是../lib/related.js文件: var redis = require('redis') var jsonify = require('redis-jsonify') var rt […]