我正在使用无服务器框架来构建REST API。我已经达到了200个限制堆栈大小,并了解了多种绕过它的方法。最常见的方法是以“微服务方式”拆分堆栈,其中每个堆栈都处理一组有意义的特定资源。
由于无服务器的工作方式,所有这些服务都会为其自身创建一个新的api网关,然后,如本博文中所述,可以在它们之间设置一个共享域,以便可以通过相同的基本url访问所有端点。
即使这是一个有效的解决方案,我仍然非常希望能够使用在不同堆栈之间共享的单个API网关资源,因此我不必预先决定api的不同组件之间的关注点分离。这可能吗?
使用无服务器框架(在Mac OS X High Sierra上)时,SLS_DEBUG环境变量设置为启用详细的调试信息
export SLS_DEBUG=*
Run Code Online (Sandbox Code Playgroud)
问题:现在如何禁用它(除了转移到新终端)?export SLS_DEBUG=false没有做到这一点.
macos serverless-framework serverless-architecture serverless aws-serverless
目前我正在开发一个使用 Serverless Framework 和 Go 的 API。
我正在使用 Serverless-offline 插件进行本地测试。
该 API 依赖于其他一些存储库(我也维护这些存储库),我使用该go.mod文件导入这些存储库。
然而,我很难完善我的开发人员工作流程。
目前,如果我想对此 API 所依赖的存储库进行更改,我必须更改项目go.mod以包含替换指令以进行测试,但随后我必须手动将其更改回以部署到生产环境。
基本上我正在寻找一种包含替换指令的方法,该指令仅在本地开发期间应用。其他人都是如何处理这个问题的?
额外问题:有什么方法可以在 docker 中离线运行 Serverless 吗?我发现在裸机上运行的无服务器离线会导致不同开发人员环境之间的不一致。
上下文: 我正在尝试通过 Netlify 使用 Apollo Server Lambda 部署 GraphQL。我的处理程序如下:
代码:
exports.handler = server.createHandler({
cors: {
origin: '*'
}
});
Run Code Online (Sandbox Code Playgroud)
我能够在 Netlify 上成功构建和部署 - 但是服务器在启动时抛出错误。Netlify 正在寻找要触发的事件,但我使用的 Apollo Server 处理程序没有提供。我们如何将此处理程序连接到使用事件的处理程序?
错误信息:
{"errorType":"Error","errorMessage":"Unable to determine event source based on event.","trace":["Error: Unable to determine event source based on event."," at getEventSourceNameBasedOnEvent (/var/task/node_modules/@vendia/serverless-express/src/event-sources/utils.js:88:9)"," at proxy (/var/task/node_modules/@vendia/serverless-express/src/configure.js:38:51)"," at handler (/var/task/node_modules/@vendia/serverless-express/src/configure.js:99:12)"," at Runtime.handler (/var/task/node_modules/apollo-server-lambda/dist/ApolloServer.js:51:27)"]}
Run Code Online (Sandbox Code Playgroud) 我在aws上使用无服务器,以nodejs和mongodb atlas作为数据库
目前我使用的是试用版,最多允许 500 个连接。
似乎我的代码在进程结束时没有断开数据库连接
我正在使用express来管理它
首先,我没有关闭连接,认为一旦进程结束,连接就会自动关闭,但我没有打开很多连接。
然后我添加了一个中间件来在发送响应后关闭我的连接,它不起作用,我认为无服务器在响应发送后就会停止进程。
例如,并非在每条路线上我都会关闭 mongo 连接
router.get('/website/:id/page', async (req, res, next) => {
try {
const pages = await pageDataProvider.findByWebsite(req.params.id);
await mongodbDataProvider.close();
res.json(pages);
} catch (error) {
next(error)
}
})
Run Code Online (Sandbox Code Playgroud)
这就是我处理与 mongo 的连接的方式
const MongoClient = require('mongodb').MongoClient
const config = require('../config')
const MONGODB_URI = config.stage === 'test' ?
global.__MONGO_URI__ :
`mongodb+srv://${config.mongodb.username}:${config.mongodb.password}@${config.mongodb.host}/admin?retryWrites=true&w=majority`;
const client = new MongoClient(MONGODB_URI);
let cachedDb = null;
module.exports.connect = async () => {
if (cachedDb) return cachedDb;
await client.connect();
const dbName …Run Code Online (Sandbox Code Playgroud) 我正在开发一个无服务器项目。我想要实现或想知道是否可能的是,当我运行时,sls package我希望无服务器排除根目录中除一个文件夹之外的每个文件/文件夹。
我尝试了多种方法来使用无服务器文件中的模式来完成此操作,但没有任何效果。
package: #This didn't not work
patterns:
- '!./**'
- './dist/**'
package: # This didn't work
patterns:
- '!.*/**'
- './dist/**'
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?因为如果我明确定义特定文件夹,我就能够排除它们。但我无法使用通配符排除整个根目录。
package: # This works and excludes constant folder
patterns:
- '!./constants/**'
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过编写脚本来实现它。但我想知道是否可以通过简单地定义模式来通过无服务器框架来完成。
javascript yaml serverless-framework serverless aws-serverless
我有一个 monorepo,在自己的文件夹中包含一些函数。我想创建一个具有实用功能的公共层,我可以require/import在本地使用它,也可以在部署到云后使用它。我想添加一个layers/目录来执行此操作,文件夹结构如下所示:
A
|- node_modules/
|- package.json
|- index.js
B
|- node_modules/
|- package.json
|- index.js
layers
|- nodejs
|- node_modules
|- package.json
|- util.js
Run Code Online (Sandbox Code Playgroud)
我没有设置上面的文件夹结构,并且可以接受它的更改。
目前,我只有A和 以及B它们自己的独立依赖层(使用 编排terraform),并且它们在本地工作和部署都很好。
引入通用实用程序层后,问题是我可以在本地要求/导入,但在云中就不一样了(/opt/nodejs/*),但如果我将其更改为在云上工作,它将无法工作本地。
我没有使用该serverless框架。
无服务器部署抛出spawn serverless ENOENT\n尝试部署时出现以下错误client-service,尽管在此之前所有服务都已部署。
\n\n错误:生成无服务器 ENOENT
\n
使用以下版本进行无服务器和无服务器组合
\n"@serverless/compose": "^1.3.0",\n"serverless": "^3.22.0",\nRun Code Online (Sandbox Code Playgroud)\nserverless-compose.ts 配置
\nconst serverlessCompose = {\n services: {\n "infra-test": {\n path: "infra-test",\n },\n "client-service": {\n path: "client-\'service\'",\n dependsOn: ["infra-test"],\n },\n },\n};\n\nmodule.exports = serverlessCompose;\n\nRun Code Online (Sandbox Code Playgroud)\n带有使用标志的完整命令名称(如果不适用,请填写“N/A”)
\nserverless deploy --stage sbx
完整的命令输出。
\ninfra-test \xe2\x80\xba \ninfra-test \xe2\x80\xba Stack Outputs:\ninfra-test \xe2\x80\xba ServerlessDeploymentBucketName: infra-test-sbx-serverlessdeploymentbucket-yg91fd\ninfra-test \xe2\x80\xba 3 deprecations found: run \'serverless doctor\' for more details\ninfra-test \xe2\x80\xba deployed\nclient-service \xe2\x80\xba deploying\nclient-service \xe2\x80\xba Running "serverless deploy …Run Code Online (Sandbox Code Playgroud) node.js typescript serverless-framework serverless-architecture serverless
我在使用时无法热重载serverless offline start。
这是我的 serverless.yml 文件
service: function-with-environment-variables
frameworkVersion: ">=3.0.0 <4.0.0"
provider:
name: aws
runtime: nodejs16.x
plugins:
- serverless-offline
functions:
register:
handler: handler.register
events:
- http:
path: /register
method: post
login:
handler: handler.login
events:
- http:
path: /login
method: post
verify:
handler: handler.verify
events:
- http:
path: /verify
method: post
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用sls offline start仍然面临同样的错误。
这是输出serverless --version
`从node_modules运行“无服务器”框架核心:3.24.1(本地)3.24.1(全局)插件:6.2.2 SDK:4.3.2
当我升级到 Windows 11 时,我在部署无服务器应用程序时遇到问题。我尝试寻找安装“serverless-plugin-common-excludes”和“serverless-plugin-include-dependencies”等解决方案,但失败了。
这是错误:
无法读取文件 node_modules\rxjs\dist\types\internal\operators\publishLast.d.ts.map 由于: EMFILE:打开的文件太多,打开 'C:\Users\renzo\ARCS\admin-service.build\node_modules \rxjs\dist\types\internal\operators\publishLast.d.ts.map'
serverless ×10
node.js ×3
aws-lambda ×2
javascript ×2
express ×1
go ×1
go-modules ×1
graphql ×1
local ×1
macos ×1
mongodb ×1
netlify ×1
typescript ×1
yaml ×1