

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 ConditionsVorlagensyntax
<a name="conditions-section-structure"></a>

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 einer Ressource oder Ausgabe zuordnen, sodass die Ressource oder Ausgabe nur CloudFormation erstellt wird, wenn die Bedingung erfüllt ist. Ebenso können Sie einer Eigenschaft eine Bedingung zuordnen, sodass die CloudFormation Eigenschaft 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 alternativen Wert gesetzt, den Sie angeben.

Sie können Bedingungen verwenden, wenn Sie eine Vorlage wiederverwenden möchten, um Ressourcen in unterschiedlichen Kontexten zu erstellen, z. B. in Test- und Produktionsumgebungen. Sie können zum Beispiel in Ihrer Vorlage einen Eingabeparameter `EnvironmentType` hinzufügen, der entweder `prod` oder `test` als Eingabe akzeptiert. Für die `prod`-Umgebung können Sie EC2-Instances mit bestimmten Funktionen einbeziehen, während Sie für die `test`-Umgebung vielleicht reduzierte Funktionen verwenden, um Geld zu sparen. Mit dieser Bedingungsdefinition können Sie festlegen, welche Ressourcen erstellt werden und wie sie für jeden Umgebungstyp konfiguriert werden.

## Syntax
<a name="conditions-section-structure-syntax"></a>

Der Abschnitt `Conditions` besteht aus dem Schlüsselnamen `Conditions`. Jede Bedingungsdeklaration enthält eine logische ID und eine oder mehrere intrinsische Funktionen. 

### JSON
<a name="conditions-section-structure-syntax.json"></a>

```
"Conditions": {
  "LogicalConditionName1": {
    "Intrinsic function": ...[
  },

  "LogicalConditionName2": {
    "Intrinsic function": ...
  }
}
```

### YAML
<a name="conditions-section-structure-syntax.yaml"></a>

```
Conditions:
  LogicalConditionName1:
    Intrinsic function:
      ...

  LogicalConditionName2:
    Intrinsic function:
      ...
```

## Wie Bedingungen funktionieren
<a name="conditions-section-structure-overview"></a>

Um die Bedingungen zu verwenden, gehen Sie folgendermaßen vor:

1. **Fügen Sie eine Parameterdefinition hinzu**- Definieren Sie die Eingaben, die Ihre Bedingungen auswerten werden, im Abschnitt `Parameters` Ihrer Vorlage. Die Bedingungen werden auf der Grundlage der Werte dieser Eingabeparameter als wahr oder falsch ausgewertet. Beachten Sie, dass Pseudo-Parameter automatisch verfügbar sind und keine explizite Definition im Abschnitt `Parameters` erfordern. Weitere Informationen zu Pseudoparametern finden Sie unter [AWS Werte mithilfe von Pseudo-Parametern abrufen](pseudo-parameter-reference.md).

1. **Fügen Sie eine Bedingungsdefinition hinzu**- Definieren Sie Bedingungen im Abschnitt `Conditions` mit Hilfe von intrinsischen Funktionen wie `Fn::If` oder `Fn::Equals`. Diese Bedingungen bestimmen, wann die zugehörigen Ressourcen CloudFormation erstellt werden. Die Bedingungen können sich auf Folgendes beziehen:
   + Eingabe oder Pseudo-Parameterwerte
   + Andere Bedingungen
   + Werte mappen

   Sie können jedoch in Bedingungen nicht auf logische Ressourcen IDs oder deren Attribute verweisen.

