我正在尝试以编程方式设置阶段,作为我的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
指向什么。
我一直在谷歌搜索,但似乎仍然找不到答案。
在AWS管理控制台中,我可以看到一些我们已经存在的API-当阶段已经存在(手动设置)时,您可以通过这些阶段获取部署ID,但是如果我必须先手动设置它们,那会部分地破坏CloudFormation的AWS::ApiGateway::Stage
的目的(…理想情况下,我们希望能够完全创建API的 通过代码,而无需进入AWS界面)?并且deploymentId
是否仅在部署后可用?如果它是先前可用的(作为构建的一部分),如何在部署之前获取它并将其放入我的cloudformation.yaml
中?
感谢您对任何理解的帮助!
答案 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方法附加到部署中。