我正在开发一系列的微服务,它们需要共享相同的API网关。这是我的结构:
/
/assessments
/skills
/work-values
/graphql
/skills
、/work-values
和/graphql
是我尝试向同一个API网关注册的3种不同的微服务。我遇到的问题是如何获取/skills
的/skills
文件,/work-values
路由在“评估”下嵌套。/assessments
本身没有任何功能。它的存在只是为了让我们能够在相同的URL路径结构下组织所有的评估。
这里是我的‘/work-values’的serverless.yaml文件:
service:
name: assessments-workvalues
...
custom:
stage: ${opt:stage, self:provider.stage}
provider:
...
apiGateway:
restApiId:
# THE FOLLOWING REFERENCES A VARIABLE FROM MY API GATEWAY ROOT
'Fn::ImportValue': ${self:custom.stage}-ApiGatewayRestApiId
restApiRootResourceId:
'Fn::ImportValue': # HOW DO I GET THE PROPER VALUE HERE TO MAP TO `/assessments`?
...
functions:
...
,这是我的serverless.yaml文件,用于‘/评估’:
service:
name: assessments
custom:
stage: ${opt:stage, self:provider.stage}
provider:
...
apiGateway:
restApiId:
# THE FOLLOWING REFERENCES A VARIABLE FROM MY API GATEWAY ROOT
'Fn::ImportValue': ${self:custom.stage}-ApiGatewayRestApiId
restApiRootResourceId:
'Fn::ImportValue': ${self:custom.stage}-ApiGatewayRestApiRootResourceId
functions:
...
resources:
Outputs:
ApiGatewayRestApiId:
Value:
Ref: ApiGatewayRestApi
Export:
Name: ${self:custom.stage}-Assessments-ApiGatewayRestApiId
ApiGatewayRestApiRootResourceId:
Value:
Fn::GetAtt:
- ApiGatewayRestApi
- RootResourceId
Export:
Name: ${self:custom.stage}-Assessments-ApiGatewayRestApiRootResourceId
问题似乎是为评估路由编写serverless.yaml文件中的输出。当我运行无服务器部署时,会收到以下错误消息:
Error: The CloudFormation template is invalid: Unresolved resource dependencies [ApiGatewayRestApi] in the Outputs block of the template
在在服务之间共享API端点文章的末尾,作者提到“您必须从计费-api导入/billing,所以新服务只需要创建/ /billing/xyz部分”。(这似乎是我所处的情况)。但是,作者没有解释如何导入/billing
。或者在我的例子中,如何将/assessments
导入到每个评估微服务的serverless.yaml文件中?
发布于 2020-06-23 09:23:26
经过进一步的研究,我发现了这样的联系:
最后,我按照上面文章中的内容重新设计了我最初的方法。我遗漏的部分是有一个根或基无服务器文件,该文件用于在API网关中创建路由,并将这些占位符作为输出公开,随后的无服务器子文件将这些占位符作为输入,用于将您的子lambda函数连接到API Gateway伞下的路由。
https://stackoverflow.com/questions/62525285
复制