【发布时间】:2020-10-12 22:56:01
【问题描述】:
我正在开发一系列需要共享同一个 AWS API 网关的微服务。这是我的结构:
/
/assessments
/skills
/work-values
/graphql
/skills、/work-values 和 /graphql 是我尝试向同一个 AWS API 网关注册的 3 个不同的微服务。我遇到的问题是获取/skills、/work-values 路由的 serverless.yaml 文件以嵌套在“评估”下。 /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:
...
这是我用于 `/assessments' 的 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
在Share an API Endpoint Between Services 文章的末尾,作者提到“您必须从 billing-api 导入 /billing,因此新服务只需要创建 /billing/xyz 部分。” (这似乎是我所处的情况)。但是,作者没有解释如何导入/billing。或者就我而言,如何将/assessments 导入到每个评估微服务的 serverless.yaml 文件中?
【问题讨论】:
标签: microservices aws-api-gateway serverless-framework serverless-architecture