1. **Bedingungen mit Ressourcen oder Ausgängen verknüpfen**- Bedingungen in Ressourcen oder Ausgängen mit dem Schlüssel `Condition` und der logischen ID einer Bedingung referenzieren. Verwenden Sie optional `Fn::If` in anderen Teilen der Vorlage (z. B. bei Eigenschaftswerten), um Werte auf der Grundlage einer Bedingung festzulegen. Weitere Informationen finden Sie unter [Verwendung der Taste `Condition` .](#using-conditions-in-templates).

CloudFormation wertet Bedingungen aus, wenn ein Stack erstellt oder aktualisiert wird. CloudFormation erstellt Entitäten, die mit einer wahren Bedingung verknüpft sind, und ignoriert Entitäten, die einer falschen Bedingung zugeordnet sind. CloudFormation bewertet diese Bedingungen außerdem bei jedem Stack-Update neu, bevor Ressourcen geändert werden. Entitäten, die mit einer wahren Bedingung verbunden bleiben, werden aktualisiert, während diejenigen, die mit einer falschen Bedingung verbunden werden, gelöscht werden.

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

## Intrinsische Bedingungsfunktionen
<a name="conditions-section-structure-functions"></a>

Sie können die folgenden intrinsischen Funktionen verwenden, um Bedingungen zu definieren:
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or)

**Anmerkung**  
`Fn::If` wird nur im Metadatenattribut, Aktualisierungsrichtlinienattribut und Eigenschaftswerte im Bereich `Resources` und den Bereichen `Outputs` einer Vorlage unterstützt.

## Verwendung der Taste `Condition` .
<a name="using-conditions-in-templates"></a>

Sobald eine Bedingung definiert ist, können Sie sie an mehreren Stellen in der Vorlage anwenden, beispielsweise `Resources` und `Outputs`, indem Sie den Schlüssel `Condition` verwenden. Der Schlüssel `Condition` verweist auf den logischen Namen einer Bedingung und gibt das ausgewertete Ergebnis der angegebenen Bedingung zurück.

