如何在CFT重部署时保持私有API Gateway ID固定不变
CloudFormation重部署API Gateway ID变更问题解决方案
API Gateway的ID是AWS自动生成的全局唯一标识,不支持用户手动指定固定值,不存在直接固定ID的方法,可通过以下几个方案解决问题:
方案1:避免CloudFormation触发API Gateway重建
API Gateway被删除重建,本质是CFT检测到资源需要执行替换操作,可通过以下配置阻止重建:
- 保持
AWS::ApiGateway::RestApi资源的逻辑ID固定,不要随意修改逻辑ID触发资源替换 - 给
AWS::ApiGateway::RestApi资源配置DeletionPolicy: Retain和UpdateReplacePolicy: Retain,即使CFT判定需要替换资源,也不会删除原有API,后续可将旧API导入CFT栈继续管理,不会生成新ID - 非必要不修改API Gateway的不可变属性(如端点配置类型、名称等),所有修改优先选择可更新无需替换的属性,从根源避免触发资源替换
方案2:绑定私有自定义域名(最推荐的运维方案)
该方案完全规避API ID变更的影响,访问地址永久固定:
- 提前申请私有自定义域名,在区域内的ACM中申请对应域名的证书
- 在API Gateway控制台创建私有自定义域名,关联对接用的VPCE,配置路径映射规则绑定到你的API和对应部署阶段
- 在VPC内部署私有托管Zone,将自定义域名的A记录解析到VPCE的端点地址
- 业务侧统一使用固定的自定义域名访问API,完全不需要感知底层API ID的变化
- 后续即使API重建,只需要更新自定义域名的路径映射规则即可,无需修改任何业务侧配置
方案3:拆分资源栈管理,复用现有API
如果必须使用原生API ID访问,可拆分资源栈避免重建根API:
- 将
AWS::ApiGateway::RestApi根资源单独放在一个长期稳定的基础资源栈中,首次部署后将生成的API ID导出为栈输出 - 业务部署栈仅管理API的集成、部署、阶段、权限等可动态更新的资源,通过
Fn::ImportValue引用基础栈输出的API ID即可 - 重部署业务栈时不会触及根API资源,自然不会生成新的API ID
注意:如果使用自定义域名方案,需要同步调整VPCE终端节点策略、API Gateway资源策略,放开对自定义域名的访问权限,避免出现权限类访问错误。
内容的提问来源于stack exchange,提问作者Chintamani
相关产品推荐
相关产品推荐

