首页 > 解决方案 > 在两个不同的 lambda 中使用两个不同的嵌套“路径”时的无服务器“冲突异常”

问题描述

问题

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

我遇到的问题是,当我尝试部署两个 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 - 获取 Lambda2: https ://some.base.url.from.aws/api/v1/staff/insert - POST

我的每个 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”以使它们独一无二,但同样的问题。

现在处于松散状态,非常感谢任何帮助。

谢谢。

标签: aws-lambdaserverlessaws-serverless

解决方案


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

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

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


推荐阅读