AWS Get API 网关 URL 用于云形成

AWS Get API Gateway URL for Use in Cloud Formation

我希望使用 CloudFormation 构建我的 AWS 堆栈,其中包括一个 API 网关和使用计划。我想在我的主 CloudFormation 模板中指定我的使用计划,而不是在初始堆栈创建后将它们添加为变更集。问题是当我包含使用计划时堆栈无法创建,因为(我认为)API 网关在尝试创建使用计划时未完成部署,因为我收到一条错误消息说阶段 "prod" 不存在。我的 CloudFormation 模板(提取)如下所示:

  Api:
    Properties:
      CacheClusterEnabled: true
      CacheClusterSize: '0.5'
      DefinitionUri: {MYS3URL}
      StageName: prod
    Type: AWS::Serverless::Api
  ApiFreeUsagePlan:
    DependsOn: Api
    Properties:
      ApiStages:
      - ApiId:
          Ref: Api
        Stage: prod
      Description: Free usage plan
      UsagePlanName: Free
    Type: AWS::ApiGateway::UsagePlan

我认为将 DependsOn: Api 添加到使用计划定义中会奏效,但事实并非如此,所以我没有想法?

我的 DependsOn 语句似乎应该在 ApiDeployment 上,当它尝试创建使用计划时,我可以在堆栈创建事件中看到它仍在进行中

我发现可以做到这一点的唯一方法是将使用计划的 DependsOn 属性 设置为逻辑 Api 阶段名称,即 {LogicalApiName }{StageName}以我为例的舞台:

Api:
  Properties:
    CacheClusterEnabled: true
    CacheClusterSize: '0.5'
    DefinitionUri: {MYS3URL}
    StageName: prod
  Type: AWS::Serverless::Api
ApiFreeUsagePlan:
  DependsOn: ApiprodStage

我不喜欢这个,因为它依赖于我认为 AWS CloudFromation 文档中没有正式记录的逻辑阶段命名约定,但它似乎是唯一可靠的选择