Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CloudFormation ConditionsVorlagensyntax
Der optionale Abschnitt Conditions
enthält Anweisungen, die die Bedingungen definieren, unter denen Entitäten erstellt oder konfiguriert werden. Sie können beispielsweise eine Bedingung erstellen und sie einer Ressource oder Ausgabe zuordnen, sodass die Ressource oder Ausgabe nur CloudFormation erstellt wird, wenn die Bedingung erfüllt ist. Ebenso können Sie einer Eigenschaft eine Bedingung zuordnen, sodass die CloudFormation Eigenschaft nur dann auf einen bestimmten Wert gesetzt wird, wenn die Bedingung erfüllt ist. Wenn die Bedingung falsch ist, wird die CloudFormation Eigenschaft auf einen alternativen Wert gesetzt, den Sie angeben.
Sie können Bedingungen verwenden, wenn Sie eine Vorlage wiederverwenden möchten, um Ressourcen in unterschiedlichen Kontexten zu erstellen, z. B. in Test- und Produktionsumgebungen. Sie können Ihrer Vorlage beispielsweise einen EnvironmentType
Eingabeparameter hinzufügen, der entweder prod
oder test
als Eingaben akzeptiert. Für die prod
Umgebung könnten Sie EC2 Instanzen mit bestimmten Funktionen einbeziehen, während Sie für die test
Umgebung möglicherweise reduzierte Funktionen verwenden, um Geld zu sparen. Mit dieser Bedingungsdefinition können Sie für jeden Umgebungstyp definieren, welche Ressourcen erstellt und wie sie konfiguriert werden.
Syntax
Der Abschnitt Conditions
besteht aus dem Schlüsselnamen Conditions
. Jede Bedingungsdeklaration umfasst eine logische ID und eine oder mehrere systeminterne Funktionen.
JSON
"Conditions": { "
LogicalConditionName1
": { "Intrinsic function
":...
[ }, "LogicalConditionName2
": { "Intrinsic function
":...
} }
YAML
Conditions:
LogicalConditionName1
:Intrinsic function
:...
LogicalConditionName2
:Intrinsic function
:...
Wie funktionieren Bedingungen
Gehen Sie wie folgt vor, um Bedingungen zu verwenden:
-
Fügen Sie eine Parameterdefinition hinzu — Definieren Sie im
Parameters
Abschnitt Ihrer Vorlage die Eingaben, die Ihre Bedingungen auswerten werden. Die Bedingungen werden auf der Grundlage dieser Eingabeparameterwerte als wahr oder falsch bewertet. Beachten Sie, dass Pseudo-Parameter automatisch verfügbar sind und keine ausdrückliche Definition inParameters
diesem Abschnitt erfordern. Weitere Informationen zu Pseudoparametern finden Sie unter AWS Werte mithilfe von Pseudo-Parametern abrufen. -
Fügen Sie eine Bedingungsdefinition hinzu — Definieren Sie Bedingungen im
Conditions
Abschnitt mithilfe systemeigener Funktionen wie oder.Fn::If
Fn::Equals
Diese Bedingungen bestimmen, wann die zugehörigen CloudFormation Ressourcen erstellt werden. Die Bedingungen können auf folgenden Faktoren basieren:-
Eingabe- oder Pseudo-Parameterwerte
-
Andere Bedingungen
-
Werte zuordnen
Sie können jedoch in Bedingungen nicht auf logische Ressourcen IDs oder deren Attribute verweisen.
-
-
Zuordnen von Bedingungen zu Ressourcen oder Ausgaben — Referenzieren Sie Bedingungen in Ressourcen oder Ausgaben mithilfe des
Condition
Schlüssels und der logischen ID einer Bedingung. Verwenden SieFn::If
optional auch andere Teile der Vorlage (z. B. Eigenschaftswerte), um Werte auf der Grundlage einer Bedingung festzulegen. Weitere Informationen finden Sie unter Verwenden des Condition Schlüssels.
CloudFormation wertet Bedingungen aus, wenn ein Stapel erstellt oder aktualisiert wird. CloudFormation erstellt Entitäten, die mit einer wahren Bedingung verknüpft sind, und ignoriert Entitäten, die einer falschen Bedingung zugeordnet sind. CloudFormation bewertet diese Bedingungen außerdem bei jedem Stack-Update neu, bevor Ressourcen geändert werden. Entitäten, die weiterhin mit einer wahren Bedingung verknüpft sind, werden aktualisiert, während Entitäten, denen eine falsche Bedingung zugewiesen wird, gelöscht werden.
Wichtig
Bedingungen können während einer Stack-Aktualisierung nicht allein aktualisiert werden. Sie können Bedingungen nur aktualisieren, wenn Sie Änderungen einschließen, die Ressourcen hinzufügen, ändern oder löschen.
Intrinsische Bedingungsfunktionen
Sie können die folgenden intrinsischen Funktionen verwenden, um Bedingungen zu definieren:
Anmerkung
Fn::If
wird nur im Metadatenattribut, Aktualisierungsrichtlinienattribut und Eigenschaftswerte im Bereich Resources
und den Bereichen Outputs
einer Vorlage unterstützt.
Verwenden des Condition
Schlüssels
Sobald eine Bedingung definiert ist, können Sie sie mithilfe des Condition
Schlüssels an verschiedenen Stellen in der Vorlage anwendenOutputs
, z. B. Resources
und. Der Condition
Schlüssel verweist auf den logischen Namen einer Bedingung und gibt das ausgewertete Ergebnis der angegebenen Bedingung zurück.
Themen
Ordnen Sie Bedingungen Ressourcen zu
Um Ressourcen bedingt zu erstellen, fügen Sie der Ressource den Condition
Schlüssel und die logische ID der Bedingung als Attribut hinzu. CloudFormation erstellt die Ressource nur, wenn die Bedingung als wahr ausgewertet wird.
JSON
"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "IsProduction", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } }
YAML
NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
Ordnet Bedingungen Ausgaben zu
Sie können auch Bedingungen mit Ausgaben verknüpfen. CloudFormation erstellt die Ausgabe nur, wenn die zugehörige Bedingung als wahr ausgewertet wird.
JSON
"Outputs" : { "VolumeId" : { "Condition" : "IsProduction", "Value" : { "Ref" : "NewVolume" } } }
YAML
Outputs: VolumeId: Condition: IsProduction Value: !Ref NewVolume
Referenzbedingungen in anderen Bedingungen
Bei der Definition von Bedingungen in Conditions
diesem Abschnitt können Sie mithilfe des Condition
Schlüssels auf andere Bedingungen verweisen. Auf diese Weise können Sie eine komplexere bedingte Logik erstellen, indem Sie mehrere Bedingungen kombinieren.
Im folgenden Beispiel wird die IsProdAndFeatureEnabled
Bedingung nur dann als wahr ausgewertet, wenn die IsFeatureEnabled
Bedingungen IsProduction
und als wahr ausgewertet werden.
JSON
"Conditions": { "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]}, "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]}, "IsProdAndFeatureEnabled" : { "Fn::And" : [ {"Condition" : "IsProduction"}, {"Condition" : "IsFeatureEnabled"} ] } }
YAML
Conditions: IsProduction: !Equals [!Ref Environment, "prod"] IsFeatureEnabled: !Equals [!Ref FeatureFlag, "enabled"] IsProdAndFeatureEnabled: !And - !Condition IsProduction - !Condition IsFeatureEnabled
Geben Sie Eigenschaftswerte bedingt zurück mit Fn::If
Für eine detailliertere Steuerung können Sie die Fn::If
systeminterne Funktion verwenden, um einen von zwei Eigenschaftswerten innerhalb von Ressourcen oder Ausgaben bedingt zurückzugeben. Diese Funktion wertet eine Bedingung aus und gibt einen Wert zurück, wenn die Bedingung wahr ist, und einen anderen Wert, wenn die Bedingung falsch ist.
Bedingte Eigenschaftswerte
Das folgende Beispiel zeigt, wie ein EC2 Instanztyp auf der Grundlage einer Umgebungsbedingung festgelegt wird. Wenn die IsProduction
Bedingung als wahr ausgewertet wird, wird der Instanztyp auf c5.xlarge
gesetzt. Andernfalls ist sie auf gesetztt3.small
.
JSON
"Properties" : { "InstanceType" : { "Fn::If" : [ "IsProduction", "c5.xlarge", "t3.small" ] } }
YAML
Properties: InstanceType: !If - IsProduction - c5.xlarge - t3.small
Bedingte Entfernung von Eigentum
Sie können den AWS::NoValue
Pseudo-Parameter auch als Rückgabewert verwenden, um die entsprechende Eigenschaft zu entfernen, wenn eine Bedingung falsch ist.
JSON
"DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] }
YAML
DBSnapshotIdentifier: !If - UseDBSnapshot - !Ref DBSnapshotName - !Ref "AWS::NoValue"
Beispiele
Themen
Umgebungsbasierte Ressourcenerstellung
In den folgenden Beispielen wird eine EC2 Instanz bereitgestellt und ein neues EBS-Volume nur dann unter bestimmten Bedingungen erstellt und angehängt, wenn der Umgebungstyp prod
Wenn es sich um eine Umgebung handelttest
, wird die EC2 Instanz einfach ohne das zusätzliche Volume erstellt.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-1234567890abcdef0", "InstanceType": "c5.xlarge" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "IsProduction", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "IsProduction", "Properties": { "Size": 100, "AvailabilityZone": { "Fn::GetAtt": [ "EC2Instance", "AvailabilityZone" ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Description: Environment type Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test Conditions: IsProduction: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1234567890abcdef0 InstanceType: c5.xlarge MountPoint: Type: AWS::EC2::VolumeAttachment Condition: IsProduction Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone
Bereitstellung von Ressourcen unter mehreren Bedingungen
In den folgenden Beispielen wird unter bestimmten Bedingungen ein S3-Bucket erstellt, wenn ein Bucket-Name angegeben wird, und eine Bucket-Richtlinie wird nur angehängt, wenn die Umgebung auf eingestellt ist. prod
Wenn kein Bucket-Name angegeben wird oder die Umgebung bereits angegeben isttest
, werden keine Ressourcen erstellt.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket", "Properties": { "BucketName": { "Ref": "BucketName" } } }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": { ... } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: AWS::S3::Bucket Condition: CreateBucket Properties: BucketName: !Ref BucketName Policy: Type: AWS::S3::BucketPolicy Condition: CreateBucketPolicy Properties: Bucket: !Ref Bucket PolicyDocument: ...
In diesem Beispiel zeigt die CreateBucketPolicy
Bedingung, wie mithilfe des Condition
Schlüssels auf andere Bedingungen verwiesen wird. Die Richtlinie wird nur erstellt, wenn IsProduction
sowohl die CreateBucket
Bedingungen als auch als wahr bewertet werden.
Anmerkung
Komplexere Beispiele für die Verwendung von Bedingungen finden Sie unter dem Thema ConditionAttribute im Referenzhandbuch für AWS CloudFormation Vorlagen.