AWS Облачная информация - невозможно сослаться на ресурс в Swagger из вложенного стека - PullRequest
1 голос
/ 21 апреля 2020

У меня проблемы с aws Cloudformation. Я пытаюсь включить вложенные стеки, так как исчерпал лимит в 200 ресурсов. Это то, что у меня есть в качестве примера

Стек A - родительский стек с ресурсом API

RestAPI:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Sub ${Stage}
      DefinitionBody:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
            Location:
              - Fn::Join:
                - ''
                - - 's3://'
                  - Ref: S3BucketName
                  - '/swagger.yaml'

GetLogs:
    Type: AWS::Serverless::Function
    Properties:
      Handler: Logs_Lambda/index.getHandler
      Role: !GetAtt RDSLambdaExecutionRole.Arn
      Events:
        GetUsers:
          Type: Api
          Properties:
            Path: management/logs
            Method: get
            RestApiId: !Ref RestAPI 

Стек B - дочерний стек Stack A

LambdaSaveLogsInvokePermission:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName: !Ref SaveLogs
    Action: 'lambda:InvokeFunction'
    Principal: apigateway.amazonaws.com

SaveLogs:
  Type: AWS::Serverless::Function
  Properties:
    FunctionName: SaveLogs
    CodeUri:
      Bucket: !Ref BuildBucketName
      Key: !Ref BuildObjectKey
    Handler: logs_Lambda/index.saveHandler
    Role: !Ref RDSLambdaExecutionRoleArn
    Events:
      SaveLogs:
        Type: Api
        Properties:
          Path: management/logs/save
          Method: post
          RestApiId: !Ref RestAPI

Мои файлы подкачки имеют следующие ссылки

x-amazon-apigateway-integration:
        uri: 
            Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${SaveLogs.Arn}/invocations"

x-amazon-apigateway-integration:
        uri: 
            Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetLogs.Arn}/invocations"

Обратите внимание, что стек B ссылается на ресурс RestAPI, который передается как параметр из стека A

Мои проблемы и что я пытался

  • Создание набора изменений завершается неудачно, когда выполняется конвейер кода, говоря, что не может найти какую-либо ссылку на SaveLogs.Arn. Я считаю, что стек A встраивает код в RestAPI и, следовательно, он не может найти ссылку на ресурс дочернего стека
  • . Поэтому я сделал вывод из стека B для SaveLogs Arn и обновил файл swagger до обратитесь к выводу. Затем он выдал ошибку на наборе изменений, которая гласила: «Круговая зависимость между ресурсами» (что тоже звучит правильно) .

Вопросы

  • Мой вопрос: как нам преодолеть это?

  • Есть ли способ как-то использовать разные сваг-файлы для каждого стека?

  • Есть ли другой способ написания вложенного стека для API
    с точки зрения масштабируемости?

Кто-нибудь сможет прокомментировать или помочь с этим?

Заранее спасибо

...