如何解決 CloudFormation 中的「參數驗證失敗:針對參數名稱 'ABC' 的參數值 'abc' 不存在」錯誤?

2 分的閱讀內容
0

當我建立或更新 AWS CloudFormation 堆疊時,出現以下錯誤: 「參數驗證失敗:針對參數名稱 'ABC' 的參數值 'abc' 不存在。」 我該如何解決此錯誤?

簡短說明

當您的 CloudFormation 範本中使用的其中一個參數AWS 特定參數類型時,AWS CloudFormation 會傳回參數驗證失敗錯誤。

當您使用 AWS 特定的參數時,會收到這個錯誤:

  • 在堆疊建立期間傳遞 AWS 區域或帳戶中不存在的值。
  • 做為資源的屬性,然後在堆疊更新期間更新資源之前,將此值從頻外刪除。
  • 作為子堆疊中的參數。當從父堆疊傳遞至子堆疊的值與參數類型不符合時,就會發生錯誤。當參數的資源不存在於該區域的帳戶中時,也會發生錯誤。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

建立堆疊

1.    開啟 AWS CloudFormation 主控台

2.    在瀏覽窗格中,選擇堆疊

3.    形成堆疊名稱欄,選擇失敗的堆疊。

4.    選擇參數標籤。

5.    在索引鍵欄中,搜尋具有 abc 值的 ABC 參數。

6.    檢查用來建立堆疊之範本的參數區段,以驗證資源 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 參數的值。如果您不變更值,則搭配 abc名稱PhysicalID 的資源可能會從帳戶中刪除至頻外。

1.    若要驗證資源是否存在,請使用 AWS 管理主控台或 AWS CLI 命令描述資源。若要為您的資源尋找正確的命令,請參閱尋找資源的描述命令一節。

2.    如果您要透過更新 ABC 參數更新堆疊,請依照上述建立堆疊區段中的步驟 6、7 和 8 執行。

3.    將有效值傳遞至 ABC 參數以更新堆疊。

針對資源尋找描述命令

針對資源選擇正確的命令:

  • 針對 AWS::EC2::Image::IdList,請使用適用於 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::IdList,或 List,請使用適用於 AWS CLI 第 1 版第 2 版的命令。
  • 針對 AWS::EC2::Subnet::IdList,請使用適用於 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 年前