如何解决 CloudFormation 中的错误“参数验证失败:参数名称 'ABC' 的参数值 'abc' 不存在”?

2 分钟阅读
0

当我创建或更新 AWS CloudFormation 堆栈时,我收到以下错误消息:“参数验证失败:参数名称‘ABC’的参数值‘abc’不存在”。 如何解决此错误?

简短描述

当 CloudFormation 模板中使用的参数之一是 AWS 特定的参数类型时,AWS CloudFormation 会返回参数验证失败错误。

当您将 AWS 特定的参数用于以下目的时,可能会收到此错误:

  • 传递在堆栈创建期间 AWS 区域或账户中不存在的值。
  • 作为资源属性,然后在堆栈更新过程中,更新资源之前删除此带外值。
  • 作为子堆栈中的参数。当从父堆栈传递的子堆栈的值与参数类型不匹配时,就会出现错误。当该区域的账户中不存在参数的资源时,也会发生该错误。

解决方法

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

创建堆栈

1.    打开 AWS CloudFormation 控制台

2.    在导航窗格中,选择堆栈

3.    从 Stack name(堆栈名称)列中,选择失败的堆栈。

4.    选择参数选项卡。

5.    在 Key(键)列中,搜索带有 abc 值的 ABC 参数。

6.    查看用于创建堆栈的模板的 Parameters(参数)部分,以验证资源 abc 是否与 AWS 特定的参数类型匹配。

7.    验证区域或账户中是否存在 ABC 参数的 abc 资源。使用 AWS 管理控制台或 AWS CLI 命令来描述资源。要查找适用于您的资源的正确命令,请参阅查找资源的描述命令部分。

**注意:**例如,如果使用参数类型 AWS::EC2::VPC::Id,则查看适用于资源的 Amazon Virtual Private Cloud(Amazon VPC)控制台。

8.    如果 ABC 是子堆栈的参数,则必须传递 abc 值。选择选项 A 或选项 B。

**(选项 A)**如果您引用父堆栈中的其他资源,则验证此资源与子堆栈中使用的 AWS 特定的参数类型匹配。

**注意:**例如,如果使用参数类型 AWS::EC2::Subnet::Id 并引用资源类型 AWS::EC2::VPC,则堆栈失败。

·(选项 B)如果 abc 值直接从父堆栈传递,则验证区域或账户中是否存在 ABC 参数的 abc 资源。使用 AWS 管理控制台或 AWS CLI 命令来描述资源。要查找适用于您的资源的正确命令,请参阅查找资源的描述命令部分。

例如,考虑子堆栈中的以下 List 参数:

"SecurityGroups": {
    "Description": "List of security group IDs for the instances",
    "Type": "List<AWS::EC2::SecurityGroup::Id>"
}

参数的值从父堆栈传递。例如:

"ChildStack" : {
 "Type" : "AWS::CloudFormation::Stack",
 "Properties" : {
    "Parameters":{
      "KeyPair" : { "Ref": "KeyPair" },
      "ImageID" : { "Ref": "ImageID" },
      "InstanceType" : { "Ref": "InstanceType" },
      "SecurityGroups" : { "Ref": "SecurityGroup" }
    }

**重要提示:**在前面的示例中,验证该区域或账户中存在传递到 SecurityGroup 参数的安全组 ID 的值。

9.    使用区域或账户中存在且与 AWS 特定的参数类型匹配的有效参数值创建新堆栈

更新堆栈

当堆栈更新失败时,CloudFormation 会回滚这些更改。这意味着您无法看到通过 AWS CloudFormation 控制台更新的参数值。

在更新期间,必须更改 ABC 参数的值。如果您不更改该值,则名称PhysicalIDabc 的资源可能会从带外账户中删除。

1.    要验证资源是否存在,请使用 AWS 管理控制台或 AWS CLI 命令来描述资源。要查找适用于您的资源的正确命令,请参阅查找资源的描述命令部分。

2.    如果您通过更新 ABC 参数来更新堆栈,则按照上文创建堆栈部分中的步骤 6、7 和 8 执行操作。

3.    向 ABC 参数传递有效值以更新堆栈。

查找资源的描述命令

为您的资源选择正确的命令:

  • 对于 AWS::EC2::Image::Id or List ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::Instance::IdList ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::KeyPair::KeyName,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::SecurityGroup::GroupNameAWS::EC2::SecurityGroup::IdListList ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::Subnet::Id or List ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::VPC::IdList ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::Route53::HostedZone::IdList ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::AvailabilityZone::NameList ,请使用适用于 AWS CLI 版本 1版本 2 的命令。
  • 对于 AWS::EC2::Volume::IdList ,请使用适用于 AWS CLI 版本 1版本 2 的命令。

AWS 官方
AWS 官方已更新 2 年前