**Topics**
+ [Bedingungen mit Ressourcen verknüpfen](#associate-conditions-with-resources)
+ [Bedingungen mit Ausgaben verknüpfen](#associate-conditions-with-outputs)
+ [Referenzbedingungen in anderen Bedingungen](#reference-conditions-in-other-conditions)
+ [Bedingte Rückgabe von Eigenschaftswerten mit `Fn::If`](#conditional-return-property-values-using-fn-if)

### Bedingungen mit Ressourcen verknüpfen
<a name="associate-conditions-with-resources"></a>

Um Ressourcen bedingt zu erstellen, fügen Sie der Ressource den `Condition` Schlüssel und die logische ID der Bedingung als Attribut hinzu. CloudFormation erstellt die Ressource nur, wenn die Bedingung als wahr ausgewertet wird.

#### JSON
<a name="associate-conditions-with-resources.json"></a>

```
"NewVolume" : {
  "Type" : "AWS::EC2::Volume",
  "Condition" : "IsProduction",
  "Properties" : {
     "Size" : "100",
     "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]}
  }
}
```

#### YAML
<a name="associate-conditions-with-resources.yaml"></a>

```
NewVolume:
  Type: AWS::EC2::Volume
  Condition: IsProduction
  Properties:
    Size: 100
    AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
```

### Bedingungen mit Ausgaben verknüpfen
<a name="associate-conditions-with-outputs"></a>

Sie können auch Bedingungen mit Ausgaben verknüpfen. CloudFormation erstellt die Ausgabe nur, wenn die zugehörige Bedingung als wahr ausgewertet wird.

#### JSON
<a name="associate-conditions-with-outputs.json"></a>

```
"Outputs" : {
  "VolumeId" : {
    "Condition" : "IsProduction",
    "Value" : { "Ref" : "NewVolume" }
  }
}
```

#### YAML
<a name="associate-conditions-with-outputs.yaml"></a>

```
Outputs:
  VolumeId:
    Condition: IsProduction
    Value: !Ref NewVolume
```

### Referenzbedingungen in anderen Bedingungen
<a name="reference-conditions-in-other-conditions"></a>

Wenn Sie Bedingungen im Abschnitt `Conditions` definieren, können Sie mit dem Schlüssel `Condition` auf andere Bedingungen verweisen. Damit können Sie eine komplexere bedingte Logik erstellen, indem Sie mehrere Bedingungen kombinieren.

Im folgenden Beispiel wird die Bedingung `IsProdAndFeatureEnabled` nur dann als wahr bewertet, wenn die Bedingungen `IsProduction` und `IsFeatureEnabled` als wahr bewertet werden.

#### JSON
<a name="reference-conditions-in-other-conditions.json"></a>

```
"Conditions": {
  "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]},
  "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]},
  "IsProdAndFeatureEnabled" : {
    "Fn::And" : [
      {"Condition" : "IsProduction"},
      {"Condition" : "IsFeatureEnabled"}
    ]
  }
}
```

#### YAML
<a name="reference-conditions-in-other-conditions.yaml"></a>

```
Conditions:
  IsProduction:
    !Equals [!Ref Environment, "prod"]
  IsFeatureEnabled:
    !Equals [!Ref FeatureFlag, "enabled"]
  IsProdAndFeatureEnabled: !And
    - !Condition IsProduction
    - !Condition IsFeatureEnabled
```

### Bedingte Rückgabe von Eigenschaftswerten mit `Fn::If`
<a name="conditional-return-property-values-using-fn-if"></a>

Für eine genauere Kontrolle können Sie die intrinsische Funktion `Fn::If` verwenden, um bedingt einen von zwei Eigenschaftswerten innerhalb von Ressourcen oder Ausgaben zurückzugeben. Diese Funktion wertet eine Bedingung aus und gibt einen Wert zurück, wenn die Bedingung wahr ist, und einen anderen Wert, wenn die Bedingung falsch ist.

#### Bedingte Eigenschaftswerte
<a name="using-fn-if-for-conditional-values"></a>

Das folgende Beispiel zeigt, wie Sie einen EC2-Instance-Typ auf der Grundlage einer Umgebungsbedingung festlegen. Wenn die Bedingung `IsProduction` als wahr ausgewertet wird, wird der Instancetyp auf `c5.xlarge`gesetzt. Andernfalls wird er auf `t3.small`gesetzt.

##### JSON
<a name="using-fn-if-for-conditional-values.json"></a>

```
"Properties" : {
  "InstanceType" : {
    "Fn::If" : [
      "IsProduction",
      "c5.xlarge",
      "t3.small"
    ]
  }
}
```

##### YAML
<a name="using-fn-if-for-conditional-values.yaml"></a>

```
Properties:
  InstanceType: !If
    - IsProduction
    - c5.xlarge
    - t3.small
```

#### Bedingte Entfernung von Eigentum
<a name="using-fn-if-with-novalue"></a>

Sie können auch den Pseudoparameter `AWS::NoValue` als Rückgabewert verwenden, um die entsprechende Eigenschaft zu entfernen, wenn eine Bedingung falsch ist.

##### JSON
<a name="using-fn-if-with-novalue.json"></a>

```
"DBSnapshotIdentifier" : {
  "Fn::If" : [
    "UseDBSnapshot",
    {"Ref" : "DBSnapshotName"},
    {"Ref" : "AWS::NoValue"}
  ]
}
```

##### YAML
<a name="using-fn-if-with-novalue.yaml"></a>

```
DBSnapshotIdentifier: !If
  - UseDBSnapshot
  - !Ref DBSnapshotName
  - !Ref "AWS::NoValue"
```

## Beispiele
<a name="conditions-section-structure-examples"></a>

**Topics**
+ [Umweltbasierte Ressourcenerstellung](#environment-based-resource-creation)
+ [Ressourcenbereitstellung unter mehreren Bedingungen](#multi-condition-resource-provisioning)

### Umweltbasierte Ressourcenerstellung
<a name="environment-based-resource-creation"></a>

In den folgenden Beispielen wird eine EC2-Instance bereitgestellt und ein neues EBS-Volume nur dann erstellt und angehängt, wenn der Umgebungstyp `prod`ist. Wenn die Umgebung `test`ist, wird die EC2-Instance einfach ohne das zusätzliche Volume erstellt.

#### JSON
<a name="conditions-section-example-resource-creation.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "EnvType": {
            "Description": "Environment type",
            "Default": "test",
            "Type": "String",
            "AllowedValues": [
                "prod",
                "test"
            ],
            "ConstraintDescription": "must specify prod or test"
        }
    },
    "Conditions": {
        "IsProduction": {
            "Fn::Equals": [
                {
                    "Ref": "EnvType"
                },
                "prod"
            ]
        }
    },
    "Resources": {
        "EC2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "ami-1234567890abcdef0",
                "InstanceType": "c5.xlarge"
            }
        },
        "MountPoint": {
            "Type": "AWS::EC2::VolumeAttachment",
            "Condition": "IsProduction",
            "Properties": {
                "InstanceId": {
                    "Ref": "EC2Instance"
                },
                "VolumeId": {
                    "Ref": "NewVolume"
                },
                "Device": "/dev/sdh"
            }
        },
        "NewVolume": {
            "Type": "AWS::EC2::Volume",
            "Condition": "IsProduction",
            "Properties": {
                "Size": 100,
                "AvailabilityZone": {
                    "Fn::GetAtt": [
                        "EC2Instance",
                        "AvailabilityZone"
                    ]
                }
            }
        }
    }
}
```

#### YAML
<a name="conditions-section-example-resource-creation.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvType:
    Description: Environment type
    Default: test
    Type: String
    AllowedValues:
      - prod
      - test
    ConstraintDescription: must specify prod or test
Conditions:
  IsProduction: !Equals
    - !Ref EnvType
    - prod
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-1234567890abcdef0
      InstanceType: c5.xlarge
  MountPoint:
    Type: AWS::EC2::VolumeAttachment
    Condition: IsProduction
    Properties:
      InstanceId: !Ref EC2Instance
      VolumeId: !Ref NewVolume
      Device: /dev/sdh
  NewVolume:
    Type: AWS::EC2::Volume
    Condition: IsProduction
    Properties:
      Size: 100
      AvailabilityZone: !GetAtt
        - EC2Instance
        - AvailabilityZone
```

### Ressourcenbereitstellung unter mehreren Bedingungen
<a name="multi-condition-resource-provisioning"></a>

Die folgenden Beispiele erstellen einen S3-Bucket, wenn ein Bucket-Name angegeben wird, und fügen nur dann eine Bucket-Richtlinie hinzu, wenn die Umgebung auf `prod`eingestellt ist. Wenn kein Bucket-Name angegeben wird oder die Umgebung `test`lautet, werden keine Ressourcen erstellt.

#### JSON
<a name="conditions-section-example-multi-condition.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "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",
            "Properties": {
                "BucketName": {
                    "Ref": "BucketName"
                }
            }
        },
        "Policy": {
            "Type": "AWS::S3::BucketPolicy",
            "Condition": "CreateBucketPolicy",
            "Properties": {
                "Bucket": {
                    "Ref": "Bucket"
                },
                "PolicyDocument": { ... }
            }
        }
    }
}
```

#### YAML
<a name="conditions-section-example-multi-condition.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
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
    Properties:
      BucketName: !Ref BucketName
  Policy:
    Type: AWS::S3::BucketPolicy
    Condition: CreateBucketPolicy
    Properties:
      Bucket: !Ref Bucket
      PolicyDocument: ...
```

In diesem Beispiel zeigt die Bedingung `CreateBucketPolicy`, wie Sie mit dem Schlüssel `Condition` auf andere Bedingungen verweisen können. Die Richtlinie wird nur erstellt, wenn die Bedingungen `IsProduction` und `CreateBucket` als wahr bewertet werden.

**Anmerkung**  
Komplexere Beispiele für die Verwendung von Bedingungen finden Sie im Thema [Condition Attribut](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-condition.html) im *CloudFormation Template Reference Guide*.