问题描述
问题
我有两个不同的 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。