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 z. B. Fn::If
, Fn::Equals
und Fn::Not
verwenden, um Stack-Ressourcen bedingt zu erstellen. Diese Bedingungen werden basierend auf Eingabeparametern ausgewertet, die Sie deklarieren, wenn Sie einen Stack erstellen oder aktualisieren. Nachdem Sie alle Ihre Bedingungen definiert haben, können Sie sie mit Ressourcen oder Ressourceneigenschaften in den Abschnitten für Ressourcen und Outputs einer Vorlage verknüpfen.
Sie definieren alle Bedingungen, außer Fn::If
-Bedingungen, im Abschnitt „Conditions“ einer Vorlage. Sie können die Fn::If
-Bedingung im Metadatenattribut, Aktualisierungsrichtlinienattribut und Eigenschaftswerte im Bereich „Resources“ und den Bereichen „Outputs“ einer Vorlage verwenden.
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 weniger Funktionen verwenden, um Kosten zu sparen. Bei Bedingungen können Sie definieren, welche Ressourcen erstellt werden und wie sie für jeden Umgebungstyp konfiguriert werden.
Weitere Informationen zum Abschnitt zu Bedingungen finden Sie unter Conditions.
Anmerkung
Sie können auf andere Bedingungen und Werte aus den Abschnitten für Parameter und Zuordnungen einer Vorlage zur verweisen. Sie können beispielsweise auf einen Wert aus einem Eingabeparameter verweisen, aber Sie können nicht auf die logische ID einer Ressource in einer Bedingung verweisen.
Themen
Zuordnen einer Bedingung
Um Ressourcen, Ressourceneigenschaften oder Ausgaben bedingt zu erstellen, müssen Sie diesen eine Bedingung zuordnen. Fügen Sie den Condition:
Schlüssel und die logische ID der Bedingung als Attribut hinzu, um eine Bedingung zuzuordnen, wie im folgenden Codeausschnitt gezeigt. AWS CloudFormation erstellt die NewVolume
Ressource nur, wenn die CreateProdResources
Bedingung als wahr ausgewertet wird.
JSON
"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} }
YAML
NewVolume: Type: "AWS::EC2::Volume" Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
Fn::If
Für die Fn::If
-Funktion müssen Sie nur den Namen der Bedingung angeben. Der folgende Codeausschnitt zeigt, wie Sie Fn::If
verwenden, um eine Ressourceneigenschaft bedingt anzugeben. Wenn die CreateLargeSize
Bedingung wahr ist, CloudFormation wird die Datenträgergröße auf 100
gesetzt. Wenn die Bedingung falsch ist, wird die Volumengröße auf CloudFormation gesetzt10
.
JSON
{ "NewVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": { "Fn::If": [ "CreateLargeSize", "100", "10" ] }, "AvailabilityZone": { "Fn::GetAtt": [ "Ec2Instance", "AvailabilityZone" ] } }, "DeletionPolicy": "Snapshot" } }
YAML
NewVolume: Type: 'AWS::EC2::Volume' Properties: Size: 'Fn::If': - CreateLargeSize - '100' - '10' AvailabilityZone: 'Fn::GetAtt': - Ec2Instance - AvailabilityZone DeletionPolicy: Snapshot
Verschachtelte Bedingungen
Sie können auch Bedingungen in anderen Bedingungen verwenden. Der folgende Codeausschnitt stammt aus dem Conditions
-Abschnitt einer Vorlage. Die MyAndCondition
-Bedingung enthält die SomeOtherCondition
-Bedingung:
JSON
"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }
YAML
MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref "ASecurityGroup"] - !Condition SomeOtherCondition
Fn::And
Gibt zurück, true
ob alle angegebenen Bedingungen als wahr ausgewertet werden, oder gibt zurück, false
ob eine der Bedingungen als falsch ausgewertet wird. Fn::And
fungiert als AND Operator. 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
]
Parameter
condition
-
Eine Bedingung, die den Wert
true
oderfalse
ergibt.
Beispiel
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
]
Parameter
value
-
Ein Wert beliebiger Art, den Sie vergleichen möchten.
Beispiel
Die folgende UseProdCondition
-Bedingung ergibt „true“, wenn der Wert für den EnvironmentType
-Parameter prod
entspricht:
JSON
"UseProdCondition" : { "Fn::Equals": [ {"Ref": "EnvironmentType"}, "prod" ] }
YAML
UseProdCondition: !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 Metadatenattributen, Aktualisierungsrichtlinienattributen und Eigenschaftswerten in den Abschnitten Ressourcen und Ausgaben 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
]
Parameter
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
false
ergibt.
Beispiele
Weitere Beispiele finden Sie unter Mustervorlagen.
Beispiel 1
Das folgende Snippet verwendet eine Fn::If
Funktion in der SecurityGroups
Eigenschaft für eine EC2 Amazon-Ressource. Wenn die CreateNewSecurityGroup
Bedingung als wahr ausgewertet wird, wird der referenzierte Wert von CloudFormation verwendet, NewSecurityGroup
um die SecurityGroups
Eigenschaft anzugeben; andernfalls wird der referenzierte Wert von CloudFormation verwendet. ExistingSecurityGroup
JSON
"SecurityGroups" : [{ "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] }]
YAML
SecurityGroups: - !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]
Beispiel 2
Sie können im Abschnitt „Output“ einer Vorlage die Fn::If
-Funktion verwenden, um Informationen bedingt auszugeben. Wenn die CreateNewSecurityGroup
Bedingung im folgenden Codeausschnitt 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" : "ExistingSecurityGroup"} ] } } }
YAML
Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]
Beispiel 3
Der folgende Codeausschnitt verwendet den AWS::NoValue
-Pseudoparameter in einer Fn::If
-Funktion. Die Bedingung verwendet einen Snapshot für eine RDS Amazon-DB-Instance nur, wenn eine Snapshot-ID angegeben wird. Wenn die UseDBSnapshot
Bedingung als wahr ausgewertet wird, CloudFormation wird der DBSnapshotName
Parameterwert für die DBSnapshotIdentifier
Eigenschaft verwendet. Wenn die Bedingung als falsch ausgewertet wird, CloudFormation wird die DBSnapshotIdentifier
Eigenschaft entfernt.
JSON
"MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDB: Type: "AWS::RDS::DBInstance" Properties: AllocatedStorage: 5 DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]
Beispiel 4
Der folgende Codeausschnitt bietet nur dann eine Auto Scaling-Aktualisierungsrichtlinie, wenn die RollingUpdates
-Bedingung „true“ ergibt. Wenn die Bedingung als falsch ausgewertet wird, CloudFormation wird die AutoScalingRollingUpdate
Aktualisierungsrichtlinie entfernt.
JSON
"UpdatePolicy": { "AutoScalingRollingUpdate": { "Fn::If": [ "RollingUpdates", { "MaxBatchSize": "2", "MinInstancesInService": "2", "PauseTime": "PT0M30S" }, { "Ref" : "AWS::NoValue" } ] } }
YAML
UpdatePolicy: AutoScalingRollingUpdate: !If - RollingUpdates - MaxBatchSize: 2 MinInstancesInService: 2 PauseTime: PT0M30S - !Ref "AWS::NoValue"
Fn::Not
Gibt true
für eine Bedingung zurück, die als Ergebnis ausgewertet wird, false
oder kehrt false
für eine Bedingung zurück, die als 0 ausgewertet wird. true
Fn::Not
fungiert als Operator. NOT
Deklaration
JSON
"Fn::Not": [{
condition
}]
YAML
Syntax für den vollständigen Funktionsnamen:
Fn::Not: [
condition
]
Syntax für die Kurzform:
!Not [
condition
]
Parameter
condition
-
Eine Bedingung wie z. B.
Fn::Equals
, dietrue
oderfalse
ergibt.
Beispiel
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, ...
]
Parameter
condition
-
Eine Bedingung, die den Wert
true
oderfalse
ergibt.
Beispiel
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