AWS :: ApiGateway :: Stage需要DeploymentId ...但在哪里可以找到?

时间:2019-03-18 21:31:57

标签: amazon-web-services amazon-cloudformation aws-sam aws-sam-cli

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

  

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中?

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

1 个答案:

答案 0 :(得分:3)

部署包含有关API网关部署的元数据(例如描述),也可以用于部署canary release。您可以创建Deployment resource作为CloudFormation模板的一部分。

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

!Ref会返回DeploymentId。确保阅读文档的 AWS :: ApiGateway :: Method Dependency 部分,以了解如何将API方法附加到部署中。