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 AbschnittOutputs
-
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 FunktionFn::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: ...