无服务器离线:处理多个 API 网关

gr3*_*r3g 5 serverless-framework serverless-architecture serverless-offline

当您只有一个时,您可以使用 Serverless Framework 和 Serverless Offline Plugin 轻松调试您的无服务器应用程序,但是当您有多个 API 网关/服务时,您如何处理这种情况?

我是否应该serverless offline为每个服务运行,并在每个服务中配置不同的端口.yml
并在环境变量中对该端口进行硬编码,以便我可以访问该端口(如果process.env.offline为真)?

maj*_*han 7

2022 年接受的答案的更新

根据文档--port不再可用--httpPort,而是lambdaPort像下面的代码一样

sls offline --httpPort 3001 --lambdaPort 3003
Run Code Online (Sandbox Code Playgroud)

或者 任何 CLI 选项都可以添加到您的 serverless.yml 中。例如:

custom:
  serverless-offline:
    httpsProtocol: "dev-certs"
    httpPort: 3001
    lambdaPort: 3003
    stageVariables:
      foo: "bar"
Run Code Online (Sandbox Code Playgroud)

来自官方文档


iaf*_*rek 6

如果您想在本地同时运行两个或多个无服务器 API 网关,您可以使用--port参数轻松完成。

基本上,打开两个命令行窗口,然后在第一个窗口中,转到您的第一个服务目录并运行:

sls offline start --port 3001

在另一个窗口中,转到第二个服务并运行:

sls offline start --port 3002

这样,您将有两个服务在两个端口上侦听(在本例中http://localhost:3001为 和http://localhost:3002)。

如果您还使用 serverless-dynamodb-local 插件,那么(目前)有一个问题:

如果您不使用 DynamoDB 插件,那么您可以立即停止阅读:)

DynamoDB 插件使用相同的--port参数,这会导致java.net.BindException: Address already in use

请参阅此问题:https ://github.com/99xt/serverless-dynamodb-local/issues/135

解决方法是serverless-offline-local在一项服务中启用插件(如果您有两项或多项服务)。

例如,my-service-1您将所有 dynamodb 配置保留在serverless.yaml文件中,并使用默认端口启动此服务:sls offline start --migrate true。在下一个服务中,我们称其my-service-2为从in中删除 (不需要任何其他更改),然后您可以使用以下命令启动该服务:。serverless-dynamodb-localpluginsserverless.yamlsls offline start --port 3001

第一个服务将启动 DynamoDB,第二个服务将能够使用它。