【问题标题】:Multiple microservices inside same AWS API Gateway同一 AWS API 网关内的多个微服务
【发布时间】: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


    【解决方案1】:

    经过进一步研究,我找到了这个链接:

    Splitting Your Serverless Framework API on AWS

    我最终按照上面文章中的内容重新设计了我的原始方法。我缺少的部分是有一个根或基本无服务器文件,该文件用于在 AWS API Gateway 中创建您的路由,并将这些占位符作为输出公开,您的后续子无服务器文件将其用作将您的子 lambda 函数连接到路由下的输入API 网关保护伞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 2019-04-06
      • 2020-07-24
      • 1970-01-01
      • 2018-01-25
      • 2019-10-27
      • 2016-01-14
      • 2017-05-12
      相关资源
      最近更新 更多