AWS Cloudformation-无法从嵌套堆栈引用Swagger中的资源

时间:2020-04-21 01:07:07

标签: swagger amazon-cloudformation

我在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-堆栈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

我的swagger文件具有这些引用

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文件以引用输出。然后,它在变更集上给出了一个错误,指出“资源之间的循环依赖关系”(听起来也很正确)
  • 然后我做了并导出SaveLogs Arn资源,然后 在创建变更集之后成功,但在部署变更集失败。

问题

  • 我的问题是我们如何克服这个问题?

  • 是否可以为每个堆栈使用不同的swagger文件 不知何故?

  • 是否有另一种方法来编写用于API的嵌套堆栈
    在考虑可扩展性?

任何人都可以对此发表评论或提供帮助吗?

提前谢谢

0 个答案:

没有答案