如何解决 CloudFormation 中的“Model Validation Failed(模型验证失败)”错误?

上次更新日期:2022 年 4 月 6 日

使用 AWS CloudFormation 创建资源时,我在堆栈事件中收到了“Model Validation Failed(模型验证失败)”错误。

简短描述

类型值、允许值、最小值、最大值和模式值是使用 CloudFormation 模板创建资源属性的接受条件。如果某个属性值未正确定义,则会收到以下“Model Validation Failed(模型验证失败)”错误之一:

  • Model Validation Failed (#PropertyName: Failed validation constraint for keyword [type]) [模型验证失败(#PropertyName: 关键词 [类型] 的验证约束失败)]
  • Model Validation Failed (#PropertyName: Failed validation constraint for keyword [pattern]) [模型验证失败(#PropertyName: 关键词 [模式] 的验证约束失败)]
  • Model validation failed (#PropertyName: expected type: Number, found: String) [模型验证失败(#PropertyName: 预期类型: 数字, 查找: 字符串)]

注意:前面的错误消息是示例。在您收到的错误中,指定了 PropertyName(属性名称)。

解决方法

  1. 在 CloudFormation 堆栈事件中,确定失败的资源类型的属性。例如,Namespace(命名空间)是资源 AWS::CloudWatch::Alarm 的一个属性。
  2. 确定出现错误的资源类型。例如,AWS::CloudWatch::Alarm
  3. 查找资源的属性
  4. 将模板中定义的属性值与在第 3 步中找到的正确属性值进行比较。
    注意:某些属性不包含最小或最大字符数限制值。
  5. 如果资源的属性值不符合接受条件,请编辑模板,输入需要的值。
  6. 使用新模板更新 CloudFormation 堆栈。

以下是资源类型 AWS::CloudWatch:AlarmNamespace(命名空间)属性的接受条件示例:

Required: No

Type: String

Minimum: 1

Maximum: 255

Pattern: [^:].*

Update requires: No interruption

注意:要使 Namespace(命名空间)标准被接受,类型必须为 String(字符串),字符限制必须介于 1255 之间,并且模式必须为 [^:].*


这篇文章对您有帮助吗?


您是否需要账单或技术支持?