Dies ist das neue CloudFormation Template Reference Guide. Bitte aktualisieren Sie Ihre Lesezeichen und Links. Hilfe zu den ersten CloudFormation Schritten finden Sie im AWS CloudFormation Benutzerhandbuch.
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.
Bedingungsfunktionen
Sie können intrinsische Funktionen wie Fn::If oder Fn::Equalsverwenden, um Stapelressourcen auf der Grundlage einer bedingten Logik zu erstellen und zu konfigurieren. Diese Bedingungen werden bei der Erstellung oder Aktualisierung von Stapeln ausgewertet. Nachdem Sie alle Bedingungen definiert haben, können Sie diese mit Ressourcen oder Ressourceneigenschaften in den Abschnitten Resources und Outputs einer Vorlage verknüpfen.
Für fortgeschrittene Szenarien können Sie Bedingungen mit den Funktionen Fn::And oder Fn::Or kombinieren oder Fn::Not verwenden, um den Wert einer Bedingung zu negieren. Sie können auch Bedingungen verschachteln, um eine komplexere bedingte Logik zu erstellen.
Wenn Sie mit der Verwendung von Bedingungen in Ihren Vorlagen noch nicht vertraut sind, empfehlen wir Ihnen, zunächst das Thema Syntax der CloudFormation Vorlagenbedingungen im AWS CloudFormation Benutzerhandbuch zu lesen.
Anmerkung
Sie müssen alle Bedingungen im Abschnitt Conditions einer Vorlage definieren, mit Ausnahme der Fn::If-Bedingungen. Sie können die Bedingung Fn::If im Attribut Metadata, im Attribut UpdatePolicy und die Eigenschaftswerte in den Abschnitten Resources und Outputs verwenden.
Fn::And
Gibt true zurück, wenn alle angegebenen Bedingungen als wahr bewertet werden, oder false, wenn eine der Bedingungen als falsch bewertet wird. Fn::And fungiert als UND-Verknüpfung. Die Mindestanzahl von Bedingungen, die Sie verwenden können, ist 2 und die maximale Anzahl ist 10.
Deklaration
JSON
"Fn::And": [{condition}, {...}]
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::And: [condition]
Syntax für die Kurzform:
!And [condition]
Parameters
- condition
-
Eine Bedingung, die den Wert
trueoderfalseergibt.
Fn::And Verwendungsbeispiele
Die folgende MyAndCondition ergibt „true“, wenn der referenzierte Sicherheitsgruppenname sg-mysggroup entspricht und wenn SomeOtherCondition „true“ ergibt:
JSON
"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }
YAML
MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref ASecurityGroup] - !Condition SomeOtherCondition
Fn::Equals
Vergleicht, ob zwei Werte gleich sind. Gibt true zurück, wenn die beiden Werte identisch sind, oder false, wenn sie nicht identisch nicht.
Deklaration
JSON
"Fn::Equals" : ["value_1", "value_2"]
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::Equals: [value_1,value_2]
Syntax für die Kurzform:
!Equals [value_1,value_2]
Parameters
- value
-
Ein String-Wert, den Sie vergleichen möchten.
Fn::Equals Verwendungsbeispiele
Die folgende IsProduction-Bedingung ergibt „true“, wenn der Wert für den EnvironmentType-Parameter prod entspricht:
JSON
"IsProduction" : { "Fn::Equals": [ {"Ref": "EnvironmentType"}, "prod" ] }
YAML
IsProduction: !Equals [!Ref EnvironmentType, prod]
Fn::If
Gibt einen Wert zurück, wenn die angegebene Bedingung true entspricht, und einen anderen Wert, wenn die angegebene Bedingung false entspricht. CloudFormationUnterstützt derzeit die Fn::If intrinsische Funktion in den Metadata Attribut-, UpdatePolicy Attribut- und Eigenschaftswerten im Resources Abschnitt und in den Outputs Abschnitten einer Vorlage. Sie können den Pseudoparameter AWS::NoValue als Rückgabewert verwenden, um die entsprechende Eigenschaft zu entfernen.
Deklaration
JSON
"Fn::If": [condition_name,value_if_true,value_if_false]
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::If: [condition_name,value_if_true,value_if_false]
Syntax für die Kurzform:
!If [condition_name,value_if_true,value_if_false]
Parameters
- condition_name
-
Ein Verweis auf eine Bedingung im Abschnitt „Conditions“. Verwenden Sie den Namen der Bedingung, um darauf zu verweisen.
- value_if_true
-
Ein Wert, der zurückgegeben werden soll, wenn die angegebene Bedingung true ergibt.
- value_if_false
-
Ein Wert, der zurückgegeben werden soll, wenn die angegebene Bedingung
falseergibt.
Fn::If Verwendungsbeispiele
Themen
Bedingte Auswahl einer Ressource
Das folgende Beispiel verwendet eine Fn::If Funktion in einer EC2 Amazon-Ressourcendefinition, um zu bestimmen, welche Sicherheitsgruppenressource der Instance zugeordnet werden soll. Wenn die CreateNewSecurityGroup Bedingung als wahr ausgewertet wird, wird der referenzierte Wert von NewSecurityGroup (einer Sicherheitsgruppe, die an anderer Stelle in der Vorlage erstellt wurde) CloudFormation verwendet, um die SecurityGroupIds Eigenschaft anzugeben. Wenn der Wert falsch CreateNewSecurityGroup ist, wird der referenzierte Wert von CloudFormation verwendet ExistingSecurityGroupId (ein Parameter, der auf eine vorhandene Sicherheitsgruppe verweist).
JSON
"Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0abcdef1234567890", "InstanceType": "t3.micro", "SecurityGroupIds": { "Fn::If": [ "CreateNewSecurityGroup", [{"Ref": "NewSecurityGroup"}], [{"Ref": "ExistingSecurityGroupId"}] ] }] } } }
YAML
Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-0abcdef1234567890 InstanceType: t3.micro SecurityGroupIds: !If - CreateNewSecurityGroup - [!Ref NewSecurityGroup] - [!Ref ExistingSecurityGroupId]
Bedingte Ausgaben
Im Abschnitt Output einer Vorlage können Sie die Funktion Fn::If verwenden, um Informationen bedingt auszugeben. Wenn im folgenden Codeausschnitt die CreateNewSecurityGroup Bedingung als wahr ausgewertet wird, wird die Sicherheitsgruppen-ID der Ressource CloudFormation ausgegeben. NewSecurityGroup Wenn die Bedingung falsch ist, wird die Sicherheitsgruppen-ID der Ressource CloudFormation ausgegeben. ExistingSecurityGroup
JSON
"Outputs" : { "SecurityGroupId" : { "Description" : "Group ID of the security group used.", "Value" : { "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroupId"} ] } } }
YAML
Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroupId]
Bedingte Array-Werte
Das folgende Beispiel verwendet Fn::If, um abhängig von einer Bedingung verschiedene Array-Werte zu liefern. Wenn die Bedingung MoreThan2AZs als wahr ausgewertet wird, verwendet er drei öffentliche Teilnetze. Andernfalls verwendet es nur zwei öffentliche Subnetze.
JSON
"Subnets": { "Fn::If": [ "MoreThan2AZs", [ {"Fn::ImportValue": "PublicSubnet01"}, {"Fn::ImportValue": "PublicSubnet02"}, {"Fn::ImportValue": "PublicSubnet03"} ], [ {"Fn::ImportValue": "PublicSubnet01"}, {"Fn::ImportValue": "PublicSubnet02"} ] ] }
YAML
Subnets: Fn::If: - MoreThan2AZs - - Fn::ImportValue: PublicSubnet01 - Fn::ImportValue: PublicSubnet02 - Fn::ImportValue: PublicSubnet03 - - Fn::ImportValue: PublicSubnet01 - Fn::ImportValue: PublicSubnet02
Bedingte Eigenschaften und Eigenschaftswerte
Das folgende Beispiel verwendet den Pseudoparameter AWS::NoValue in einer Funktion Fn::If . Die Bedingung verwendet nur dann einen Snapshot für eine Amazon RDS-DB-Instance, wenn eine Snapshot-ID angegeben ist. Wenn die UseDBSnapshot Bedingung als wahr ausgewertet wird, CloudFormation wird der DBSnapshotName Parameterwert für die DBSnapshotIdentifier Eigenschaft verwendet. Wenn die Bedingung „false“ ergibt, entfernt CloudFormation die DBSnapshotIdentifier-Eigenschaft.
Es verwendet auch eine Fn::If-Funktion in der AllocatedStorage-Eigenschaft der Amazon RDS DB-Instance. Wenn die Bedingung IsProduction als wahr ausgewertet wird, wird die Speichergröße auf 100gesetzt. Andernfalls wird er auf 20gesetzt.
JSON
"MyDatabase" : { "Type" : "AWS::RDS::DBInstance", "Properties": { "DBInstanceClass": "db.t3.micro", "AllocatedStorage": { "Fn::If": [ "IsProduction", 100, 20 ] }, "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDatabase: Type: AWS::RDS::DBInstance Properties: DBInstanceClass: db.t3.micro AllocatedStorage: !If [IsProduction, 100, 20] Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]
Richtlinien für bedingte Aktualisierungen
Der folgende Ausschnitt enthält nur dann eine Amazon EC2 Auto Scaling Scaling-Aktualisierungsrichtlinie, wenn die RollingUpdates Bedingung als wahr bewertet wird. Wenn die Bedingung als falsch ausgewertet wird, wird die Aktualisierungsrichtlinie CloudFormation entfernt. AutoScalingRollingUpdate
JSON
"UpdatePolicy": { "Fn::If": [ "RollingUpdates", { "AutoScalingRollingUpdate": { "MaxBatchSize": 2, "MinInstancesInService": 2, "PauseTime": "PT0M30S" } }, { "Ref": "AWS::NoValue" } ] }
YAML
UpdatePolicy: !If - RollingUpdates - AutoScalingRollingUpdate: MaxBatchSize: 2 MinInstancesInService: 2 PauseTime: PT0M30S - !Ref "AWS::NoValue"
Fn::Not
Gibt true für eine Bedingung zurück, die false ergibt, oder gibt false für eine Bedingung zurück, die mit true ausgewertet wird. Fn::Not dient als NOT-Operator.
Deklaration
JSON
"Fn::Not": [{condition}]
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::Not: [condition]
Syntax für die Kurzform:
!Not [condition]
Parameters
- condition
-
Eine Bedingung wie z. B.
Fn::Equals, dietrueoderfalseergibt.
Fn::Not Verwendungsbeispiele
Die folgende EnvCondition-Bedingung ergibt „true“, wenn der Wert für den EnvironmentType-Parameter nicht prod entspricht:
JSON
"MyNotCondition" : { "Fn::Not" : [{ "Fn::Equals" : [ {"Ref" : "EnvironmentType"}, "prod" ] }] }
YAML
MyNotCondition: !Not [!Equals [!Ref EnvironmentType, prod]]
Fn::Or
Gibt true zurück, wenn alle angegebenen Bedingungen "true" ergeben, oder gibt false zurück, wenn eine der Bedingungen mit "false" ausgewertet wird. Fn::Or dient als OR-Operator. Die Mindestanzahl von Bedingungen, die Sie verwenden können, ist 2 und die maximale Anzahl ist 10.
Deklaration
JSON
"Fn::Or": [{condition}, {...}]
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::Or: [condition, ...]
Syntax für die Kurzform:
!Or [condition, ...]
Parameters
- condition
-
Eine Bedingung, die den Wert
trueoderfalseergibt.
Fn::Or Verwendungsbeispiele
Die folgende MyOrCondition ergibt „true“, wenn der referenzierte Sicherheitsgruppenname sg-mysggroup entspricht oder wenn SomeOtherCondition „true“ ergibt:
JSON
"MyOrCondition" : { "Fn::Or" : [ {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]}, {"Condition" : "SomeOtherCondition"} ] }
YAML
MyOrCondition: !Or [!Equals [sg-mysggroup, !Ref ASecurityGroup], Condition: SomeOtherCondition]
Unterstützte Funktionen
Sie können die folgenden Funktionen in der Fn::If-Bedingung verwenden:
-
Fn::Base64 -
Fn::FindInMap -
Fn::GetAtt -
Fn::GetAZs -
Fn::If -
Fn::Join -
Fn::Select -
Fn::Sub -
Ref
Sie können die folgenden Funktionen in allen anderen Bedingungsfunktionen wie Fn::Equals und Fn::Or verwenden:
-
Fn::FindInMap -
Ref -
Andere Bedingungsfunktionen
Beispielvorlage
Bedingtes Erstellen von Ressourcen für einen Produktions-, Entwicklungs- oder Test-Stack
In einigen Fällen möchten Sie vielleicht Stacks erstellen, die ähnlich sind, aber kleinere Änderungen enthalten. Sie haben beispielsweise vielleicht eine Vorlage, die Sie für Produktionsanwendungen verwenden. Sie möchten denselben Produktions-Stack erstellen, damit Sie ihn für Entwicklung und Tests verwenden können. Für Entwicklung und Tests benötigen Sie aber wahrscheinlich nicht die gesamte zusätzliche Kapazität, die in einem Produktions-Stack enthalten ist. Stattdessen können Sie einen Umgebungstyp-Eingabeparameter verwenden, um bedingt spezifische Stack-Ressourcen für Produktion, Entwicklung oder Tests zu erstellen, wie im folgenden Beispiel dargestellt:
Sie können für den prod-Parameter dev, test oder EnvType angeben. Für jeden Umgebungstyp gibt die Vorlage gibt einen anderen Instance-Typ an. Die Instance-Typen können von einem großen, für Datenverarbeitung optimierten Instance-Typ bis zu einem kleinen Instance-Typ für den allgemeinen Einsatz reichen. Um den Instancetyp bedingt festzulegen, definiert die Vorlage zwei Bedingungen im Abschnitt Conditions der Vorlage:,CreateProdResources die als wahr ausgewertet wird, wenn der Parameterwert EnvType gleich prod ist, und,CreateDevResources die als wahr ausgewertet wird, wenn der Parameterwert gleich devist.
Die Vorlage verschachtelt in der InstanceType-Eigenschaft zwei intrinsische Fn::If-Funktionen, um zu ermitteln, welcher Instance-Typ verwendet wende soll. Wenn die CreateProdResources-Bedingung erfüllt ist, ist der Instance-Typ c5.xlarge. Wenn die Bedingung nicht erfüllt ist, wird die CreateDevResources-Bedingung ausgewertet. Wenn die CreateDevResources-Bedingung erfüllt ist, ist der Instance-Typ t3.medium oder ansonsten ist der Instance-Typ t3.small.
Zusätzlich zum Instance-Typ erstellt die Produktionsumgebung ein EC2 Amazon-Volume und fügt es der Instance hinzu. Die Ressourcen MountPoint und NewVolume werden mit der CreateProdResources-Bedingung verknüpft, sodass die Ressourcen nur erstellt werden, wenn die Bedingung „true“ ergibt.
Beispiel JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "EnvType" : { "Description" : "Environment type.", "Default" : "test", "Type" : "String", "AllowedValues" : ["prod", "dev", "test"], "ConstraintDescription" : "must specify prod, dev, or test." } }, "Conditions" : { "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]}, "CreateDevResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]} }, "Resources" : { "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-1234567890abcdef0", "InstanceType" : { "Fn::If" : [ "CreateProdResources", "c5.xlarge", {"Fn::If" : [ "CreateDevResources", "t3.medium", "t3.small" ]} ]} } }, "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" ]} } } } }
Beispiel YAML
AWSTemplateFormatVersion: "2010-09-09" Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: [prod, dev, test] ConstraintDescription: must specify prod, dev, or test. Conditions: CreateProdResources: !Equals [!Ref EnvType, prod] CreateDevResources: !Equals [!Ref EnvType, "dev"] Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1234567890abcdef0 InstanceType: !If [CreateProdResources, c5.xlarge, !If [CreateDevResources, t3.medium, t3.small]] 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
Anmerkung
Ausführlichere Beispiele für die Verwendung von Bedingungen zur Erstellung von Ressourcen finden Sie im Thema Condition Attribut .