AWS CDK Api 网关模型参考依赖 - 模型参考必须采用规范形式

AWS CDK Api Gateway Models Ref Dependency - Model reference must be in canonical form

当其中一个模型引用另一个模型时,我正在尝试使用 aws CDK 同时添加多个模型。 例如:

  "Gender": {
    "contentType": "application/json",
    "modelName": "GenderModel",
    "schema": {
      "type": "string",
      "enum": [
        "Not Specified",
        "Male",
        "Female",
        "Non-Binary"
      ],
      "schema": "http://json-schema.org/draft-04/schema#",
      "title": "GenderModel"
    }
  },

"Requirements": {
    "contentType": "application/json",
    "modelName": "RequirementsModel",
    "schema": {
      "type": "object",
      "properties": {
        "gender": {
          "ref": "https://apigateway.amazonaws.com/restapis/${Token[TOKEN.791]}/models/GenderModel"
        }
      },
      "required": [
        "gender",
      ],
      "additionalProperties": false,
      "schema": "http://json-schema.org/draft-04/schema#",
      "title": "RequirementsModel"
    }
  },

当我部署时失败

Model reference must be in canonical form

据我所知,这失败了,因为 GenderModel 不存在。如果我先在堆栈中添加 GenderModel,然后添加 RequirementsModel 并再次部署,它就可以正常工作,因为 GenderModel 是先前创建的。如果我想同时创建这两个模型,它将失败。 我试图确保 addModel 调用的顺序是正确的,但它似乎不起作用。

找到解决方案

看来您必须添加明确指定的依赖项。

modelB.node.addDependency(modelA)

这将避免错误并以正确的顺序添加模型

问题是 https://apigateway.amazonaws.com/restapis/${Token[TOKEN.791]}/models/GenderModel,特别是 ${Token[TOKEN.791]} 部分。当 API 未创建时,在 CloudFormation 合成时,id 未知并使用占位符值 - https://docs.aws.amazon.com/cdk/latest/guide/tokens.html

您可以使用Ref本征函数通过引用

组成模型
const getModelRef = (api: RestApi, model: Model): string => 
    Fn.join(
        '',
        ['https://apigateway.amazonaws.com/restapis/',
        api.restApiId,
        '/models/',
        model.modelId]);