CloudFormation创建APIGateway报错:Empty的AWS::ApiGateway::Model已存在
问题原因
Amazon API Gateway 针对每个Rest API默认内置了application/json类型的Empty模型,你在模板中显式定义同名同类型的AWS::ApiGateway::Model资源,会和系统内置资源产生命名冲突,因此触发该报错。
你通过Former2反向导出模板时,工具会将API下所有可见的模型(包含系统内置的默认模型)全部导出为显式定义的资源,这是导致错误的直接诱因。
解决方案
方案1:直接使用内置Empty模型(推荐)
直接删除模板中你自定义的EmptyModel资源定义即可,API Gateway已内置该模型,你可以在所有AWS::ApiGateway::Method资源中直接引用字符串Empty,无需通过!Ref调用自定义资源:
# 原Method中的引用写法(错误,依赖自定义的EmptyModel) Models: application/json: !Ref EmptyModel # 修改后的引用写法(正确,直接调用内置模型) Models: application/json: Empty
方案2:重命名自定义模型
如果你有特殊需求必须显式定义空模型,将模型的Name参数修改为和内置模型不冲突的名称即可:
EmptyModel: Type: "AWS::ApiGateway::Model" Properties: RestApiId: !Ref ApiGatewayRestApi Name: "CustomEmpty" # 修改为非Empty的自定义名称 Description: "This is a default empty schema model" Schema: | { "$schema": "http://json-schema.org/draft-04/schema#", "title" : "Empty Schema", "type" : "object" } ContentType: "application/json"
后续在Method中引用时仍可通过!Ref EmptyModel调用该自定义资源。
内容的提问来源于stack exchange,提问作者Charlene
相关产品推荐
相关产品推荐

