microservices - 同一 AWS API 网关内的多个微服务
问题描述
我正在开发一系列需要共享同一个 AWS API 网关的微服务。这是我的结构:
/
/assessments
/skills
/work-values
/graphql
/skills
、/work-values
和/graphql
是我尝试向同一个 AWS API 网关注册的 3 个不同的微服务。我遇到的问题是获取 serverless.yaml 文件/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 端点”一文的末尾,作者提到“您必须从 billing-api 导入 /billing,因此新服务只需要创建 /billing/xyz 部分。” (这似乎是我所处的情况)。但是,作者没有解释如何导入/billing
. 或者就我而言,如何将/assessments
每个评估微服务的 serverless.yaml 文件导入?
解决方案
经过进一步研究,我发现了这个链接:
我最终按照上面文章中的内容重新设计了我的原始方法。我缺少的部分是有一个根或基本无服务器文件,该文件用于在 AWS API Gateway 中创建您的路由,并将这些占位符作为输出公开,您的后续子无服务器文件将其用作将您的子 lambda 函数连接到路由下的输入API 网关保护伞。
推荐阅读
- swift - 我如何从一个类中快速初始化一个元组属性?
- python - python 3.x循环遍历数组找到重复元素并将它们相加成一个新元素
- javascript - 如何提取部分 URL 路径并将 URL onClick 发送到查询参数
- android - 使用 Firebase AuthUI 进行 Android Firebase 电话身份验证
- javascript - 如何在 Vue.js 3 中将共享存储与多个单文件组件链接?
- performance - 循环在 ARM Cortex-A72 CPU 中执行的周期比预期的要多
- key - Paramiko VT100 发送功能键不起作用
- javascript - 将传播的道具输出存储在单个数组中
- c++ - Netbeans 没有索引新文件
- vue.js - 使用 vuetify 的无限循环