在两个不同的 lambda 表达式中使用两个不同的嵌套“路径”时,无服务器“冲突异常”

问题描述

问题

我有两个不同的 NodeJs lambda。两者都包含自己的 serverless.yml 文件。 lambda 将构成同一服务的一部分,因此它们共享相同的基本 URL。我已经使用 serverless.yml 文件中的 restApiId 和 restApiRootResourceId 键来实现这一点。

我遇到的问题是,当我尝试部署两个 lambda 时,我部署的第二个 lambda 返回无服务器错误

[0]  
[0]   An error occurred: ApiGatewayResourceApi - Another resource with the same parent already has this name: api (Service: AmazonApiGateway; Status Code: 409; Error Code: ConflictException; Request ID: 93167f58-5890-4f45-bf02-e036b2c04727; Proxy: null).
[0]  
[0]   Get Support --------------------------------------------
[0]      Docs:          docs.serverless.com
[0]      Bugs:          github.com/serverless/serverless/issues
[0]      Issues:        forum.serverless.com

我想要如下设置:

Lambda1: https://some.base.url.from.aws/api/v1/staff/getall - 获取 拉姆达2: https://some.base.url.from.aws/api/v1/staff/insert - 发布

我的每个 lambda 的 serverless.yml 文件如下:

# serverless.yml

service: api-lambda-insert-staff

provider:
  name: aws
  runtime: nodejs14.x
  stage: dev
  region: eu-west-1
  apiGateway:
    restApiId: xxxxxxxxx
    restApiRootResourceId: xxxxxxxx

functions:
  app:
    handler: index.handler
    events:
      - http:
          path: api/v1/staff/insert
          method: POST

# serverless.yml

service: api-lambda-getall-staff

provider:
  name: aws
  runtime: nodejs14.x
  stage: dev
  region: eu-west-1
  apiGateway:
    restApiId: xxxxxxx
    restApiRootResourceId: xxxxxxxxx

functions:
  app:
    handler: index.handler
    events:
      - http:
          path: api/v1/staff/getall
          method: GET

我的尝试

我查看了无服务器文档,发现了一些与我设置类似的示例,所以不太确定出了什么问题。

我已经更改了每个 Lambda 上的函数名称“app”,使它们独一无二,但同样的问题。

现在有点松散,非常感谢任何帮助。

谢谢。

解决方法

原来我需要在 serverless.yml 中使用以下内容:

restApiResources:
      "/api": xxxx 
      "/api/v1": xxxx
      "/api/v1/staff": xxxx

您可以在 AWS 控制台的 API Gateway 中找到 xxxx。