Wie behebe ich Vorlagenvalidierungs- oder Vorlagenformatfehler in CloudFormation?
Ich erhalte eine Fehlermeldung, wenn ich versuche, meinen AWS-CloudFormation-Stack zu erstellen.
Kurzbeschreibung
Wählen Sie basierend auf der angezeigten Fehlermeldung eine der folgenden Lösungen aus:
- Informationen zu den Fehlern „JSON nicht ordnungsgemäß formatiert“ oder „YAML nicht ordnungsgemäß formatiert“ finden Sie im Abschnitt Vorlagensyntax validieren.
- Informationen zu den Fehlern „Ungelöste Ressourcenabhängigkeiten [XXXXXXXX] im Ressourcenblock der Vorlage“ finden Sie im Abschnitt Logische IDs und Parameter validieren.
- Informationen zu den Fehlern „Unbekannter Parametertyp: XXXXXXXX“ oder „Ungültige Vorlagenparametereigenschaft „XXXXXXXX“ finden Sie im Abschnitt Parameterdefinitionen validieren.
- Informationen zu den Fehlern „Jedes Bedingungsmitglied muss als eine Zeichenfolge angegeben werden“ finden Sie im Abschnitt Bestätigen, dass Bedingungen als Zeichenfolge angegeben sind.
- Informationen zu den Fehlern „Unbekannte Ressourcentypen: [XXXXXXXX]“ finden Sie im Abschnitt Überprüfen der Verfügbarkeit Ihres Ressourcentyps.
- Informationen zu den Fehlern „Die [Umgebungsressource] „XXXXXXXX“ existiert nicht“ finden Sie im Abschnitt Überprüfen, ob Ihre Ressource außerhalb des Stack vorhanden ist, oder überprüfen von Abhängigkeiten für Ressourcen im selben Stack.
- Informationen zu den Fehlern „Ungültige Vorlageneigenschaft oder -eigenschaften [XXXXXXXX]“ finden Sie im Abschnitt Vorlageneigenschaften überprüfen.
Auflösung
Hinweis: Wenn Sie beim Ausführen von AWS-Command-Line-Interface(AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.
Vorlagensyntax überprüfen
Beachten Sie Folgendes, um die richtige JSON- oder YAML-Syntax in Ihrer CloudFormation-Vorlage zu befolgen:
- Erstellen Sie Ihren Stack mit AWS CloudFormation Designer.
- Validieren Sie Ihre JSON-Syntax mit einem Texteditor oder einem Befehlszeilen-Tool wie dem AWS-CLI-Vorlagen-Validator.
- Validieren Sie Ihre YAML-Syntax mit dem Befehl aws cloudformation validate-template.
- Validieren Sie Ihre JSON- oder YAML-Vorlagen mit dem AWS-CloudFormation-Linter auf der GitHub-Website.
Validieren logischer IDs und Parameter
Bestätigen Sie, dass in Ihrer Vorlage logische IDs und Parameter definiert sind.
In den folgenden JSON- und YAML-Vorlagen beispielsweise wird Test für die ImageId-Eigenschaft referenziert. Keine der Vorlagen enthält jedoch eine logische Ressourcen-ID oder einen Parameter namens test. Diese Vorlagen geben den folgenden Fehler zurück: „Nicht aufgelöste Ressourcenabhängigkeiten [Test] im Ressourcenblock der Vorlage.“ Weitere Informationen zu Ressourcendefinitionen und ihrer Syntax finden Sie unter Ressourcen.
Beispiel-JSON (falsch):
{ "Resources" : { "EC2Instance01" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : {"Ref": "test"} } } } }
Beispiel-YAML (falsch):
Resources: EC2Instance01: Type: AWS::EC2::Instance Properties: ImageId: !Ref test
Um dieses Problem zu beheben, fügen Sie eine logische Ressourcen-ID mit dem Namen test hinzu. Oder erstellen Sie einen Parameter mit dem Namen test, wobei die Referenz den imageId-Wert zurückgibt. Die folgenden JSON- und YAML-Beispielvorlagen enthalten einen Parameter mit dem Namen test und imageId als Wert.
Beispiel-JSON (richtig):
{ "Parameters": { "test": { "Type": "String", "Default": "ami-xxx" } }, "Resources" : { "EC2Instance01" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : {"Ref": "test"} } } } }
Beispiel-YAML (richtig):
Parameters: test: Type: String Default: ami-xxx Resources: EC2Instance01: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref test
Validieren von Parameterdefinitionen
1. Stellen Sie Typ auf eine der folgenden unterstützten Eigenschaften ein:
- Zeichenfolge, Zahl, List oder CommaDelimitedList
- AWS-spezifische Parametertypen
- SSM-Parametertypen
2. Vergewissern Sie sich in Ihrer CloudFormation-Vorlage, dass die Parameter nur die folgenden zulässigen Eigenschaften enthalten:
"Parameters" : { "ParameterName" : { "AllowedPattern" : "A regular expression that represents the patterns to allow for String types.", "AllowedValues" : "An array containing the list of values allowed for the parameter", "ConstraintDescription" : "A string that explains a constraint when the constraint is violated" "Default" : "A value of the appropriate type for the template to use if no value is specified when a stack is created. If you define constraints for the parameter, you must specify a value that adheres to those constraints", "Description" : "A string of up to 4000 characters that describes the parameter", "MaxLength" : "An integer value that determines the largest number of characters you want to allow for String types", "MaxValue" : "A numeric value that determines the largest numeric value you want to allow for Number types.", "MinLength" : "An integer value that determines the smallest number of characters you want to allow for String types.", "MinValue" : "A numeric value that determines the smallest numeric value you want to allow for Number types.", "NoEcho" : "Whether to mask the parameter value when a call is made that describes the stack. If you set the value to true, the parameter value is masked with asterisks (*****).", "Type" : "The data type for the parameter (DataType)." },
3. Vergewissern Sie sich in Ihrer CloudFormation-Vorlage, dass der Abschnitt Parameter keine intrinsischen Funktionen enthält.
In den folgenden JSON- und YAML-Beispielvorlagen hat der Standardwert für ParameterC die intrinsische Funktion Fn::Sub. Diese intrinsische Funktion verursacht den Validierungsfehler: „Jedes Standardelement muss eine Zeichenfolge sein.“
Beispiel-JSON (falsch):
{ "Parameters": { "ParameterA": { "Type": "String", "Default": "abc" }, "ParameterB": { "Type": "String", "Default": "def" }, "ParameterC": { "Type": "String", "Default": { "Fn::Sub": "${ParameterA}-${ParameterB}" } } }, "Resources": { "MyS3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": { "Ref": "ParameterC" } } } } }
Beispiel-YAML (falsch):
Parameters: ParameterA: Type: String Default: abc ParameterB: Type: String Default: def ParameterC: Type: String Default: !Sub '${ParameterA}-${ParameterB}' Resources: MyS3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: !Ref ParameterC
Bestätigen Sie, dass Bedingungen als Zeichenfolge angegeben sind
Geben Sie in Ihrer CloudFormation-Vorlage Bedingungen als Zeichenfolge an.
In den folgenden JSON- und YAML-Beispielvorlagen wird die Bedingung in der Ressource EC2RouteA als Liste von Zeichenfolgen anstelle einer einzelnen Zeichenfolge angegeben. Diese Vorlagen führen zu dem folgenden Validierungsfehler: „Jedes Bedingungsmitglied muss als eine Zeichenfolge angegeben werden.“
Beispiel-JSON (falsch):
{ "Conditions": { "ConditionA": { "Fn::Not": [ { "Fn::Equals": [ "", "Sample" ] } ] }, "ConditionB": { "Fn::Not": [ { "Fn::Equals": [ "", "Sample" ] } ] } }, "Resources": { "EC2RouteA": { "Type": "AWS::EC2::Route", "Condition": [ "ConditionA", "ConditionB" ], "Properties": { ... } } } }
Beispiel-YAML (falsch):
Conditions: ConditionA: !Not - !Equals - '' - Sample ConditionB: !Not - !Equals - '' - Sample Resources: EC2RouteA: Type: 'AWS::EC2::Route' Condition: - ConditionA - ConditionB Properties:
Um diesen Fehler zu beheben, fügen Sie dem Abschnitt Bedingungen Ihrer Vorlage ConditionAandB hinzu und verwenden Sie dann ConditionAandB als Bedingung für die EC2RouteA-Ressource. Sehen Sie sich die folgenden JSON- und YAML-Beispielvorlagen an.
Beispiel-JSON (richtig):
{ "Conditions": { "ConditionA": { "Fn::Not": [ { "Fn::Equals": [ "", "Sample" ] } ] }, "ConditionB": { "Fn::Not": [ { "Fn::Equals": [ "", "Sample" ] } ] }, "ConditionAandB": { "Fn::And": [ { "Condition": "ConditionA" }, { "Condition": "ConditionB" } ] } }, "Resources": { "EC2RouteA": { "Type": "AWS::EC2::Route", "Condition": "ConditionAandB", "Properties": { ... } } } }
Beispiel-YAML (richtig):
Conditions: ConditionA: Fn::Not: - Fn::Equals: - '' - Sample ConditionB: Fn::Not: - Fn::Equals: - '' - Sample ConditionAandB: Fn::And: - Condition: ConditionA - Condition: ConditionB Resources: EC2RouteA: Type: AWS::EC2::Route Condition: ConditionAandB Properties:
Überprüfen Sie die Verfügbarkeit Ihres Ressourcentyps
1. Stellen Sie sicher, dass Ihre Ressource in Ihrer AWS-Region verfügbar ist.
Nicht alle Ressourcentypen sind in jeder AWS-Region verfügbar. Vorlagen, die Ressourcentypen enthalten, die in Ihrer AWS-Region nicht verfügbar sind, führen zu folgendem Fehler: „Nicht erkannte Ressourcentypen: [XXXXXXXX]“.
2. Wenn Ihre Vorlage aus Serverless-Ressourcen besteht, schließen Sie eine Transformations-Deklaration ein. Sehen Sie sich die folgenden JSON- und YAML-Beispielvorlagen an.
Beispiel-JSON:
{ "Transform": "AWS::Serverless-2016-10-31", #Please make sure to include this. "Resources": { "MyServerlessFunctionLogicalID": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs8.10", "CodeUri": "s3://testBucket/mySourceCode.zip" } } } }
Beispiel-YAML:
Transform: AWS::Serverless-2016-10-31 #Please make sure to include this. Resources: MyServerlessFunctionLogicalID: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs8.10 CodeUri: 's3://testBucket/mySourceCode.zip'
Überprüfen Sie, ob Ihre Ressource außerhalb des Stack vorhanden ist, oder überprüfen Sie Abhängigkeiten für Ressourcen im selben Stack
Wenn Sie eine Ressource oder einen Amazon-Ressourcennamen (ARN) in eine der Ressourcen Ihres Stacks, die außerhalb des CloudFormation-Stacks vorhanden ist, hartcodieren, überprüfen Sie Folgendes:
- Der Ressourcenname oder ARN ist korrekt.
- Die Ressource ist vorhanden.
- Die Ressource befindet sich in derselben AWS-Region wie der Stack. Bedenken Sie, dass einige Ressourcen Eigenschaften in AWS-Regionen oder -Konten akzeptieren.
Beispielsweise schlägt eine AWS::EC2::Instance-Ressource in Ihrem Stack, die eine Sicherheitsgruppe (sg-1234567890) angibt, fehl, wenn:
- Die Sicherheitsgruppe nicht existiert.
- Die Sicherheitsgruppe in der AWS-Region des Stacks nicht vorhanden ist.
Sie erhalten daraufhin die Fehlermeldung „sg-1234567890 existiert nicht“. Siehe folgendes Beispiel:
LinuxInstance: Type: AWS::EC2::Instance Properties: SubnetId: !Ref ServerSubnetID KeyName: !Ref EC2KeyPairName SecurityGroupIds: sg-1234567890 #<This resource must exist and be in the same AWS Region as the stack.>
Vorlageneigenschaften überprüfen
Verwenden Sie in Ihrer CloudFormation-Vorlage nur zulässige Vorlageneigenschaften.
In den folgenden JSON- und YAML-Beispielvorlagen befindet sich die Bucket-Ressource auf derselben Ebene wie der Abschnitt Ressourcen. Dies gibt den folgenden Fehler zurück: „Vorlagenvalidierungsfehler: Ungültige Vorlageneigenschaft oder -eigenschaften [Bucket].“ Dieser Fehler wird verursacht, weil der CloudFormation-Vorlagenvalidator die Bucket-Ressource als Spezifikation auf Abschnittsebene sieht. Eine Angabe auf Abschnittsebene ist als Vorlageneigenschaft nicht zulässig.
Beispiel-JSON (falsch):
{ "Resources": { "WaitCondition": { "Type": "AWS::CloudFormation::WaitCondition" } }, #<There is an extra '}' causing the Resources section to be closed off after the WaitCondition resource.> "Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "Name": "BucketName" } } }
Beispiel-YAML (falsch):
Resources: WaitCondition: Type: AWS::CloudFormation::WaitCondition Bucket: # <The spacing for the entire Bucket resource is incorrect and needs to be shifted 2 spaces to the right.> Type: AWS::S3::Bucket Properties: Name: BucketName
Um dieses Problem zu beheben, korrigieren Sie die Formatierung, sodass die Bucket-Ressource im Abschnitt Ressourcen angegeben ist. Im folgenden Beispiel sehen Sie korrekt formatierte JSON- und YAML-Vorlagen.
Beispiel-JSON (richtig):
{ "Resources": { "WaitCondition": { "Type": "AWS::CloudFormation::WaitCondition" }, "Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "Name": "BucketName" } } } }
Beispiel-YAML (richtig):
Resources: WaitCondition: Type: 'AWS::CloudFormation::WaitCondition' Bucket: Type: 'AWS::S3::Bucket' Properties: Name: BucketName

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr