AWS CloudFormation の「パラメータの検証に失敗しました: パラメータ名「ABC」のパラメータ値「abc」は存在しません」というエラーの解決方法を教えてください。

最終更新日: 2020 年 7 月 8 日

AWS CloudFormation スタックを作成または更新すると、「パラメータの検証に失敗しました: パラメータ名「ABC」のパラメータ値「abc」は存在しません」というエラーが表示されます。 このエラーの解決方法を教えてください。

簡単な説明

AWS CloudFormation は、AWS CloudFormation テンプレートで使用されているパラメータの 1 つが AWS 固有のパラメータタイプである場合に、このエラーを返します。

このエラーは、AWS 固有のパラメータを以下のように使用すると発生することがあります。

  • スタックの作成時に AWS リージョンまたはアカウントに存在しない値を渡すために使用する。
  • リソースのプロパティとして使用し、スタックの更新中にリソースを更新する前に、この値を帯域外で削除する。
  • 子スタックのパラメータとして使用する。 このエラーは、親スタックから渡された子スタックの値がパラメータタイプと一致しないか、パラメータのリソースがそのリージョンのアカウントに存在しない場合に発生します。

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください

解決方法

スタックを作成する

1.    AWS CloudFormation コンソールを開きます。

2.    ナビゲーションペインで、[スタック] をクリックします。

3.    [スタックの名前] 列から、作成または更新に失敗したスタックを選択します。

4.    [パラメータ] タブを選択します。

5.    [キー] 列で、値 abc を持つパラメータ ABC を検索します。

6.    リソース abc が AWS 固有のパラメータタイプのタイプと一致することを確認するには、スタックの作成に使用された AWS CloudFormation テンプレートの [Parameters] (パラメータ) セクションを確認します。

7.    パラメータ ABC のリソース abc がリージョンまたはアカウントに存在することを確認するには、AWS マネジメントコンソールまたは AWS CLI コマンドを使用してリソースを記述します。リソースに適したコマンドを見つけるには、「リソースの describe コマンドを見つける」のセクションをご参照ください。

注: 例えば、AWS::EC2::VPC::Id のパラメータタイプを使用する場合、リソースの Amazon Virtual Private Cloud (Amazon VPC) コンソールを確認します。

8.    ABC が子スタックのパラメータである場合、オプション A またはオプション B を選択して値 abc を渡す必要があります。

(オプション A) 親スタックの別のリソースを参照する場合は、参照されている親スタックのリソースが、子スタックで使用されている AWS 固有のパラメータタイプと一致することを確認します。

注: 例えば、パラメータタイプ AWS::EC2::Subnet::Id (サブネット) を使用し、タイプが AWS::EC2::VPC のリソースを参照すると、スタックは失敗します。

(オプション B) パラメータ値 abc が親スタックから直接渡された場合は、パラメータ ABC のリソース abc がリージョンまたはアカウントに存在することを確認します。リソースを記述するには、AWS マネジメントコンソールまたは AWS CLI コマンドを使用します。リソースに適したコマンドを見つけるには、「リソースの describe コマンドを見つける」のセクションをご参照ください。

例えば、子スタックにある次の List<AWS::EC2::SecurityGroup::Id> パラメータについて考えてみます。

"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 固有のパラメータタイプに一致するパラメータの有効な値を持つ新しいスタックを作成します。

スタックを更新する

スタックの更新が失敗すると、AWS CloudFormation は変更をロールバックします。これは、AWS CloudFormation コンソールで更新されたパラメータ値を表示することができないことを意味します。

更新中にパラメータ ABC の値を変更していない場合、abcname または PhysicalID を持つリソースは帯域外アカウントから削除されている可能性があります。

1.    リソースが存在することを確認するには、AWS マネジメントコンソールまたは AWS CLI コマンドを使用してリソースを記述します。リソースに適したコマンドを見つけるには、「リソースの describe コマンドを見つける」のセクションをご参照ください。

2.    パラメータ ABC を更新してスタックを更新する場合は、前述の [Create a stack] (スタックを作成する) のセクションのステップ 6、7、および 8 に従います。

3.    パラメータ ABC に有効な値を渡して、スタックを更新します。

ここまでで、スタックが正常に更新されているはずです。

リソースの describe コマンドを見つける

リソースに適したコマンドを選択します。

  • AWS::EC2::Image::Id または List<AWS::EC2::Image::Id> の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
  • AWS::EC2::Instance::Id または List<AWS::EC2::Instance::Id> の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
  • AWS::EC2::KeyPair::KeyName の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
  • AWS::EC2::SecurityGroup::GroupNameAWS::EC2::SecurityGroup::IdList<AWS::EC2::SecurityGroup::GroupName>、または List<AWS::EC2::SecurityGroup::Id> の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
  • AWS::EC2::Subnet::Id または List<AWS::EC2::Subnet::Id> の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
  • AWS::EC2::VPC::Id または List<AWS::EC2::VPC::Id> の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
  • AWS::Route53::HostedZone::Id または List<AWS::Route53::HostedZone::Id> の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?