CloudFormation Vorlage Conditions-Syntax - AWS CloudFormation

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 Vorlage Conditions-Syntax

Der optionale Abschnitt Conditions enthält Anweisungen, die die Bedingungen definieren, unter denen Entitäten erstellt oder konfiguriert werden. Sie können zum Beispiel eine Bedingung erstellen und diese mit einer Ressource oder Ausgabe verknüpfen, so dass CloudFormation die Ressource oder Ausgabe nur erstellt, wenn die Bedingung erfüllt ist. Auf ähnliche Weise können Sie eine Bedingung mit einer Eigenschaft verknüpfen, so dass CloudFormation die Eigenschaft nur dann auf einen bestimmten Wert setzt, wenn die Bedingung erfüllt ist. Wenn die Bedingung falsch ist, setzt CloudFormation die Eigenschaft auf einen alternativen Wert, 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 zum Beispiel in Ihrer Vorlage einen Eingabeparameter EnvironmentType hinzufügen, der entweder prod oder test als Eingabe akzeptiert. Für die prod-Umgebung können Sie EC2-Instances mit bestimmten Funktionen einbeziehen, während Sie für die test-Umgebung vielleicht reduzierte Funktionen verwenden, um Geld zu sparen. Mit dieser Bedingungsdefinition können Sie festlegen, welche Ressourcen erstellt werden und wie sie für jeden Umgebungstyp konfiguriert werden.

Syntax

Der Abschnitt Conditions besteht aus dem Schlüsselnamen Conditions. Jede Bedingungsdeklaration enthält eine logische ID und eine oder mehrere intrinsische Funktionen.

JSON

"Conditions": { "LogicalConditionName1": { "Intrinsic function": ...[ }, "LogicalConditionName2": { "Intrinsic function": ... } }

YAML

Conditions: LogicalConditionName1: Intrinsic function: ... LogicalConditionName2: Intrinsic function: ...

Wie Bedingungen funktionieren

Um die Bedingungen zu verwenden, gehen Sie folgendermaßen vor:

  1. Fügen Sie eine Parameterdefinition hinzu- Definieren Sie die Eingaben, die Ihre Bedingungen auswerten werden, im Abschnitt Parameters Ihrer Vorlage. Die Bedingungen werden auf der Grundlage der Werte dieser Eingabeparameter als wahr oder falsch ausgewertet. Beachten Sie, dass Pseudo-Parameter automatisch verfügbar sind und keine explizite Definition im Abschnitt Parameters erfordern. Weitere Informationen zu Pseudoparametern finden Sie unter AWS Werte mithilfe von Pseudo-Parametern abrufen.

  2. Fügen Sie eine Bedingungsdefinition hinzu- Definieren Sie Bedingungen im Abschnitt Conditions mit Hilfe von intrinsischen Funktionen wie Fn::If oder Fn::Equals. Diese Bedingungen bestimmen, wann CloudFormation die zugehörigen Ressourcen erstellt. Die Bedingungen können sich auf Folgendes beziehen:

    • Eingabe oder Pseudo-Parameterwerte

    • Andere Bedingungen

    • Werte mappen

    Sie können jedoch keine logischen IDs von Ressourcen oder deren Attribute in Bedingungen referenzieren.

  3. Bedingungen mit Ressourcen oder Ausgängen verknüpfen- Bedingungen in Ressourcen oder Ausgängen mit dem Schlüssel Condition und der logischen ID einer Bedingung referenzieren. Verwenden Sie optional Fn::If in anderen Teilen der Vorlage (z. B. bei Eigenschaftswerten), um Werte auf der Grundlage einer Bedingung festzulegen. Weitere Informationen finden Sie unter Verwendung der Taste Condition ..

CloudFormation wertet beim Erstellen oder Aktualisieren eines Stacks Bedingungen aus. CloudFormation erstellt Entitäten, die mit einer wahren Bedingung verbunden sind, und ignoriert Entitäten, die mit einer falschen Bedingung verbunden sind. CloudFormation wertet diese Bedingungen bei jeder Stack-Aktualisierung neu aus, bevor die Ressourcen geändert werden. Entitäten, die mit einer wahren Bedingung verbunden bleiben, werden aktualisiert, während diejenigen, die mit einer falschen Bedingung verbunden werden, 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.

Verwendung der Taste Condition .

Sobald eine Bedingung definiert ist, können Sie sie an mehreren Stellen in der Vorlage anwenden, beispielsweise Resources und Outputs, indem Sie den Schlüssel Condition verwenden. Der Schlüssel Condition verweist auf den logischen Namen einer Bedingung und gibt das ausgewertete Ergebnis der angegebenen Bedingung zurück.

Bedingungen mit Ressourcen verknüpfen

Um Ressourcen bedingt zu erstellen, fügen Sie den Schlüssel Condition und die logische ID der Bedingung als Attribut zur Ressource 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

Bedingungen mit Ausgaben verknüpfen

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

Wenn Sie Bedingungen im Abschnitt Conditions definieren, können Sie mit dem Schlüssel Condition auf andere Bedingungen verweisen. Damit können Sie eine komplexere bedingte Logik erstellen, indem Sie mehrere Bedingungen kombinieren.

Im folgenden Beispiel wird die Bedingung IsProdAndFeatureEnabled nur dann als wahr bewertet, wenn die Bedingungen IsProduction und IsFeatureEnabled als wahr bewertet 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

Bedingte Rückgabe von Eigenschaftswerten mit Fn::If

Für eine genauere Kontrolle können Sie die intrinsische Funktion Fn::If verwenden, um bedingt einen von zwei Eigenschaftswerten innerhalb von Ressourcen oder Ausgaben 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 Sie einen EC2-Instance-Typ auf der Grundlage einer Umgebungsbedingung festlegen. Wenn die Bedingung IsProduction als wahr ausgewertet wird, wird der Instancetyp auf c5.xlargegesetzt. Andernfalls wird er auf t3.smallgesetzt.

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 auch den Pseudoparameter AWS::NoValue 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

Umweltbasierte Ressourcenerstellung

In den folgenden Beispielen wird eine EC2-Instance bereitgestellt und ein neues EBS-Volume nur dann erstellt und angehängt, wenn der Umgebungstyp prodist. Wenn die Umgebung testist, wird die EC2-Instance 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

Ressourcenbereitstellung unter mehreren Bedingungen

Die folgenden Beispiele erstellen einen S3-Bucket, wenn ein Bucket-Name angegeben wird, und fügen nur dann eine Bucket-Richtlinie hinzu, wenn die Umgebung auf prodeingestellt ist. Wenn kein Bucket-Name angegeben wird oder die Umgebung testlautet, 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 Bedingung CreateBucketPolicy, wie Sie mit dem Schlüssel Condition auf andere Bedingungen verweisen können. Die Richtlinie wird nur erstellt, wenn die Bedingungen IsProduction und CreateBucket als wahr bewertet werden.

Anmerkung

Komplexere Beispiele für die Verwendung von Bedingungen finden Sie im Thema Condition Attribut im CloudFormation Template Reference Guide.