AWS CloudFormation スタックを作成または更新すると、「Parameter validation failed: parameter value 'abc' for parameter name 'ABC' does not exist」(パラメータの検証に失敗しました: パラメータ名「ABC」のパラメータ値「abc」が存在しません) というエラーが表示されます。 このエラーの解決方法を教えてください。
簡単な説明
AWS CloudFormation は、CloudFormation テンプレートで使用されているパラメータの 1 つが AWS 固有のパラメータタイプである場合に、「parameter validation failed」(パラメータの検証に失敗しました) エラーを返します。
このエラーは、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 コマンドを使用します。リソースに適したコマンドを見つけるには、「リソースの describe コマンドを見つける」のセクションを参照してください。
注: 例えば、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 コマンドを使用します。リソースに適したコマンドを見つけるには、「リソースの describe コマンドを見つける」のセクションを参照してください。
例えば、子スタックの次の 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 コマンドを使用してリソースを記述します。リソースに適したコマンドを見つけるには、「リソースの describe コマンドを見つける」のセクションを参照してください。
2. ABC パラメータを更新してスタックを更新する場合は、前述の「スタックを作成する」セクションのステップ 6、7、および 8 に従います。
3. ABC パラメータに有効な値を渡して、スタックを更新します。
リソースの describe コマンドを見つける
次のように、リソースに適したコマンドを選択します。
- AWS::EC2::Image::Id または List の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::EC2::Instance::Id または List の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::EC2::KeyPair::KeyName の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS:: EC2:: SecurityGroup::GroupName、AWS::EC2::SecurityGroup::Id、List 、または List の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::EC2::Subnet::Id または List の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::EC2::VPC::Id または List の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::Route53::HostedZone::Id または List の場合、AWS CLI のバージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::EC2::AvailabilityZone::Name または List の場合は、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。
- AWS::EC2::Volume::Id または List の場合、AWS CLI バージョン 1 またはバージョン 2 のコマンドを使用します。