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 beispielsweise eine Bedingung erstellen und sie dann einer Ressource oder Ausgabe zuordnen, sodass die Ressource oder Ausgabe CloudFormation nur erstellt wird, wenn die Bedingung erfüllt ist. Ebenso können Sie die Bedingung einer Eigenschaft zuordnen, sodass die Eigenschaft CloudFormation 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 anderen Wert gesetzt, den Sie angeben.

Sie verwenden möglicherweise Bedingungen, wenn Sie eine Vorlage erneut verwenden möchten, die Ressourcen in verschiedenen Kontexten erstellen können, z. B. in einer Testumgebung im Vergleich zu einer Produktionsumgebung. In Ihrer Vorlage können Sie einen EnvironmentType-Eingabeparameter hinzufügen, der prod oder test als Eingaben akzeptiert. Für die Produktionsumgebung können Sie EC2 Amazon-Instances mit bestimmten Funktionen einbeziehen. Für die Testumgebung möchten Sie jedoch reduzierte Funktionen verwenden, um Geld zu sparen. Bei Bedingungen können Sie definieren, welche Ressourcen erstellt werden und wie sie für jeden Umgebungstyp konfiguriert werden.

Bedingungen werden anhand von vordefinierten Pseudoparametern oder Eingabeparameterwerten ausgewertet, die Sie beim Anlegen oder Aktualisieren eines Stacks angeben. In jeder Bedingung können Sie eine andere Bedingung, einen Parameterwert oder eine Zuweisung referenzieren. Sobald Sie alle gewünschten Bedingungen definiert haben, können Sie sie mit Ressourcen und Ressourceneigenschaften in den Abschnitten Resources und Outputs der Vorlage verknüpfen.

AWS CloudFormation Evaluiert bei der Stack-Erstellung oder Stack-Aktualisierung alle Bedingungen in Ihrer Vorlage, bevor Ressourcen erstellt werden. Ressourcen, die mit einer als wahr identifizierten Bedingung verknüpft sind, werden erstellt. Ressourcen, die mit einer falschen Bedingung verknüpft sind, werden ignoriert. CloudFormation bewertet diese Bedingungen auch bei jedem Stack-Update neu, bevor Ressourcen aktualisiert werden. Ressourcen, die nach wie vor mit einer als wahr identifizierten Bedingung verknüpft sind, werden aktualisiert. Ressourcen, die jetzt mit einer als falsch identifizierten Bedingung verknüpft sind, werden gelöscht.

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.

Wie benutzt man Bedingungen

Je nachdem, welche Entität Sie bedingt anlegen oder konfigurieren möchten, müssen Sie in den folgenden Vorlagenabschnitten Anweisungen einfügen:

Parameters Abschnitt

Definiert die Eingaben, die Ihre Bedingungen auswerten sollen. Die Bedingungen werden basierend auf den Werten dieser Eingangsparameter als wahr oder falsch bewertet. Wenn Sie möchten, dass Ihre Bedingungen Pseudo-Parameter auswerten, müssen Sie die Pseudo-Parameter in diesem Abschnitt nicht definieren. Pseudo-Parameter sind von vordefiniert. CloudFormation Weitere Informationen zu Pseudoparametern finden Sie unter Pseudoparameter-Referenz.

Conditions Abschnitt

Hier definieren Sie die Bedingungen mithilfe intrinsischer Bedingungsfunktionen. Diese Bedingungen bestimmen, wann die zugehörigen Ressourcen CloudFormation erstellt werden. Beispiele finden Sie unter Beispielvorlagen.

Abschnitt Resources und Abschnitt Outputs

Ordnen Sie den Ressourcen oder Ausgaben, die Sie bedingt erstellen möchten, Bedingungen zu. CloudFormation erstellt Entitäten, die mit einer wahren Bedingung verknüpft sind, und ignoriert Entitäten, die einer falschen Bedingung zugeordnet sind. Sie verknüpfen Bedingungen über den Schlüssel Condition und ihre logische ID mit einer Ressource oder einer Ausgabe. Zur bedingungsbasierten Festlegung einer Eigenschaft verwenden Sie die Funktion Fn::If. Ein Beispiel finden Sie unter Zuordnen einer Bedingung.

Syntax

Der Abschnitt Conditions besteht aus dem Schlüsselnamen Conditions. Jede Bedingungsdeklaration enthält eine logische ID und intrinsische Funktionen, die bei der Erstellung oder Aktualisierung eines Stacks überprüft werden. Die folgende Pseudovorlage veranschaulicht den Abschnitt Conditions:

JSON

"Conditions" : { "ConditionLogicalID" : {Intrinsic function} }

YAML

Conditions: ConditionLogicalID: Intrinsic function

Intrinsische Bedingungsfunktionen

Sie können die folgenden intrinsischen Funktionen verwenden, um Bedingungen zu definieren:

  • Fn::And

  • Fn::Equals

  • Fn::ForEach

  • Fn::If

  • Fn::Not

  • Fn::Or

Die Syntax und Informationen zu den einzelnen Bedingungsfunktionen finden Sie unter Bedingungsfunktionen. Die Syntax und Informationen zu Fn::ForEach finden Sie unter Fn::ForEach.

Anmerkung

Fn::If wird nur im Metadatenattribut, Aktualisierungsrichtlinienattribut und Eigenschaftswerte im Bereich Resources und den Bereichen Outputs einer Vorlage unterstützt.

Beispiele

Einfache Bedingung

Die folgende Beispielvorlage enthält einen Eingabeparameter EnvType. Wenn Sie für diesen Parameter prod angeben, wird ein Stack für die Produktion erstellt, wenn Sie test angeben ein Stack für Tests. CloudFormation Erstellt für eine Produktionsumgebung eine EC2 Amazon-Instance und fügt der Instance ein Volume hinzu. CloudFormation Erstellt für eine Testumgebung nur die EC2 Amazon-Instance.

Die Bedingung CreateProdResources wird als true interpretiert, wenn der Parameter EnvType auf prod gesetzt ist. In derselben Vorlage sind die Ressourcen NewVolume und MountPoint mit der Bedingung CreateProdResources verknüpft. Daher werden diese Ressourcen nur erstellt, wenn der Parameter EnvType auf prod gesetzt wurde.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type.", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test." } }, "Conditions": { "CreateProdResources": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "CreateProdResources", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "CreateProdResources", "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: CreateProdResources: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 MountPoint: Type: 'AWS::EC2::VolumeAttachment' Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: 'AWS::EC2::Volume' Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone

Verschachtelte Bedingung

Die folgende Beispielvorlage verweist auf eine Bedingung innerhalb einer anderen Bedingung. Sie können einen Stack erstellen, der einen S3-Bucket erstellt. CloudFormation Erstellt für einen Stack, der in einer Produktionsumgebung bereitgestellt wird, eine Richtlinie für den S3-Bucket.

JSON
{ "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" }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": "..." } } } }
YAML
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 Policy: Type: 'AWS::S3::BucketPolicy' Condition: CreateBucketPolicy Properties: Bucket: !Ref BucketName PolicyDocument: ...