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

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.

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::Andfungiert 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 oder false 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

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::Notfungiert 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, die true oder false 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 oder false 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