问题标签 [serverless-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
813 浏览

node.js - MongoDB NodeJS驱动的browserify兼容性(调试帮助)

试图找出我无法浏览 mongodb 本机 nodejs 驱动程序的问题。我假设我的设置中有问题,因为我尝试使用谷歌搜索是否存在任何已知的当前与 MongoDB NodeJS 驱动程序和 browserify 的兼容性问题,但在尝试了几天后没有得出任何结论;(

在 browserify 上运行我的代码后,我得到一个

我在驱动程序的 github 存储库中读到该驱动程序依赖于一些本机功能以及 kerberos 和 node-gyp。我在我的机器上安装了驱动程序,npm install mongodb --save 没有任何问题,所以我不知道是否可能是这种情况。

我用完了调试想法,所以我转向了有福的 SO 社区 :)

我正在使用无服务器框架为 AWS Lambda 开发(所以我担心驱动程序是否真的会在 Lambda 实例上运行,因为驱动程序需要一些本机功能......)。这是我的测试代码

我在我的原始代码中使用了一些 ES6 语法,比如 import 和 let bc 我也用 babelify 对其进行了转换,但被删除了,所以只是简单的 browserify 会产生一些问题

我像这样跑

如果有人能对此有所了解,我将不胜感激。

谢谢

0 投票
3 回答
4850 浏览

python - 如何在 python 中部署函数及其依赖项?

我正在尝试使用该serverless框架来创建和部署 AWS Lambda 函数。vendored我在项目的根目录中创建了一个名为的文件夹并安装(使用pip install)函数依赖项。但是,每当我尝试运行它(使用serverless function run)时,都会出现错误:

无服务器:正在运行 isNewUser ...
无服务器:警告:未定义此变量:区域
无服务器:-----------------
无服务器:失败 - 返回此错误:
无服务器:{“异常”:[“回溯(最近一次调用最后一次):\n”,“文件\”/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler \",第 170 行,在 \n handler = import_program_as_module(path)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\" ,第 149 行,在 import_program_as_module\n module = make_module_from_file('lambda_handler', handler_file)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python- handler\",第 129 行,在 make_module_from_file\n py_source_description\n"," File \"/home/fernando/workspace/os-cac/isNewUser/handler.py\",第 11 行,在 \n 中来自 vtex.order 导入Order\n", "ImportError: No module named vtex.order\n"],"success": false} 无服务器:来自 Python 的异常消息
无服务器:回溯(最近一次调用最后一次):,文件“/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”,第 170 行,在 handler = import_program_as_module(path) , 文件 "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", 第 149 行, 在 import_program_as_module 模块 = make_module_from_file('lambda_handler', handler_file) , 文件 "/home /fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”,第 129 行,在 make_module_from_file py_source_description 中,文件“/home/fernando/workspace/os-cac/isNewUser/handler.py ",第 11 行,从 vtex.order 导入 Order ,ImportError: No module named vtex.order `

vtex.order是在 handler.py 中导入的模块

我的项目的结构是这样的:

有什么我做错了吗?我应该以某种方式配置我的函数以包含来自 vendored 的依赖项吗?

0 投票
1 回答
26652 浏览

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

我正在尝试使用AWS LambdaServerless Framework为单页 Web 应用程序构建 API 。我想使用Redis Cloud进行存储,主要是因为它结合了速度和数据持久性。将来我可能会使用更多 Redis Cloud 功能,因此我宁愿避免使用 ElastiCache。我的 Redis Cloud 实例与我的函数在同一 AWS 区域中运行。

我有一个名为的函数related,它从 GET 请求到 API 端点获取标签,并检查数据库中是否有它的条目。如果它在那里,它应该立即返回结果。如果没有,它应该查询RiteTag,将结果写入 Redis,然后将结果返回给用户。

我对此很陌生,所以我可能正在做一些非常天真的事情。这是事件处理程序:

这是../lib/related.js文件:

在某种程度上,所有这些都按预期工作。如果我在本地运行该函数(使用sls function run related),我没有任何问题——标签按应有的方式从 Redis 数据库读取和写入。但是,当我部署它(使用sls dash deploy)时,它在部署后第一次运行时工作,然后停止工作。所有后续运行它的尝试都只是返回null到浏览器(或 Postman、curl 或 Web 应用程序)。无论我用于测试的标签是否已经在数据库中,这都是正确的。如果我随后重新部署,不对函数本身进行任何更改,它就会再次工作——一次。

在我的本地机器上,该函数首先记录Connected: true到控制台,然后是查询结果,然后Connection closed.在 AWS 上,它记录Connected: true,然后是查询结果,仅此而已。在第二次运行时,它记录Connection closed.并没有其他内容。在第三次和所有后续运行中,它根本没有记录任何内容。两种环境都不会报告任何错误。

很明显,问题出在与 Redis 的连接上。如果我不在回调中关闭它,那么随后调用该函数的尝试就会超时。我也尝试过使用redis.unref而不是redis.quit,但这似乎没有任何区别。

任何帮助将不胜感激。

0 投票
2 回答
1976 浏览

aws-lambda - 如何在 Lambda 函数中使用 CloudFormation 资源?

我在我的 s-resource-cf.json(一个 CloudFormation 模板)中添加了一个 Redis ElastiCache 部分,并选择了它的主机名作为输出。

我可以让 CloudFormation 在运行时输出 Redis 服务器主机sls resources deploy,但是如何从 Lambda 函数中访问该输出?

此入门项目模板中没有任何内容引用IamRoleArnLambda示例项目附带的那个。根据文档,模板仅可用于项目配置,无法从 Lambda 函数访问:

模板和变量仅用于配置

模板和变量仅用于项目的配置。此信息在您的 lambda 函数中不可用。要设置 lambda 函数可以使用的变量,请使用环境变量。

那么,在创建 ElastiCache 服务器后,如何将环境变量设置为 ElastiCache 服务器的主机名?

0 投票
4 回答
18479 浏览

node.js - 无服务器框架:如何添加外部 NPM 包?

我的情况是我在将外部 NPM 包添加到我的无服务器框架项目(特定包是 geopoint)时遇到了一些麻烦。

我去了无服务器项目的根文件夹并运行npm install geopoint --save. package.json 更新dependencies": { "geopoint": "^1.0.1" }并创建了 node_modules 文件夹。

我的文件夹结构如下所示:
root-project-folder
-functions
--geospatial
---
handler.js -node_modules
--geopoint

在我的functions/geospatial/handler.js中,我声明了geopoint模块:

lambda 控制台返回以下错误:

如何正确地将外部 NPM 模块添加到无服务器框架项目?

0 投票
3 回答
1061 浏览

amazon-web-services - AWS API Gateway 默认响应和触发 AWS Lambda

我一直在尝试使用 AWS API Gateway 和 AWS Lambda 来尝试无服务器架构。一直在浏览博客和 AWS 文档。已尝试示例 GET/POST。但是,我有以下要求 wrt 从我的自定义应用程序中跟踪用户事件

  • 事件从我的应用程序发布到 API 端点
    • 我希望 API 以自定义响应(例如 {'fine'})进行响应(确认已收到请求)
  • 发送响应后,将事件负载移交给 AWS Lambda 函数

根据文档,我了解,a)我可以将事件发布到 API 端点 b)在 GET/POST 触发 AWS Lambda 函数 - 从 AWS Lambda 函数响应 API 请求

我想更改上述内容并将其修改为 a) 将事件发布到 API 端点 a.0) 回复确认已收到请求 [Say {'fine'} ] b) 触发 AWS Lambda 函数以处理事件有效负载

请分享有关如何实现相同目标的建议。

0 投票
1 回答
303 浏览

amazon-dynamodb - 带 DynamoDB 的无服务器框架:Lambda 函数工作,但数据尚未保存到 DynamoDB

我已经处理了一些麻烦的无服务器框架和 DynamoDB。

执行我的 lambda 函数后,context.succeed(result)将返回结果,但没有任何内容写入 DynamoDB。

这是演示回购的链接。

我读过这个问题

然后我将资源添加到s-resources-cf.json, 然后serverless resources deploy再一次。发送请求后,它仍然对 DynamoDB 不执行任何操作。

这是我所做的事情:

  • 创建表:posts主键在特定区域

  • 附加AdministratorAccess到我的IAM角色(我知道这样做很糟糕。)

  • 添加 {"Effect": "Allow", "Action": ["*"], "Resource":"arn:aws:dynamodb:${region}:*:table/*"}s-resources-cf.json

我还有什么误解吗?

0 投票
1 回答
1148 浏览

node.js - 如何优化 AWS Lambda?

我目前正在使用 AWS Lambda 和Serverless Framework构建 Web API 。

在我的 lambda 函数中,它们每个都连接到 Redis (elasticache) 和 RDB (Aurora, RDS) 或 DynamoDB 以检索数据或写入新数据。我所有的 lambda 函数都在我的 VPC 中运行。

一切正常,除了当第一次执行 lambda 函数或在最后一次执行后一段时间执行时,执行 lambda 函数需要相当长的时间(1-3 秒),或者有时它甚至响应网关超时错误(大约30 秒),即使我的 lambda 函数配置为 60 秒超时。

如此处所述,我假设 1-3 秒用于初始化一个新容器。但是,我想知道是否有办法减少这个时间,因为 1-3 秒或网关超时对于生产使用来说并不是一个理想的选择。

0 投票
2 回答
1354 浏览

serverless-framework - 如何在 S3 托管的客户端中使用 API 网关的端点 URL?

我正在开发一个无服务器应用程序,该应用程序将涉及托管在 S3 上的 SPA 客户端,通过 API Gateway 在后端调用 Lambda 函数。

当我使用 Servless 部署我的 Lambda 函数时,它会打印出端点 URL,例如:https://ia6dga0can.execute-api.us-east-1.amazonaws.com/stagename/fnname。这很好,但我如何将它与托管在 S3 的客户端代码连接在一起?

我正在寻找一个完全自动化的解决方案,理想情况下不涉及在任何地方手动复制此 URL 或以使其无法在多个阶段(部署)中使用的方式修改源。

0 投票
1 回答
1412 浏览

javascript - AWS Lambda 持续时间与函数运行时间

我注意到我的 Nodejs Lambda 函数在云监视日志中存在持续时间与函数运行时间的问题。我正在使用无服务器插件来部署/编码我的功能。

这是我的 lambda 函数代码:

在云监视日志中,我得到以下信息

我想知道为什么函数运行时间为 477 毫秒,但持续时间为 1866 毫秒。

我的代码中是否需要调用以提前结束 Lamdba 函数?

谢谢