Bedingungen - 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.

Bedingungen

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 AWS CloudFormation nur erstellt wird, wenn die Bedingung wahr ist. Ebenso können Sie die Bedingung einer Eigenschaft zuordnen, sodass die Eigenschaft AWS CloudFormation nur dann auf einen bestimmten Wert gesetzt wird, wenn die Bedingung erfüllt ist. Wenn die Bedingung falsch ist, wird die AWS 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. Beispielsweise möchten Sie in der Produktionsumgebung vielleicht Amazon EC2-Instances mit einem bestimmten Funktionsumfang bereitstellen, in der Testumgebung jedoch nur Instances mit begrenztem Funktionsumfang, 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 auf der Grundlage vordefinierter Pseudo-Parameter oder Eingabeparameterwerte ausgewertet, die Sie beim Erstellen 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.

Bei der Erstellung oder Aktualisierung des Stacks werden alle Bedingungen in Ihrer Vorlage AWS CloudFormation ausgewertet, 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. AWS 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.

Übersicht über die Verwendung von 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. AWS CloudFormation

Conditions Abschnitt

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

Abschnitt Resources und Abschnitt Outputs

Ordnen Sie Bedingungen den Ressourcen oder Ausgaben zu, die Sie bedingt anlegen möchten. AWS CloudFormation erstellt Entitäten, die mit einer wahren Bedingung verbunden sind und ignoriert Entitäten, die mit einer falschen Bedingung verbunden 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. Weitere Informationen finden Sie unter Bedingungsfunktionen.

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" : { "MyLogicalID" : {Intrinsic function} }

YAML

Conditions: MyLogicalID: Intrinsic function

Intrinsische Bedingungsfunktionen

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

Die Syntax der einzelnen Funktionen sowie weitere Informationen finden Sie unter Bedingungsfunktionen.

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. In einer Produktionsumgebung erstellt AWS CloudFormation eine Amazon-EC2-Instance und fügt dieser Instance ein Volume an. AWS CloudFormation Erstellt für eine Testumgebung nur die Amazon EC2 EC2-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. AWS 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: ...