Развертывание нескольких сервисов с использованием сервера без Apigateway с общим путем - PullRequest
0 голосов
/ 14 февраля 2019

В документации указаны общие пути :

service: service-b
provider:
  apiGateway:
    restApiId: xxxxxxxxxx
    restApiRootResourceId: xxxxxxxxxx
    restApiResources:
      /reports: xxxxxxxxxx

functions:
  ...

Однако как я могу сослаться на идентификатор ресурса (то есть путь)?В первом сервисе у меня есть:

  Outputs:
    apiGatewayRestApiId:
      Value:
        Ref: ApiGatewayRestApi
      Export:
        Name: ${self:service}-${opt:stage, 'dev'}-apiGateway-restApiId
    apiGatewayRestApiRootResourceId:
      Value:
         Fn::GetAtt:
          - ApiGatewayRestApi
          - RootResourceId
      Export:
        Name: ${self:service}-${opt:stage, 'dev'}-apiGateway-rootResourceId
    apiGatewayResourceReports:
      Value: !Ref ApiGatewayResource/reports
      Export:
        Name: ${self:service}-${opt:stage, 'dev'}-apiGateway-reportPath

Первые два работают, и на 2-м сервисе можно сослаться на FN::ImportValue.Однако третий не работает.Я предполагаю, что проблема заключается в том, что я должен явно создать ресурс ApiGatewayResource/reports, а не создавать его как побочный эффект определений функций в первом сервисе.Но как мне это сделать?И не будет ли это противоречить определениям функций?

1 Ответ

0 голосов
/ 14 февраля 2019

После некоторого колебания я натолкнулся на следующее: первая служба должна определить путь к ресурсу, но оставить оставшуюся часть определения шлюза неявной.И он должен вывести соответствующие идентификаторы:

provider:
  apiGateway:
    restApiResources:
      /reports: !Ref ReportPath

...
resources:
  Resources:
    ReportPath:
      Type: AWS::ApiGateway::Resource
      Properties:
        RestApiId: !Ref ApiGatewayRestApi
        ParentId:
          Fn::GetAtt: [ ApiGatewayRestApi, RootResourceId ]
        PathPart: 'reports'

  Outputs:
    apiGatewayRestApiId:
      Value:
        Ref: ApiGatewayRestApi
      Export:
        Name: ${self:service}-${opt:stage, 'dev'}-apiGateway-restApiId
    apiGatewayRestApiRootResourceId:
      Value:
         Fn::GetAtt:
          - ApiGatewayRestApi
          - RootResourceId
      Export:
        Name: ${self:service}-${opt:stage, 'dev'}-apiGateway-rootResourceId
    apiGatewayResourceReports:
      Value: !Ref ReportPath
      Export:
        Name: ${self:service}-${opt:stage, 'dev'}-apiGateway-reportPath

2-й сервис может ссылаться на все три идентификатора:

provider:
  apiGateway:
    restApiId:
      'Fn::ImportValue': crane-mg-reports-${opt:stage, 'dev'}-apiGateway-restApiId
    restApiRootResourceId:
      'Fn::ImportValue': crane-mg-reports-${opt:stage, 'dev'}-apiGateway-rootResourceId
    restApiResources:
      /reports:
        'Fn::ImportValue': crane-mg-reports-${opt:stage, 'dev'}-apiGateway-reportPath

В обоих случаях определение функции может определять пути с использованием префикса / reports безконфликт.

...