6

我正在尝试以编程方式设置阶段作为我的 AWS API Gateway 部署的一部分。我正在使用 SAM CLI。cloudformation 文档给出了定义:

DeploymentId 阶段指向的部署的 ID。

要求:是

类型:字符串

更新要求:无中断

和代码示例:

Resources:
  Prod:
    Type: AWS::ApiGateway::Stage
    Properties:
      StageName: Prod
      Description: Prod Stage
      RestApiId: !Ref MyRestApi
      DeploymentId: !Ref TestDeployment ##      <===== this
      DocumentationVersion: !Ref MyDocumentationVersion
      ClientCertificateId: !Ref ClientCertificate
      Variables:
        Stack: Prod
      MethodSettings:
        - ResourcePath: /
          HttpMethod: GET
          MetricsEnabled: 'true'
          DataTraceEnabled: 'true'
        - ResourcePath: /stack
          HttpMethod: POST
          MetricsEnabled: 'true'
          DataTraceEnabled: 'true'
          ThrottlingBurstLimit: '999'
        - ResourcePath: /stack
          HttpMethod: GET
          MetricsEnabled: 'true'
          DataTraceEnabled: 'true'
          ThrottlingBurstLimit: '555'

TestDeployment..但没有关于价值指向什么的上下文。

  • 它是用户选择的随机字符串吗?
  • 它是在某处可用的生成 ID 吗?
  • 它是资源的名称还是 API 的名称?等等

我一直在谷歌搜索,但似乎仍然无法得到答案。

在 AWS 管理控制台中,我可以看到一些我们已经存在的 API——当阶段已经存在(手动设置)时,您可以通过阶段获取部署 ID,但如果我必须先手动设置它们,这会部分破坏 CloudFormation 的目的,AWS::ApiGateway::Stage不是吗(...理想情况下,我们希望能够完全通过代码创建 API,而无需进入 AWS 接口)?部署后不是deploymentId唯一可用的吗?如果它之前可用(作为构建的一部分),我如何获取它并将其放入我cloudformation.yaml的部署之前?

感谢您对理解这一点的任何帮助!

4

1 回答 1

7

部署包含有关 API 网关部署的元数据,例如描述,也可用于部署金丝雀版本。您可以创建部署资源作为 CloudFormation 模板的一部分。

Deployment: 
  Type: AWS::ApiGateway::Deployment
  Properties: 
    RestApiId: 
      Ref: "MyApi"
    Description: "My deployment"
    StageName: "DummyStage"

当您!Ref使用它时,它将返回DeploymentId. 请务必阅读名为AWS::ApiGateway::Method Dependency的文档部分,以了解如何将 API 方法附加到部署。

于 2019-03-18T23:51:13.183 回答