

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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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.

# Referenz für intrinsische Funktion
<a name="intrinsic-function-reference"></a>

CloudFormation bietet mehrere integrierte Funktionen, die Ihnen bei der Verwaltung Ihrer Stacks helfen. Verwenden Sie intrinsische Funktionen in Ihren Vorlagen, um Werte zu Eigenschaften zuzuweisen, die erst zur Laufzeit verfügbar sind.

**Anmerkung**  
Sie können intrinsische Funktionen nur in bestimmten Teilen einer Vorlage verwenden. Derzeit können Sie intrinsische Funktionen in Ressourceneigenschaften, Ausgaben, Metadaten-Attributen und Attributen von Aktualisierungsrichtlinien verwenden. Sie können auch intrinsische Funktionen zur bedingten Erstellung von Stack-Ressourcen verwenden.

**Topics**
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::Cidr`](intrinsic-function-reference-cidr.md)
+ [Bedingungsfunktionen](intrinsic-function-reference-conditions.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Split`](intrinsic-function-reference-split.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Ref`](intrinsic-function-reference-ref.md)
+ [Regel-Funktionen](intrinsic-function-reference-rules.md)

# `Fn::Base64`
<a name="intrinsic-function-reference-base64"></a>

Die intrinsische Funktion `Fn::Base64` gibt die Base64-Darstellung der Eingabezeichenfolge zurück. Diese Funktion wird normalerweise verwendet, um verschlüsselte Daten über die `UserData` Eigenschaft an EC2 Amazon-Instances zu übergeben.

## Deklaration
<a name="w2aac24c12b5"></a>

### JSON
<a name="intrinsic-function-reference-base64-syntax.json"></a>

```
{ "Fn::Base64" : valueToEncode }
```

### YAML
<a name="intrinsic-function-reference-base64-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Base64: valueToEncode
```

Syntax für die Kurzform:

```
!Base64 valueToEncode
```

**Anmerkung**  
Wenn Sie die Kurzform verwenden und sofort eine andere Funktion in den `valueToEncode`-Parameter einschließen, verwenden Sie den vollständigen Funktionsnamen für mindestens eine der Funktionen. Die folgende Syntax ist beispielsweise nicht gültig:  

```
!Base64 !Sub string
!Base64 !Ref logical_ID
```
Verwenden Sie stattdessen den vollständigen Funktionsnamen für mindestens eine der Funktionen, wie in den folgenden Beispielen dargestellt:  

```
!Base64
  "Fn::Sub": string

Fn::Base64:
  !Sub string
```

## Parameters
<a name="w2aac24c12b7"></a>

valueToEncode  
Der Zeichenfolgenwert, die Sie in Base64 umwandeln möchten.

## Rückgabewert
<a name="w2aac24c12b9"></a>

Die ursprüngliche Zeichenfolge in Base64-Darstellung.

## Beispiele
<a name="w2aac24c12c11"></a>

### JSON
<a name="intrinsic-function-reference-base64-example.json"></a>

```
{ "Fn::Base64" : "AWS CloudFormation" }
```

### YAML
<a name="intrinsic-function-reference-base64-example.yaml"></a>

```
Fn::Base64: AWS CloudFormation
```

## Unterstützte Funktionen
<a name="w2aac24c12c13"></a>

Sie können eine beliebige Funktion verwenden, die eine Zeichenfolge innerhalb der `Fn::Base64`-Funktion zurückgibt.

# `Fn::Cidr`
<a name="intrinsic-function-reference-cidr"></a>

Die intrinsische Funktion `Fn::Cidr` gibt ein Array von CIDR-Adressblöcken zurück. Die Anzahl der zurückgegebenen CIDR-Blöcke ist abhängig vom Parameter `count`.

## Deklaration
<a name="intrinsic-function-reference-cidr-declaration"></a>

### JSON
<a name="intrinsic-function-reference-cidr-syntax.json"></a>

```
{ "Fn::Cidr" : [ipBlock, count, cidrBits]}
```

### YAML
<a name="intrinsic-function-reference-cidr-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Cidr: 
  - ipBlock
  - count
  - cidrBits
```

Syntax für die Kurzform:

```
!Cidr [ ipBlock, count, cidrBits ]
```

## Parameters
<a name="intrinsic-function-reference-cidr-parameters"></a>

ipBlock  <a name="ipBlock"></a>
Der benutzerdefinierte CIDR-Adressblock, der in kleinere CIDR-Blöcke aufgeteilt werden soll.

count  <a name="count"></a>
Die Anzahl der CIDRs zu generierenden. Der gültige Bereich liegt zwischen 1 und 256.

cidrBits  <a name="cidrBits"></a>
Die Anzahl der Subnetzbits für den CIDR. Wenn Sie beispielsweise einen Wert "8" für diesen Parameter angeben, wird ein CIDR mit der Maske "/24" erstellt.  
Subnetz-Bits ist der invertierte Wert der Subnetzmaske. Um die erforderlichen Hostbits für ein bestimmtes Subnetzbit zu berechnen, subtrahieren Sie die Subnetzbits von 32 für IPv4 oder 128 für. IPv6

## Rückgabewert
<a name="intrinsic-function-reference-cidr-return-values"></a>

Ein Array von CIDR-Adressblöcken.

## Beispiel
<a name="intrinsic-function-reference-cidr-examples"></a>

### Grundlegende Verwendung
<a name="intrinsic-function-reference-cidr-example1"></a>

In diesem Beispiel werden 6 CIDRs mit der Subnetzmaske „/27" innerhalb eines CIDRs mit der Maske „/24" erstellt.

#### JSON
<a name="intrinsic-function-reference-cidr-example1.json"></a>

```
{ "Fn::Cidr" : [ "192.168.0.0/24", "6", "5"] }
```

#### YAML
<a name="intrinsic-function-reference-cidr-example1.yaml"></a>

```
!Cidr [ "192.168.0.0/24", 6, 5 ]
```

### Eine IPv6 aktivierte VPC erstellen
<a name="intrinsic-function-reference-cidr-example2"></a>

Diese Beispielvorlage erstellt ein IPv6 aktiviertes Subnetz.

#### JSON
<a name="intrinsic-function-reference-cidr-example2.json"></a>

```
{
    "Resources": {
        "ExampleVpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16"
            }
        },
        "IPv6CidrBlock": {
            "Type": "AWS::EC2::VPCCidrBlock",
            "Properties": {
                "AmazonProvidedIpv6CidrBlock": true,
                "VpcId": {
                    "Ref": "ExampleVpc"
                }
            }
        },
        "ExampleSubnet": {
            "Type": "AWS::EC2::Subnet",
            "DependsOn": "IPv6CidrBlock",
            "Properties": {
                "AssignIpv6AddressOnCreation": true,
                "CidrBlock": {
                    "Fn::Select": [
                        0,
                        {
                            "Fn::Cidr": [
                                {
                                    "Fn::GetAtt": [
                                        "ExampleVpc",
                                        "CidrBlock"
                                    ]
                                },
                                1,
                                8
                            ]
                        }
                    ]
                },
                "Ipv6CidrBlock": {
                    "Fn::Select": [
                        0,
                        {
                            "Fn::Cidr": [
                                {
                                    "Fn::Select": [
                                        0,
                                        {
                                            "Fn::GetAtt": [
                                                "ExampleVpc",
                                                "Ipv6CidrBlocks"
                                            ]
                                        }
                                    ]
                                },
                                1,
                                64
                            ]
                        }
                    ]
                },
                "VpcId": {
                    "Ref": "ExampleVpc"
                }
            }
        }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-cidr-example2.yaml"></a>

```
Resources:
  ExampleVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  IPv6CidrBlock:
    Type: AWS::EC2::VPCCidrBlock
    Properties:
      AmazonProvidedIpv6CidrBlock: true
      VpcId: !Ref ExampleVpc
  ExampleSubnet:
    Type: AWS::EC2::Subnet
    DependsOn: IPv6CidrBlock
    Properties:
      AssignIpv6AddressOnCreation: true
      CidrBlock: !Select
        - 0
        - !Cidr
          - !GetAtt ExampleVpc.CidrBlock
          - 1
          - 8
      Ipv6CidrBlock: !Select
        - 0
        - !Cidr
          - !Select
            - 0
            - !GetAtt ExampleVpc.Ipv6CidrBlocks
          - 1
          - 64
      VpcId: !Ref ExampleVpc
```

## Unterstützte Funktionen
<a name="intrinsic-function-reference-cidr-functions"></a>

Sie können die folgenden Funktionen in einer `Fn::Cidr`-Funktion verwenden:
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

# Bedingungsfunktionen
<a name="intrinsic-function-reference-conditions"></a>

Sie können intrinsische Funktionen wie `Fn::If` oder `Fn::Equals`verwenden, 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) 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.

**Topics**
+ [`Fn::And`](#intrinsic-function-reference-conditions-and)
+ [`Fn::Equals`](#intrinsic-function-reference-conditions-equals)
+ [`Fn::If`](#intrinsic-function-reference-conditions-if)
+ [`Fn::Not`](#intrinsic-function-reference-conditions-not)
+ [`Fn::Or`](#intrinsic-function-reference-conditions-or)
+ [Unterstützte Funktionen](#w2aac24c20c25)
+ [Beispielvorlage](#conditions-sample-templates)

## `Fn::And`
<a name="intrinsic-function-reference-conditions-and"></a>

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
<a name="intrinsic-function-reference-conditions-and-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-and-syntax.json"></a>

```
"Fn::And": [{condition}, {...}]
```

#### YAML
<a name="intrinsic-function-reference-conditions-and-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::And: [condition]
```

Syntax für die Kurzform:

```
!And [condition]
```

### Parameters
<a name="w2aac24c20c13b7"></a>

condition  <a name="fn-and-condition"></a>
Eine Bedingung, die den Wert `true` oder `false` ergibt.

### `Fn::And` Verwendungsbeispiele
<a name="w2aac24c20c13b9"></a>

Die folgende `MyAndCondition` ergibt „true“, wenn der referenzierte Sicherheitsgruppenname `sg-mysggroup` entspricht und wenn `SomeOtherCondition` „true“ ergibt:

#### JSON
<a name="intrinsic-function-reference-conditions-and-example.json"></a>

```
"MyAndCondition": {
   "Fn::And": [
      {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]},
      {"Condition": "SomeOtherCondition"}
   ]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-and-example.yaml"></a>

```
MyAndCondition: !And
  - !Equals ["sg-mysggroup", !Ref ASecurityGroup]
  - !Condition SomeOtherCondition
```

## `Fn::Equals`
<a name="intrinsic-function-reference-conditions-equals"></a>

Vergleicht, ob zwei Werte gleich sind. Gibt `true` zurück, wenn die beiden Werte identisch sind, oder `false`, wenn sie nicht identisch nicht.

### Deklaration
<a name="intrinsic-function-reference-conditions-equals-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-equals-syntax.json"></a>

```
"Fn::Equals" : ["value_1", "value_2"]
```

#### YAML
<a name="intrinsic-function-reference-conditions-equals-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Equals: [value_1, value_2]
```

Syntax für die Kurzform:

```
!Equals [value_1, value_2]
```

### Parameters
<a name="w2aac24c20c15b7"></a>

value  
Ein String-Wert, den Sie vergleichen möchten.

### `Fn::Equals` Verwendungsbeispiele
<a name="w2aac24c20c15b9"></a>

Die folgende `IsProduction`-Bedingung ergibt „true“, wenn der Wert für den `EnvironmentType`-Parameter `prod` entspricht:

#### JSON
<a name="intrinsic-function-reference-conditions-equals-example.json"></a>

```
"IsProduction" : {
   "Fn::Equals": [
      {"Ref": "EnvironmentType"},
      "prod"
   ]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-equals-example.yaml"></a>

```
IsProduction:
  !Equals [!Ref EnvironmentType, prod]
```

## `Fn::If`
<a name="intrinsic-function-reference-conditions-if"></a>

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
<a name="intrinsic-function-reference-conditions-if-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-if-syntax.json"></a>

```
"Fn::If": [condition_name, value_if_true, value_if_false]
```

#### YAML
<a name="intrinsic-function-reference-conditions-if-syntax.yaml"></a>

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
<a name="w2aac24c20c19b7"></a>

condition\$1name  <a name="condition_name"></a>
Ein Verweis auf eine Bedingung im Abschnitt „Conditions“. Verwenden Sie den Namen der Bedingung, um darauf zu verweisen.

value\$1if\$1true  <a name="value_if_true"></a>
Ein Wert, der zurückgegeben werden soll, wenn die angegebene Bedingung true ergibt.

value\$1if\$1false  <a name="value_if_false"></a>
Ein Wert, der zurückgegeben werden soll, wenn die angegebene Bedingung `false` ergibt.

### `Fn::If` Verwendungsbeispiele
<a name="w2aac24c20c19b9"></a>

**Topics**
+ [Bedingte Auswahl einer Ressource](#w2aac24c20c19b9b5)
+ [Bedingte Ausgaben](#w2aac24c20c19b9b7)
+ [Bedingte Array-Werte](#w2aac24c20c19b9b9)
+ [Bedingte Eigenschaften und Eigenschaftswerte](#w2aac24c20c19b9c11)
+ [Richtlinien für bedingte Aktualisierungen](#w2aac24c20c19b9c13)

#### Bedingte Auswahl einer Ressource
<a name="w2aac24c20c19b9b5"></a>

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
<a name="intrinsic-function-reference-conditions-if-example1.json"></a>

```
"Resources": {
  "EC2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
      "ImageId": "ami-0abcdef1234567890",
      "InstanceType": "t3.micro",
      "SecurityGroupIds": {
        "Fn::If": [
          "CreateNewSecurityGroup",
          [{"Ref": "NewSecurityGroup"}],
          [{"Ref": "ExistingSecurityGroupId"}]
        ]
      }]
    }
  }
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example1.yaml"></a>

```
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0abcdef1234567890
      InstanceType: t3.micro
      SecurityGroupIds: !If
        - CreateNewSecurityGroup
        - [!Ref NewSecurityGroup]
        - [!Ref ExistingSecurityGroupId]
```

#### Bedingte Ausgaben
<a name="w2aac24c20c19b9b7"></a>

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
<a name="intrinsic-function-reference-conditions-if-example2.json"></a>

```
"Outputs" : {
  "SecurityGroupId" : {
    "Description" : "Group ID of the security group used.",
    "Value" : {
      "Fn::If" : [
        "CreateNewSecurityGroup",
        {"Ref" : "NewSecurityGroup"},
        {"Ref" : "ExistingSecurityGroupId"}
      ]
    }
  }
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example2.yaml"></a>

```
Outputs:
  SecurityGroupId: 
    Description: Group ID of the security group used.
    Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroupId]
```

#### Bedingte Array-Werte
<a name="w2aac24c20c19b9b9"></a>

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
<a name="intrinsic-function-reference-conditions-if-example-arrays.json"></a>

```
"Subnets": {
  "Fn::If": [
    "MoreThan2AZs",
    [
      {"Fn::ImportValue": "PublicSubnet01"},
      {"Fn::ImportValue": "PublicSubnet02"},
      {"Fn::ImportValue": "PublicSubnet03"}
    ],
    [
      {"Fn::ImportValue": "PublicSubnet01"},
      {"Fn::ImportValue": "PublicSubnet02"}
    ]
  ]
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example-arrays.yaml"></a>

```
Subnets:
  Fn::If:
    - MoreThan2AZs
    - - Fn::ImportValue: PublicSubnet01
      - Fn::ImportValue: PublicSubnet02
      - Fn::ImportValue: PublicSubnet03
    - - Fn::ImportValue: PublicSubnet01
      - Fn::ImportValue: PublicSubnet02
```

#### Bedingte Eigenschaften und Eigenschaftswerte
<a name="w2aac24c20c19b9c11"></a>

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 `100`gesetzt. Andernfalls wird er auf `20`gesetzt.

##### JSON
<a name="intrinsic-function-reference-conditions-if-example3.json"></a>

```
"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
<a name="intrinsic-function-reference-conditions-if-example3.yaml"></a>

```
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
<a name="w2aac24c20c19b9c13"></a>

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
<a name="intrinsic-function-reference-conditions-if-example4.json"></a>

```
"UpdatePolicy": {
  "Fn::If": [
    "RollingUpdates",
    {
      "AutoScalingRollingUpdate": {
        "MaxBatchSize": 2,
        "MinInstancesInService": 2,
        "PauseTime": "PT0M30S"
      }
    },
    {
      "Ref": "AWS::NoValue"
    }
  ]
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example4.yaml"></a>

```
UpdatePolicy: !If
  - RollingUpdates
  - AutoScalingRollingUpdate:
      MaxBatchSize: 2
      MinInstancesInService: 2
      PauseTime: PT0M30S
  - !Ref "AWS::NoValue"
```

## `Fn::Not`
<a name="intrinsic-function-reference-conditions-not"></a>

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
<a name="intrinsic-function-reference-conditions-not-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-not-syntax.json"></a>

```
"Fn::Not": [{condition}]
```

#### YAML
<a name="intrinsic-function-reference-conditions-not-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Not: [condition]
```

Syntax für die Kurzform:

```
!Not [condition]
```

### Parameters
<a name="w2aac24c20c21b7"></a>

condition  <a name="condition"></a>
Eine Bedingung wie z. B. `Fn::Equals`, die `true` oder `false` ergibt.

### `Fn::Not` Verwendungsbeispiele
<a name="w2aac24c20c21b9"></a>

Die folgende `EnvCondition`-Bedingung ergibt „true“, wenn der Wert für den `EnvironmentType`-Parameter nicht `prod` entspricht:

#### JSON
<a name="intrinsic-function-reference-conditions-not-example.json"></a>

```
"MyNotCondition" : {
   "Fn::Not" : [{
      "Fn::Equals" : [
         {"Ref" : "EnvironmentType"},
         "prod"
      ]
   }]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-not-example.yaml"></a>

```
MyNotCondition:
  !Not [!Equals [!Ref EnvironmentType, prod]]
```

## `Fn::Or`
<a name="intrinsic-function-reference-conditions-or"></a>

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
<a name="intrinsic-function-reference-conditions-or-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-or-syntax.json"></a>

```
"Fn::Or": [{condition}, {...}]
```

#### YAML
<a name="intrinsic-function-reference-conditions-or-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Or: [condition, ...]
```

Syntax für die Kurzform:

```
!Or [condition, ...]
```

### Parameters
<a name="w2aac24c20c23b7"></a>

condition  
Eine Bedingung, die den Wert `true` oder `false` ergibt.

### `Fn::Or` Verwendungsbeispiele
<a name="w2aac24c20c23b9"></a>

Die folgende `MyOrCondition` ergibt „true“, wenn der referenzierte Sicherheitsgruppenname `sg-mysggroup` entspricht oder wenn `SomeOtherCondition` „true“ ergibt:

#### JSON
<a name="intrinsic-function-reference-conditions-or-example.json"></a>

```
"MyOrCondition" : {
   "Fn::Or" : [
      {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
      {"Condition" : "SomeOtherCondition"}
   ]
}
```

#### YAML
<a name="intrinsic-function-reference-conditions-or-example.yaml"></a>

```
MyOrCondition:
  !Or [!Equals [sg-mysggroup, !Ref ASecurityGroup], Condition: SomeOtherCondition]
```

## Unterstützte Funktionen
<a name="w2aac24c20c25"></a>

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
<a name="conditions-sample-templates"></a>

### Bedingtes Erstellen von Ressourcen für einen Produktions-, Entwicklungs- oder Test-Stack
<a name="w2aac24c20c27b3"></a>

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 `dev`ist.

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.

**Example 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" ]}
      }
    }
  }
}
```

**Example 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](aws-attribute-condition.md) .

# `Fn::FindInMap`
<a name="intrinsic-function-reference-findinmap"></a>

Die intrinsische `Fn::FindInMap`-Funktion gibt die Werte von Schlüsseln in einer Zwei-Ebenen-Map zurück, die im Abschnitt `Mappings` deklariert ist.

## Deklaration
<a name="w2aac24c25b5"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-syntax.json"></a>

```
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
```

### YAML
<a name="intrinsic-function-reference-findinmap-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]
```

Syntax für die Kurzform:

```
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
```

**Anmerkung**  
Zwei Instances von zwei Funktionen dürfen nicht im Kurzformat geschachtelt werden.

## Parameters
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
Gibt den logischen Namen einer im Abschnitt "Mappings" deklarierten Zuweisung an, die die Schlüssel und Werte enthält.

TopLevelKey  <a name="TopLevelKey"></a>
Gibt den Namen des Schlüssels der obersten Ebene an. Sein Wert ist eine Auflistung von Schlüssel-Wert-Paaren.

SecondLevelKey  <a name="SecondLevelKey"></a>
Gibt den Namen des Schlüssels der zweiten Ebene an. Dabei handelt es sich um einen der Schlüssel aus der dem Parameter `TopLevelKey` zugewiesenen Liste.

## Rückgabewert
<a name="w2aac24c25b9"></a>

Zurückgegeben wird der Wert, der dem `SecondLevelKey`-Parameter zugewiesen ist.

## Beispiele
<a name="intrinsic-function-reference-findinmap-examples"></a>

Das folgende Beispiele zeigt, wie die `Fn::FindInMap`-Funktion verwendet wird.

**Topics**
+ [Verwenden Sie Fn::FindInMap mit regionalspezifischen Werten](#intrinsic-function-reference-findinmap-region-example)
+ [Verwenden Sie Fn::FindInMap für umgebungsspezifische Konfigurationen](#intrinsic-function-reference-findinmap-environment-example)

### Verwenden Sie Fn::FindInMap mit regionalspezifischen Werten
<a name="intrinsic-function-reference-findinmap-region-example"></a>

Das folgende Beispiel zeigt, wie Sie `Fn::FindInMap` in einer Vorlage verwenden, die zwei Mappings enthält: `AWSInstanceType2Arch` und `AWSRegionArch2AMI`. Es enthält auch einen Parameter `InstanceType`, mit dem Sie zwischen `t3.micro` und `t4g.nano`wählen können. Die Vorgabe ist,`t3.micro` aber das kann bei der Stack-Erstellung überschrieben werden. 

`Fn::FindInMap` bestimmt zunächst die Architektur (`HVM64` oder `ARM64`) anhand des ausgewählten Instancetyps und sucht dann die richtige AMI-ID für diese Architektur im aktuellen AWS-Region. 

**Anmerkung**  
Die in diesen Beispielen IDs gezeigten AMI sind Platzhalter zu Demonstrationszwecken. Wann immer möglich, sollten Sie dynamische Verweise auf AWS Systems Manager -Parameter als Alternative zum `Mappings`-Abschnitt verwenden. Um zu vermeiden, dass alle Ihre Vorlagen bei jeder Änderung des AMI, das Sie verwenden möchten, mit einer neuen ID aktualisiert werden, verwenden Sie einen AWS Systems Manager Parameter, um die neueste AMI-ID abzurufen, wenn der Stack erstellt oder aktualisiert wird. Die neuesten Versionen von Common Used AMIs sind auch als öffentliche Parameter in Systems Manager verfügbar. Weitere Informationen finden Sie unter [Abrufen von in anderen Diensten gespeicherten Werten unter Verwendung dynamischer Referenzen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html). 

#### JSON
<a name="intrinsic-function-reference-findinmap-region-example.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "InstanceType": {
      "Description": "The EC2 instance type",
      "Type": "String",
      "AllowedValues": [
        "t3.micro",
        "t4g.nano"
      ],
      "Default": "t3.micro"
    }
  },
  "Mappings": {
    "AWSInstanceType2Arch": {
      "t3.micro": {
        "Arch": "HVM64"
      },
      "t4g.nano": {
        "Arch": "ARM64"
      }
    },
    "AWSRegionArch2AMI": {
      "us-east-1" : { 
        "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" 
      },
      "us-west-1" : { 
        "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890"
      },
      "eu-west-1" : { 
        "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" 
      },
      "ap-southeast-1" : { 
        "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" 
      },
      "ap-northeast-1" : { 
        "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" 
      }
    }
  },
  "Resources" : {
    "MyEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "InstanceType" : { "Ref": "InstanceType" },
        "ImageId" : {
          "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-region-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  InstanceType:
    Description: The EC2 instance type
    Type: String
    AllowedValues:
      - t3.micro
      - t4g.nano
    Default: t3.micro
Mappings: 
  AWSInstanceType2Arch:
    t3.micro:
      Arch: HVM64
    t4g.nano:
      Arch: ARM64
  AWSRegionArch2AMI:
    us-east-1: 
      HVM64: ami-12345678901234567
      ARM64: ami-23456789012345678
    us-west-1: 
      HVM64: ami-34567890123456789
      ARM64: ami-45678901234567890
    eu-west-1: 
      HVM64: ami-56789012345678901
      ARM64: ami-67890123456789012
    ap-southeast-1: 
      HVM64: ami-78901234567890123
      ARM64: ami-89012345678901234
    ap-northeast-1: 
      HVM64: ami-90123456789012345
      ARM64: ami-01234567890123456
Resources: 
  myEC2Instance: 
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      ImageId:
        Fn::FindInMap:
        - AWSRegionArch2AMI
        - Ref: AWS::Region
        - Fn::FindInMap:
          - AWSInstanceType2Arch
          - Ref: InstanceType
          - Arch
```

### Verwenden Sie Fn::FindInMap für umgebungsspezifische Konfigurationen
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

Das folgende Beispiel zeigt, wie Sie `Fn::FindInMap` für eine Vorlage mit einem Abschnitt `Mappings` verwenden, der eine einzelne Karte `SecurityGroups`enthält. Sie enthält auch einen Parameter `EnvironmentType`, mit dem Sie angeben können, ob die Umgebung `Dev` oder `Prod`ist. Der Standardwert ist `Dev`, kann aber bei der Stack-Erstellung überschrieben werden.

`Fn::FindInMap`gibt auf der `SecurityGroupIds` Grundlage des `EnvironmentType` Parameters den entsprechenden Wert zurück. `Fn::Split`teilt dann die durch Kommas getrennte Zeichenfolge der Sicherheitsgruppe IDs in eine Liste auf, was das erwartete Format für ist. [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids)

Wenn Sie diesen Stack mit `EnvironmentType` auf `Dev`einstellen, wird `SecurityGroupIds` für `EC2Instance` zu `sg-12345678`. Wenn Sie `EnvironmentType` auf `Prod`setzen, werden `sg-abcdef01` und `sg-ghijkl23`verwendet.

#### JSON
<a name="intrinsic-function-reference-findinmap-environment-example.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters":{
    "EnvironmentType":{
      "Description":"The environment type (Dev or Prod)",
      "Type":"String",
      "Default":"Dev",
      "AllowedValues":[
        "Dev",
        "Prod"
      ]
    }
  },
  "Mappings":{
    "SecurityGroups":{
      "Dev":{
        "SecurityGroupIds":"sg-12345678"
      },
      "Prod":{
        "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23"
      }
    }
  },
  "Resources":{
    "Ec2Instance":{
      "Type":"AWS::EC2::Instance",
      "Properties":{
        "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
        "InstanceType": "t2.micro",
        "SecurityGroupIds":{
          "Fn::Split":[
            ",",
            {
              "Fn::FindInMap":[
                "SecurityGroups",
                {
                  "Ref":"EnvironmentType"
                },
                "SecurityGroupIds"
              ]
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-environment-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvironmentType:
    Description: The environment type (Dev or Prod)
    Type: String
    Default: Dev
    AllowedValues:
      - Dev
      - Prod
Mappings:
  SecurityGroups:
    Dev:
      SecurityGroupIds: sg-12345678
    Prod:
      SecurityGroupIds: sg-abcdef01,sg-ghijkl23
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
      InstanceType: t2.micro
      SecurityGroupIds:
        Fn::Split:
          - ","
          - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]
```

## Unterstützte Funktionen
<a name="w2aac24c25c13"></a>

Sie können die folgenden Funktionen in einer `Fn::FindInMap`-Funktion verwenden:
+ `Fn::FindInMap`
+ `Ref`

## Zugehörige Ressourcen
<a name="w2aac24c25c15"></a>

Um andere intrinsische Funktionen oder einen Standardwert in einer `Fn::FindInMap`-Funktion zu verwenden, müssen Sie die `AWS::LanguageExtensions`-Transformation in Ihrer Vorlage deklarieren. Weitere Informationen finden Sie unter [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md).

Diese verwandten Themen können hilfreich sein, wenn Sie Vorlagen entwickeln, die die Funktion `Fn::FindInMap` verwenden.
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [CloudFormationMappingsVorlagensyntax](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html) *im Benutzerhandbuch AWS CloudFormation *

# `Fn::ForEach`
<a name="intrinsic-function-reference-foreach"></a>

Die intrinsische Funktion `Fn::ForEach` nimmt eine Sammlung und ein Fragment und wendet die Elemente in der Sammlung auf den Bezeichner im angegebenen Fragment an. `Fn::ForEach` kann andere intrinsische Funktionen enthalten, einschließlich `Fn::ForEach` selbst, und innerhalb der Abschnitte,`Conditions` `Outputs`und `Resources` (einschließlich der Ressourceneigenschaften) verwendet werden. Es kann in keinem der folgenden Abschnitte verwendet werden:,`AWSTemplateFormatVersion`,`Description`,`Metadata`,`Transform`,`Parameters`,`Mappings` `Rules`oder `Hooks` Abschnitte.

Wenn Sie die intrinsische Funktion `Fn::ForEach` in Ihrer Vorlage verwenden, müssen Sie auch die Funktion [`AWS::LanguageExtensions`-Transformation](transform-aws-languageextensions.md) verwenden.

Die Verwendung der intrinsischen Funktion `Fn::ForEach` hat keine Auswirkungen auf die geltenden Kontingente für die resultierende Vorlage. Kontingente beinhalten die maximale Größe einer Vorlage und die maximale Anzahl von Ressourcen in einer Vorlage. Weitere Informationen finden Sie im *AWS CloudFormation Benutzerhandbuch* unter [CloudFormation Grundlegendes zu Kontingenten](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html).

## Deklaration
<a name="intrinsic-function-reference-foreach-declaration"></a>

### JSON
<a name="intrinsic-function-reference-foreach-declaration.json"></a>

```
"Fn::ForEach::LoopLogicalName": [
  "Identifier",
  ["Value1","Value2"], // Collection
  {"OutputKey": {OutputValue}}
]
```

### YAML
<a name="intrinsic-function-reference-foreach-declaration.yaml"></a>

```
'Fn::ForEach::LoopLogicalName':
    - Identifier
    - - Value1 # Collection
      - Value2
    - 'OutputKey':
        OutputValue
```

## Parameters
<a name="intrinsic-function-reference-foreach-parameters"></a>

*Logischer Name der Schleife*  
Eine logische ID für die Schleife. Der Name muss innerhalb der Vorlage eindeutig sein und darf nicht mit den logischen ID-Werten im Abschnitt `Resources` der Vorlage kollidieren. Dieser Name ist nicht in der transformierten Ausgabe enthalten. Es wird als interne Referenz in der CloudFormation Vorlage selbst verwendet.

*Kennung*  
Ein Bezeichner für den Platzhalter, der in den Parametern `OutputKey` und `OutputValue` ersetzt wird. Alle Instances von `${Identifier}` oder `&{Identifier}` in den Parametern `OutputKey` und `OutputValue` werden durch die Werte des Parameters `Collection` ersetzt.

*Sammlung*  
Die Sammlung von Werten, über die iteriert werden soll. Dies kann ein Array in diesem Parameter sein oder ein [`Ref`](intrinsic-function-reference-ref.md) zu einem `CommaDelimitedList`. Wenn Sie `&{Identifier}`verwenden, können Sie in `Collection`auch nicht-alphanumerische Zeichen eingeben.

*Ausgabe-Taste*  
Der Schlüssel in der transformierten Vorlage. `${Identifier}` oder `&{Identifier}` muss im Parameter `OutputKey` enthalten sein. Wenn zum Beispiel `Fn::ForEach` im Abschnitt `Resources` der Vorlage verwendet wird, ist dies die logische ID jeder Ressource.  
Die `&{}`-Syntax erlaubt die Verwendung von nicht-alphanumerischen Zeichen im `Collection`-Parameter für den `OutputKey`-Parameter. Ein Beispiel hierfür finden Sie unter [Übergabe von nicht-alphanumerischen Zeichen innerhalb der `Collection` für `Fn::ForEach`](intrinsic-function-reference-foreach-example-resource.md#intrinsic-function-reference-foreach-example-non-alphanumeric).

*Ausgabewert*  
Der Wert, der in der transformierten Vorlage für jedes Element im Parameter `Collection` repliziert wird. Wenn zum Beispiel `Fn::ForEach` im Abschnitt `Resources` der Vorlage verwendet wird, ist dies das Vorlagenfragment, das zur Konfiguration jeder Ressource wiederholt wird.

## Rückgabewert
<a name="intrinsic-function-reference-foreach-return-value"></a>

Ein erweitertes Objekt, das das Objektfragment enthält, das für jedes Element in der Sammlung einmal wiederholt wird, wobei die Kennung im Fragment durch das Element aus der Sammlung ersetzt wird.

## Unterstützte Funktionen
<a name="intrinsic-function-reference-foreach-nested-functions"></a>

Sie können die folgenden Funktionen in `Fn::ForEach` verwenden.
+ Bedingungsfunktionen:
  + [`Fn::And`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-and)
  + [`Fn::Equals`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-equals)
  + [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
  + [`Fn::Not`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-not)
  + [`Fn::Or`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-or)
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

## Beispiele
<a name="intrinsic-function-reference-foreach-example-pointer"></a>

Beispiele für die Abschnitte,`Conditions` `Outputs`und `Resources` finden Sie in [Beispiele](intrinsic-function-reference-foreach-examples.md).

# Beispiele
<a name="intrinsic-function-reference-foreach-examples"></a>

**Topics**
+ [Beispiele für `Fn::ForEach` im Abschnitt „`Resources`“](intrinsic-function-reference-foreach-example-resource.md)
+ [Beispiele für `Fn::ForEach` im Abschnitt „`Outputs`“](intrinsic-function-reference-foreach-example-outputs.md)
+ [Beispiele für `Fn::ForEach` im Abschnitt „`Conditions`“](intrinsic-function-reference-foreach-example-conditions.md)

# Beispiele für `Fn::ForEach` im Abschnitt „`Resources`“
<a name="intrinsic-function-reference-foreach-example-resource"></a>

Diese Beispiele demonstrieren die Verwendung der intrinsischen Funktion `Fn::ForEach` im Abschnitt „`Resources`“. Weitere Informationen zu diesem Abschnitt finden Sie unter [Ressourcen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html) im *AWS CloudFormation -Benutzerhandbuch*.

**Topics**
+ [Replizieren einer Amazon-SNS-Ressource](#intrinsic-function-reference-foreach-example-replicate-resource)
+ [Replizieren einer Amazon-DynamoDB-Ressource](#intrinsic-function-reference-foreach-example-replicate-ddb-resource)
+ [Replizieren mehrerer Ressourcen](#intrinsic-function-reference-foreach-example-replicate-multiple-resources)
+ [Replizieren mehrerer Ressourcen mithilfe verschachtelter `Fn::ForEach`-Schleifen](#intrinsic-function-reference-foreach-example-nested-loop-resources)
+ [Verweisen auf replizierte Eigenschaften für eine Amazon-EC2-Ressource](#intrinsic-function-reference-foreach-example-reference-replicated-resource)
+ [Replizieren von Eigenschaften für eine Amazon-EC2-Ressource](#intrinsic-function-reference-foreach-example-replicate-resource-properties)
+ [Übergabe von nicht-alphanumerischen Zeichen innerhalb der `Collection` für `Fn::ForEach`](#intrinsic-function-reference-foreach-example-non-alphanumeric)

## Replizieren einer Amazon-SNS-Ressource
<a name="intrinsic-function-reference-foreach-example-replicate-resource"></a>

In diesem Beispielausschnitt wird eine Liste mit vier Amazon-SNS-Themen zurückgegeben. Dabei entspricht die logische ID den Elementen in der Sammlung (`Success`, `Failure`, `Timeout`, `Unknown`), mit einem passenden `TopicName` und `FifoTopic` ist auf `true` gesetzt.

**Anmerkung**  
Für Vorlagen, die sowohl mit FIFO- als auch mit Standardthemen arbeiten müssen, können Sie die Eigenschaft `DisplayName` anstelle von `TopicName`verwenden. Auf diese Weise können CloudFormation Themennamen automatisch mit dem entsprechenden `.fifo` Suffix generiert werden, wenn dies der Fall `FifoTopic` ist`true`. Ersetzen Sie einfach `TopicName` durch `DisplayName: !Ref TopicName` im Abschnitt `Properties` .

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-resource.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Resources": {
        "Fn::ForEach::Topics": [
            "TopicName",
            ["Success", "Failure", "Timeout", "Unknown"],
            {
                "SnsTopic${TopicName}": {
                    "Type": "AWS::SNS::Topic",
                    "Properties": {
                        "TopicName": {"Fn::Sub": "${TopicName}.fifo"},
                        "FifoTopic": true
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Topics':
    - TopicName
    - [Success, Failure, Timeout, Unknown]
    - 'SnsTopic${TopicName}':
        Type: AWS::SNS::Topic
        Properties:
          TopicName: !Sub '${TopicName}.fifo'
          FifoTopic: true
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  SnsTopicSuccess:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Success.fifo
      FifoTopic: true
  SnsTopicFailure:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Failure.fifo
      FifoTopic: true
  SnsTopicTimeout:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Timeout.fifo
      FifoTopic: true
  SnsTopicUnknown:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Unknown.fifo
      FifoTopic: true
```

## Replizieren einer Amazon-DynamoDB-Ressource
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource"></a>

In diesem Beispielausschnitt werden vier [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html)-Ressourcen mit Namen wie `Points`, `Score` usw. erstellt.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Resources": {
        "Fn::ForEach::Tables": [
            "TableName",
            ["Points", "Score", "Name", "Leaderboard"],
            {
                "DynamoDB${TableName}": {
                    "Type": "AWS::DynamoDB::Table",
                    "Properties": {
                        "TableName": {
                            "Ref": "TableName"
                        },
                        "AttributeDefinitions": [
                            {
                                "AttributeName": "id",
                                "AttributeType": "S"
                            }
                        ],
                        "KeySchema": [
                            {
                                "AttributeName": "id",
                                "KeyType": "HASH"
                            }
                        ],
                        "ProvisionedThroughput": {
                            "ReadCapacityUnits": "5",
                            "WriteCapacityUnits": "5"
                        }
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Tables':
    - TableName
    - [Points, Score, Name, Leaderboard]
    - 'DynamoDB${TableName}':
        Type: AWS::DynamoDB::Table
        Properties:
          TableName: !Ref TableName
          AttributeDefinitions:
            - AttributeName: id
              AttributeType: S
          KeySchema:
            - AttributeName: id
              KeyType: HASH
          ProvisionedThroughput:
            ReadCapacityUnits: '5'
            WriteCapacityUnits: '5'
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  DynamoDBPoints:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Points
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBScore:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Score
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBName:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Name
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBLeaderboard:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Leaderboard
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
```

## Replizieren mehrerer Ressourcen
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources"></a>

In diesem Beispiel werden mehrere Instanzen von [AWS::EC2::NatGateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html)und [AWS: :EC2: :EIP](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-eip.html) unter Verwendung der Namenskonvention von erstellt. `"{ResourceType}${Identifier}"` Sie können mehrere Ressourcentypen in einer `Fn::ForEach`-Schleife deklarieren, um eine einzige Kennung zu nutzen.

Eindeutige Werte für jedes Element in der Sammlung werden im Abschnitt `Mappings` definiert, wo die intrinsische Funktion [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md) verwendet wird, um auf den entsprechenden Wert zu verweisen. Wenn `Fn::FindInMap` den entsprechenden Bezeichner nicht finden kann, wird die Eigenschaft `Condition` nicht gesetzt und zu `!Ref AWS:::NoValue`aufgelöst.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Conditions": {
    "TwoNatGateways": {"Fn::Equals": [{"Ref": "AWS::Region"}, "us-east-1"]},
    "ThreeNatGateways": {"Fn::Equals": [{"Ref": "AWS::Region"}, "us-west-2"]}
  },
  "Mappings": {
    "NatGateway": {
      "Condition": {
        "B": "TwoNatGateways",
        "C": "ThreeNatGateways"
      }
    }
  },
  "Resources": {
    "VPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {"CidrBlock": "10.0.0.0/16"}
    },
    "PublicSubnetA": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.1.0/24",
        "AvailabilityZone": {"Fn::Select": [0, {"Fn::GetAZs": ""}]}
      }
    },
    "PublicSubnetB": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.2.0/24",
        "AvailabilityZone": {"Fn::Select": [1, {"Fn::GetAZs": ""}]}
      }
    },
    "PublicSubnetC": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.3.0/24",
        "AvailabilityZone": {"Fn::Select": [2, {"Fn::GetAZs": ""}]}
      }
    },
    "Fn::ForEach::NatGatewayAndEIP": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "NatGateway${Identifier}": {
          "Type": "AWS::EC2::NatGateway",
          "Properties": {
            "AllocationId": {"Fn::GetAtt": [{"Fn::Sub": "NatGatewayAttachment${Identifier}"}, "AllocationId"]},
            "SubnetId": {"Ref": {"Fn::Sub": "PublicSubnet${Identifier}"}}
          },
          "Condition": {"Fn::FindInMap": ["NatGateway", "Condition", {"Ref": "Identifier"}, {"DefaultValue": {"Ref": "AWS::NoValue"}}]}
        },
        "NatGatewayAttachment${Identifier}": {
          "Type": "AWS::EC2::EIP",
          "Properties": {
            "Domain": "vpc"
          },
          "Condition": {"Fn::FindInMap": ["NatGateway", "Condition", {"Ref": "Identifier"}, {"DefaultValue": {"Ref": "AWS::NoValue"}}]}
        }
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Conditions:
  TwoNatGateways: !Equals [!Ref "AWS::Region", "us-east-1"]
  ThreeNatGateways: !Equals [!Ref "AWS::Region", "us-west-2"]
Mappings:
  NatGateway:
    Condition:
      B: TwoNatGateways
      C: ThreeNatGateways
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs ""]
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
      AvailabilityZone: !Select [2, !GetAZs ""]
  Fn::ForEach::NatGatewayAndEIP:
    - Identifier
    - - A
      - B
      - C
    - NatGateway${Identifier}:
        Type: AWS::EC2::NatGateway
        Properties:
          AllocationId: !GetAtt
            - !Sub NatGatewayAttachment${Identifier}
            - AllocationId
          SubnetId: !Ref
            Fn::Sub: PublicSubnet${Identifier}
        Condition: !FindInMap
          - NatGateway
          - Condition
          - !Ref Identifier
          - DefaultValue: !Ref AWS::NoValue
      NatGatewayAttachment${Identifier}:
        Type: AWS::EC2::EIP
        Properties:
          Domain: vpc
        Condition: !FindInMap
          - NatGateway
          - Condition
          - !Ref Identifier
          - DefaultValue: !Ref AWS::NoValue
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Conditions:
  TwoNatGateways: !Equals [!Ref "AWS::Region", "us-east-1"]
  ThreeNatGateways: !Equals [!Ref "AWS::Region", "us-west-2"]
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs ""]
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
      AvailabilityZone: !Select [2, !GetAZs ""]
  NatGatewayA:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentA
        - AllocationId
      SubnetId: !Ref PublicSubnetA
  NatGatewayB:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentB
        - AllocationId
      SubnetId: !Ref PublicSubnetB
    Condition: TwoNatGateways
  NatGatewayC:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentC
        - AllocationId
      SubnetId: !Ref PublicSubnetC
    Condition: ThreeNatGateways
  NatGatewayAttachmentA:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
  NatGatewayAttachmentB:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Condition: TwoNatGateways
  NatGatewayAttachmentC:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Condition: ThreeNatGateways
```

## Replizieren mehrerer Ressourcen mithilfe verschachtelter `Fn::ForEach`-Schleifen
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources"></a>

In diesem Beispiel werden verschachtelte `Fn::ForEach`-Schleifen verwendet, um drei Ressourcen ([AWS::EC2::NetworkAcl](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html), [AWS::EC2::Subnet](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnet.html) und [AWS::EC2::SubnetNetworkAclAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnetnetworkaclassociation.html)) einander zuzuordnen.

### JSON
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Resources": {
    "VPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsSupport": "true",
        "EnableDnsHostnames": "true"
      }
    },
    "Fn::ForEach::SubnetResources": [
      "Prefix",
      [
        "Transit",
        "Public"
      ],
      {
        "Nacl${Prefix}Subnet": {
          "Type": "AWS::EC2::NetworkAcl",
          "Properties": {
            "VpcId": {
              "Ref": "VPC"
            }
          }
        },
        "Fn::ForEach::LoopInner": [
          "Suffix",
          [
            "A",
            "B",
            "C"
          ],
          {
            "${Prefix}Subnet${Suffix}": {
              "Type": "AWS::EC2::Subnet",
              "Properties": {
                "VpcId": {
                  "Ref": "VPC"
                }
              }
            },
            "Nacl${Prefix}Subnet${Suffix}Association": {
              "Type": "AWS::EC2::SubnetNetworkAclAssociation",
              "Properties": {
                "SubnetId": {
                  "Ref": {
                    "Fn::Sub": "${Prefix}Subnet${Suffix}"
                  }
                },
                "NetworkAclId": {
                  "Ref": {
                    "Fn::Sub": "Nacl${Prefix}Subnet"
                  }
                }
              }
            }
          }
        ]
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  'Fn::ForEach::SubnetResources':
  - Prefix
  - [Transit, Public]
  - 'Nacl${Prefix}Subnet':
      Type: AWS::EC2::NetworkAcl
      Properties:
        VpcId: !Ref 'VPC'
    'Fn::ForEach::LoopInner':
    - Suffix
    - [A, B, C]
    - '${Prefix}Subnet${Suffix}':
        Type: AWS::EC2::Subnet
        Properties:
          VpcId: !Ref 'VPC'
      'Nacl${Prefix}Subnet${Suffix}Association':
        Type: AWS::EC2::SubnetNetworkAclAssociation
        Properties:
          SubnetId: !Ref
            'Fn::Sub': '${Prefix}Subnet${Suffix}'
          NetworkAclId: !Ref
            'Fn::Sub': 'Nacl${Prefix}Subnet'
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  NaclTransitSubnet:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
  TransitSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetAAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetA
      NetworkAclId: !Ref NaclTransitSubnet
  TransitSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetBAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetB
      NetworkAclId: !Ref NaclTransitSubnet
  TransitSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetCAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetC
      NetworkAclId: !Ref NaclTransitSubnet
  NaclPublicSubnet:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetAAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetA
      NetworkAclId: !Ref NaclPublicSubnet
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetBAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetB
      NetworkAclId: !Ref NaclPublicSubnet
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetCAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetC
      NetworkAclId: !Ref NaclPublicSubnet
```

## Verweisen auf replizierte Eigenschaften für eine Amazon-EC2-Ressource
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource"></a>

In diesem Beispiel wird die intrinsische Funktion `Fn::ForEach` verwendet, um auf replizierte [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html)-Ressourcen zu verweisen.

### JSON
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "Instances": {
      "InstanceType": {
        "B": "m5.4xlarge",
        "C": "c5.2xlarge"
      },
      "ImageId": {"A": "ami-id1"}
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "Identifier",
      [
        "A",
        "B",
        "C"
      ],
      {
        "Instance${Identifier}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "InstanceType": {"Fn::FindInMap": ["Instances", "InstanceType", {"Ref": "Identifier"}, {"DefaultValue": "m5.xlarge"}]},
            "ImageId": {"Fn::FindInMap": ["Instances", "ImageId", {"Ref": "Identifier"}, {"DefaultValue": "ami-id-default"}]}
          }
        }
      }
    ]
  },
  "Outputs": {
    "SecondInstanceId": {
      "Description": "Instance Id for InstanceB",
      "Value": {"Ref": "InstanceB"}
    },
    "SecondPrivateIp": {
      "Description": "Private IP for InstanceB",
      "Value": {
        "Fn::GetAtt": [
          "InstanceB",
          "PrivateIp"
        ]
      }
    }
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Instances:
    InstanceType:
      B: m5.4xlarge
      C: c5.2xlarge
    ImageId:
      A: ami-id1
Resources:
  'Fn::ForEach::Instances':
  - Identifier
  - [A, B, C]
  - 'Instance${Identifier}':
      Type: AWS::EC2::Instance
      Properties:
        InstanceType: !FindInMap [Instances, InstanceType, !Ref 'Identifier', {DefaultValue: m5.xlarge}]
        ImageId: !FindInMap [Instances, ImageId, !Ref 'Identifier', {DefaultValue: ami-id-default}]
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref 'InstanceB'
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.xlarge
      ImageId: ami-id1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.4xlarge
      ImageId: ami-id-default
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: c5.2xlarge
      ImageId: ami-id-default
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

## Replizieren von Eigenschaften für eine Amazon-EC2-Ressource
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties"></a>

In diesem Beispiel wird die intrinsische Funktion `Fn::ForEach` verwendet, um Eigenschaften wie `ImageId`, `InstanceType` und `AvailabilityZone` für eine [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html)-Ressource zu wiederholen.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "InstanceA": {
      "Properties": {
        "ImageId": "ami-id1",
        "InstanceType": "m5.xlarge"
      }
    },
    "InstanceB": {
      "Properties": {
        "ImageId": "ami-id2"
      }
    },
    "InstanceC": {
      "Properties": {
        "ImageId": "ami-id3",
        "InstanceType": "m5.2xlarge",
        "AvailabilityZone": "us-east-1a"
      }
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "InstanceLogicalId",
      [ "InstanceA", "InstanceB", "InstanceC" ],
      {
        "${InstanceLogicalId}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "DisableApiTermination": true,
            "UserData": {
              "Fn::Base64": {
                "Fn::Join": [
                  "",
                  [
                    "#!/bin/bash\n",
                    "yum update -y\n",
                    "yum install -y httpd.x86_64\n",
                    "systemctl start httpd.service\n",
                    "systemctl enable httpd.service\n",
                    "echo \"Hello World from $(hostname -f)\" > /var/www/html/index.html\n"
                  ]
                ]
              }
            },
            "Fn::ForEach::Properties": [
              "PropertyName",
              [ "ImageId", "InstanceType", "AvailabilityZone" ],
              {
                "${PropertyName}": {
                  "Fn::FindInMap": [
                    { "Ref": "InstanceLogicalId" },
                    "Properties",
                    { "Ref": "PropertyName"},
                    {
                      "DefaultValue": { "Ref": "AWS::NoValue" }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  InstanceA:
    Properties:
      ImageId: ami-id1
      InstanceType: m5.xlarge
  InstanceB:
    Properties:
      ImageId: ami-id2
  InstanceC:
    Properties:
      ImageId: ami-id3
      InstanceType: m5.2xlarge
      AvailabilityZone: us-east-1a
Resources:
  'Fn::ForEach::Instances':
  - InstanceLogicalId
  - [InstanceA, InstanceB, InstanceC]
  - '${InstanceLogicalId}':
      Type: AWS::EC2::Instance
      Properties:
        DisableApiTermination: true
        UserData:
          Fn::Base64: !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
        'Fn::ForEach::Properties':
          - PropertyName
          - [ImageId, InstanceType, AvailabilityZone]
          - '${PropertyName}':
             'Fn::FindInMap':
               - Ref: 'InstanceLogicalId'
               - Properties
               - Ref: 'PropertyName'
               - {DefaultValue: !Ref 'AWS::NoValue'}
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id1
      InstanceType: m5.xlarge
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id2
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id3
      InstanceType: m5.2xlarge
      AvailabilityZone: us-east-1a
```

## Übergabe von nicht-alphanumerischen Zeichen innerhalb der `Collection` für `Fn::ForEach`
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric"></a>

In diesem Beispiel wird die Syntax `&{}` verwendet, die es erlaubt, die nicht-alphanumerischen Zeichen (`.` und `/`) in den IP-Adressen innerhalb des `Collection`zu übergeben.

### JSON
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric-json.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "IpAddresses": {
            "Type": "CommaDelimitedList",
            "Default": "10.0.2.0/24,10.0.3.0/24,10.0.4.0/24"
        }
    },
    "Resources": {
        "VPC": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsSupport": "true",
                "EnableDnsHostnames": "true"
            }
        },
        "Fn::ForEach::Subnets": [
            "CIDR",
            {
                "Ref": "IpAddresses"
            },
            {
                "Subnet&{CIDR}": {
                    "Type": "AWS::EC2::Subnet",
                    "Properties": {
                        "VpcId": {
                            "Ref": "VPC"
                        },
                        "CidrBlock": {
                            "Ref": "CIDR"
                        }
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric-yaml.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  IpAddresses:
    Type: CommaDelimitedList
    Default: '10.0.2.0/24,10.0.3.0/24,10.0.4.0/24'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  'Fn::ForEach::Subnets':
    - CIDR
    - !Ref IpAddresses
    - 'Subnet&{CIDR}':
        Type: AWS::EC2::Subnet
        Properties:
          VpcId: !Ref VPC
          CidrBlock: !Ref CIDR
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  IpAddresses:
    Type: CommaDelimitedList
    Default: '10.0.2.0/24,10.0.3.0/24,10.0.4.0/24'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  Subnet1002024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
  Subnet1003024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
  Subnet1004024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.4.0/24
```

# Beispiele für `Fn::ForEach` im Abschnitt „`Outputs`“
<a name="intrinsic-function-reference-foreach-example-outputs"></a>

Diese Beispiele demonstrieren die Verwendung der intrinsischen Funktion `Fn::ForEach` im Abschnitt „`Outputs`“. Weitere Informationen zu diesem Abschnitt finden Sie unter [Ausgänge](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) im *AWS CloudFormation -Benutzerhandbuch*.

**Topics**
+ [Verweisen auf replizierte `AWS::S3::Bucket`-Ressourcen](#intrinsic-function-reference-foreach-example-replicate-outputs)
+ [Verweisen auf replizierte `AWS::EC2::Instance`-Ressourcen](#intrinsic-function-reference-foreach-example-replicate-conditions)

## Verweisen auf replizierte `AWS::S3::Bucket`-Ressourcen
<a name="intrinsic-function-reference-foreach-example-replicate-outputs"></a>

In diesem Beispiel werden verschachtelte `Fn::ForEach`-Schleifen im Abschnitt `Outputs` verwendet, um die Länge der Vorlage zu reduzieren.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-outputs.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Resources": {
    "Fn::ForEach::Buckets": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "S3Bucket${Identifier}": {
          "Type": "AWS::S3::Bucket",
          "Properties": {
            "AccessControl": "PublicRead",
            "MetricsConfigurations": [
              {
                "Id": {"Fn::Sub": "EntireBucket${Identifier}"}
              }
            ],
            "WebsiteConfiguration": {
              "IndexDocument": "index.html",
              "ErrorDocument": "error.html",
              "RoutingRules": [
                {
                  "RoutingRuleCondition": {
                    "HttpErrorCodeReturnedEquals": "404",
                    "KeyPrefixEquals": "out1/"
                  },
                  "RedirectRule": {
                    "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
                    "ReplaceKeyPrefixWith": "report-404/"
                  }
                }
              ]
            }
          },
          "DeletionPolicy": "Retain",
          "UpdateReplacePolicy": "Retain"
        }
      }
    ]
  },
  "Outputs": {
    "Fn::ForEach::BucketOutputs": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "Fn::ForEach::GetAttLoop": [
          "Property",
          [ "Arn", "DomainName", "WebsiteURL" ],
          {
            "S3Bucket${Identifier}${Property}": {
              "Value": {"Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}]}
            }
          }
        ]
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-outputs.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Buckets':
    - Identifier
    - [A, B, C]
    - 'S3Bucket${Identifier}':
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: PublicRead
          MetricsConfigurations:
            - Id: !Sub 'EntireBucket${Identifier}'
          WebsiteConfiguration:
            IndexDocument: index.html
            ErrorDocument: error.html
            RoutingRules:
              - RoutingRuleCondition:
                  HttpErrorCodeReturnedEquals: '404'
                  KeyPrefixEquals: out1/
                RedirectRule:
                  HostName: ec2-11-22-333-44.compute-1.amazonaws.com
                  ReplaceKeyPrefixWith: report-404/
        DeletionPolicy: Retain
        UpdateReplacePolicy: Retain
Outputs:
  'Fn::ForEach::BucketOutputs':
    - Identifier
    - [A, B, C]
    - 'Fn::ForEach::GetAttLoop':
        - Property
        - [Arn, DomainName, WebsiteURL]
        - 'S3Bucket${Identifier}${Property}':
            Value: !GetAtt [!Sub 'S3Bucket${Identifier}', !Ref Property]
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  S3BucketA:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketA
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
  S3BucketB:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketB
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
  S3BucketC:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketC
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
Outputs:
  S3BucketAArn:
    Value: !GetAtt [S3BucketA, Arn]
  S3BucketADomainName:
    Value: !GetAtt [S3BucketA, DomainName]
  S3BucketAWebsiteURL:
    Value: !GetAtt [S3BucketA, WebsiteURL]
  S3BucketBArn:
    Value: !GetAtt [S3BucketB, Arn]
  S3BucketBDomainName:
    Value: !GetAtt [S3BucketB, DomainName]
  S3BucketBWebsiteURL:
    Value: !GetAtt [S3BucketB, WebsiteURL]
  S3BucketCArn:
    Value: !GetAtt [S3BucketC, Arn]
  S3BucketCDomainName:
    Value: !GetAtt [S3BucketC, DomainName]
  S3BucketCWebsiteURL:
    Value: !GetAtt [S3BucketC, WebsiteURL]
```

## Verweisen auf replizierte `AWS::EC2::Instance`-Ressourcen
<a name="intrinsic-function-reference-foreach-example-replicate-conditions"></a>

Dieses Beispiel verweist auf replizierte Ressourcen in dem `Resources` Abschnitt unter Verwendung der generierten Logik IDs. 

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-conditions.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "Instances": {
      "InstanceType": {
        "B": "m5.4xlarge",
        "C": "c5.2xlarge"
      },
      "ImageId": {"A": "ami-id1"}
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "Instance${Identifier}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "InstanceType": {"Fn::FindInMap": ["Instances", "InstanceType", {"Ref": "Identifier"}, {"DefaultValue": "m5.xlarge"}]},
            "ImageId": {"Fn::FindInMap": ["Instances", "ImageId", {"Ref": "Identifier"}, {"DefaultValue": "ami-id-default"}]}
          }
        }
      }
    ]
  },
  "Outputs": {
    "SecondInstanceId": {
      "Description": "Instance Id for InstanceB",
      "Value": {"Ref": "InstanceB"}
    },
    "SecondPrivateIp": {
      "Description": "Private IP for InstanceB",
      "Value": {
        "Fn::GetAtt": [
          "InstanceB",
          "PrivateIp"
        ]
      }
    }
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-conditions.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Instances:
    InstanceType:
      B: m5.4xlarge
      C: c5.2xlarge
    ImageId:
      A: ami-id1
Resources:
  'Fn::ForEach::Instances':
    - Identifier
    - [A, B, C]
    - 'Instance${Identifier}':
        Type: AWS::EC2::Instance
        Properties:
          InstanceType: !FindInMap [Instances, InstanceType, !Ref Identifier, DefaultValue: m5.xlarge]
          ImageId: !FindInMap [Instances, ImageId, !Ref Identifier, DefaultValue: ami-id-default]
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.xlarge
      ImageId: ami-id1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.4xlarge
      ImageId: ami-id-default
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: c5.2xlarge
      ImageId: ami-id-default
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

# Beispiele für `Fn::ForEach` im Abschnitt „`Conditions`“
<a name="intrinsic-function-reference-foreach-example-conditions"></a>

Diese Beispiele demonstrieren die Verwendung der intrinsischen Funktion `Fn::ForEach` im Abschnitt „`Conditions`“. Weitere Informationen zu diesem Abschnitt finden Sie unter [Bedingungen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) im *AWS CloudFormation -Benutzerhandbuch*.

**Wichtig**  
`Conditions` muss die zweite aufgelistete Eigenschaft oder eine spätere sein. Die Stack-Erstellung schlägt fehl, wenn `Conditions` die erste Eigenschaft ist, die im Vorlagenfragmentparameter von `Fn::ForEach` aufgeführt ist.

```
Resources:
  'Fn::ForEach::Topics':
    - LogicalId
    - !Ref TopicList
    - '${LogicalId}':
        Condition: !Sub 'TopicCondition${LogicalId}'
        Type: AWS::SNS::Topic
        Properties:
          TopicName: !Sub 'My${LogicalId}'
```

`Conditions` muss als zweiter Schlüssel oder später hinzugefügt werden, damit die Stack-Erstellung erfolgreich ist: 

```
Resources:
  'Fn::ForEach::Topics':
    - LogicalId
    - !Ref TopicList
    - '${LogicalId}':
        Type: AWS::SNS::Topic
        Condition: !Sub 'TopicCondition${LogicalId}'
        Properties:
          TopicName: !Sub 'My${LogicalId}'
```

**Topics**
+ [Replizieren einer einzelnen Bedingung](#intrinsic-function-reference-foreach-example-replicated-single-condition)

## Replizieren einer einzelnen Bedingung
<a name="intrinsic-function-reference-foreach-example-replicated-single-condition"></a>

In diesem Beispiel wird die intrinsische Funktion `Fn::ForEach` im Abschnitt `Conditions` verwendet, um mehrere ähnliche Bedingungen mit unterschiedlichen Eigenschaften zu replizieren.

### JSON
<a name="intrinsic-function-reference-foreach-example-conditions.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "ParamA": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamB": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamC": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamD": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        }
    },
    "Conditions": {
        "Fn::ForEach::CheckTrue": [
            "Identifier",
            ["A", "B", "C", "D"],
            {
                "IsParam${Identifier}Enabled": {
                    "Fn::Equals": [
                        {"Ref": {"Fn::Sub": "Param${Identifier}"}},
                        "true"
                    ]
                }
            }
        ]
    },
    "Resources": {
        "WaitConditionHandle": {
            "Type": "AWS::CloudFormation::WaitConditionHandle"
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-conditions.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  ParamA:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamB:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamC:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamD:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
Conditions:
  'Fn::ForEach::CheckTrue':
    - Identifier
    - [A, B, C, D]
    - 'IsParam${Identifier}Enabled': !Equals 
        - !Ref 
          'Fn::Sub': 'Param${Identifier}'
        - 'true'
Resources:
  WaitConditionHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

Die transformierte Vorlage entspricht der folgenden Vorlage:

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  ParamA:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamB:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamC:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamD:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
Conditions:
  IsParamAEnabled: !Equals 
    - !Ref ParamA
    - 'true'
  IsParamBEnabled: !Equals 
    - !Ref ParamB
    - 'true'
  IsParamCEnabled: !Equals 
    - !Ref ParamC
    - 'true'
  IsParamDEnabled: !Equals 
    - !Ref ParamD
    - 'true'
Resources:
  WaitConditionHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

# `Fn::GetAtt`
<a name="intrinsic-function-reference-getatt"></a>

Die intrinsische `Fn::GetAtt`-Funktion gibt den Wert eines Attributs aus einer Ressource in der Vorlage zurück. 

## Deklaration
<a name="getatt-declaration"></a>

### JSON
<a name="intrinsic-function-reference-getatt-syntax.json"></a>

```
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
```

### YAML
<a name="intrinsic-function-reference-getatt-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::GetAtt: [ logicalNameOfResource, attributeName ]
```

Syntax für die Kurzform:

```
!GetAtt logicalNameOfResource.attributeName
```

## Parameters
<a name="getatt-parameters"></a>

`logicalNameOfResource`  
Der logische Name (auch als *logische ID*) der Ressource, die das gewünschte Attribut enthält.

`attributeName`  
Der Name des ressourcenspezifischen Attributs, dessen Wert Sie abrufen möchten. Auf der Referenzseite der Ressource finden Sie weitere Details zu Attributen, die für diesen Ressourcentyp verfügbar sind.

## Rückgabewert
<a name="intrinsic-function-reference-getatt-return"></a>

Der Attributwert. Informationen über `GetAtt`-Rückgabewerte für Ressourcen finden Sie in der Dokumentation für die Ressourcen im [Ressourcen- und Eigenschaftstypen](aws-template-resource-type-ref.md).

## Beispiele
<a name="intrinsic-function-reference-getatt-examples"></a>

### Einen Attributwert zurückgeben
<a name="intrinsic-function-reference-getatt-example"></a>

Die folgenden Beispiele geben eine Zeichenkette zurück, die den DNS-Namen des Load Balancers mit dem logischen Namen `myELB`enthält.

#### JSON
<a name="intrinsic-function-reference-getatt-example.json"></a>

```
"Fn::GetAtt" : [ "myELB" , "DNSName" ]
```

#### YAML
<a name="intrinsic-function-reference-getatt-example.yaml"></a>

```
!GetAtt myELB.DNSName
```

#### Mehrere Attributwerte zurückgeben
<a name="intrinsic-function-reference-getatt-example2"></a>

Die folgenden Beispiele geben die `SourceSecurityGroup.OwnerAlias` und `SourceSecurityGroup.GroupName` des Load Balancers mit dem logischen Namen `myELB`zurück.

##### JSON
<a name="intrinsic-function-reference-getatt-example2.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "myELB": {
            "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
            "Properties": {
                "AvailabilityZones": [
                    "eu-west-1a"
                ],
                "Listeners": [
                    {
                        "LoadBalancerPort": "80",
                        "InstancePort": "80",
                        "Protocol": "HTTP"
                    }
                ]
            }
        },
        "myELBIngressGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "ELB ingress group",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 80,
                        "ToPort": 80,
                        "SourceSecurityGroupOwnerId": {
                            "Fn::GetAtt": [
                                "myELB",
                                "SourceSecurityGroup.OwnerAlias"
                            ]
                        },
                        "SourceSecurityGroupName": {
                            "Fn::GetAtt": [
                                "myELB",
                                "SourceSecurityGroup.GroupName"
                            ]
                        }
                    }
                ]
            }
        }
    }
}
```

##### YAML
<a name="intrinsic-function-reference-getatt-example2.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  myELB:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      AvailabilityZones:
        - eu-west-1a
      Listeners:
        - LoadBalancerPort: '80'
          InstancePort: '80'
          Protocol: HTTP
  myELBIngressGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ELB ingress group
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          SourceSecurityGroupOwnerId: !GetAtt myELB.SourceSecurityGroup.OwnerAlias
          SourceSecurityGroupName: !GetAtt myELB.SourceSecurityGroup.GroupName
```

#### Use `Fn::Sub` inside `Fn::GetAtt` function
<a name="intrinsic-function-reference-getatt-foreach"></a>

**Anmerkung**  
Wenn Sie die Transformation `AWS::LanguageExtensions` verwenden, können Sie `Fn::GetAtt` in Kombination mit anderen intrinsischen Funktionen verwenden. Für unterstützte Funktionen, siehe [Unterstützte Funktionen](#getatt-supported-functions).

Die folgenden Beispiele zeigen, wie Sie `Fn::GetAtt` mit [`Fn::Sub`](intrinsic-function-reference-sub.md)in Verbindung mit [`Fn::ForEach`](intrinsic-function-reference-foreach.md)im Abschnitt `Outputs` einer Vorlage verwenden können, um die Länge der Vorlage und die Ausführlichkeit zu reduzieren. Durch die Verwendung von `Fn::Sub` in `Fn::GetAtt` kann die Vorlage eine intrinsische Funktion enthalten, die bei jeder Iteration des `Fn::ForEach`-Aufrufs auf einen anderen Bucket verweisen kann. 

##### JSON
<a name="intrinsic-function-reference-getatt-foreach.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Mappings": {
        "Buckets": {
            "Properties": {
                "Identifiers": ["A", "B", "C"]
            }
        }
    },
    "Resources": {
        "Fn::ForEach::Buckets": [
            "Identifier",
            {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]},
            {
                "S3Bucket${Identifier}": {
                    "Type": "AWS::S3::Bucket",
                    "Properties": {
                        "AccessControl": "PublicRead",
                        "MetricsConfigurations": [
                            {
                                "Id": {"Fn::Sub": "EntireBucket${Identifier}"}
                            }
                        ],
                        "WebsiteConfiguration": {
                            "IndexDocument": "index.html",
                            "ErrorDocument": "error.html",
                            "RoutingRules": [
                                {
                                    "RoutingRuleCondition": {
                                        "HttpErrorCodeReturnedEquals": "404",
                                        "KeyPrefixEquals": "out1/"
                                    },
                                    "RedirectRule": {
                                        "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
                                        "ReplaceKeyPrefixWith": "report-404/"
                                    }
                                }
                            ]
                        }
                    },
                    "DeletionPolicy": "Retain",
                    "UpdateReplacePolicy": "Retain"
                }
            }
        ]
    },
    "Outputs": {
        "Fn::ForEach::BucketOutputs": [
            "Identifier",
            {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]},
            {
                "Fn::ForEach::GetAttLoop": [
                    "Property",
                    ["Arn", "DomainName", "WebsiteURL"],
                    {
                        "S3Bucket${Identifier}${Property}": {
                            "Value": {
                                "Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}]
                            }
                        }
                    }
                ]
            }
        ]
    }
}
```

##### YAML
<a name="intrinsic-function-reference-getatt-foreach.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Buckets:
    Properties:
      Identifiers:
        - A
        - B
        - C
Resources:
  'Fn::ForEach::Buckets':
    - Identifier
    - Fn::FindInMap: 
      - Buckets
      - Properties
      - Identifiers
    - 'S3Bucket${Identifier}':
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: PublicRead
          MetricsConfigurations:
            - Id: 
                Fn::Sub: 'EntireBucket${Identifier}'
          WebsiteConfiguration:
            IndexDocument: index.html
            ErrorDocument: error.html
            RoutingRules:
              - RoutingRuleCondition:
                  HttpErrorCodeReturnedEquals: '404'
                  KeyPrefixEquals: out1/
                RedirectRule:
                  HostName: ec2-11-22-333-44.compute-1.amazonaws.com
                  ReplaceKeyPrefixWith: report-404/
        DeletionPolicy: Retain
        UpdateReplacePolicy: Retain
Outputs:
  'Fn::ForEach::BucketOutputs':
    - Identifier
    - Fn::FindInMap:
      - Buckets
      - Properties
      - Identifiers
    - 'Fn::ForEach::GetAttLoop':
        - Property
        - - Arn
          - DomainName
          - WebsiteURL
        - 'S3Bucket${Identifier}${Property}':
            Value: !GetAtt 
              - !Sub 'S3Bucket${Identifier}'
              - !Ref Property
```

## Unterstützte Funktionen
<a name="getatt-supported-functions"></a>

Wenn Sie die Funktion [AWS::LanguageExtensions transform](transform-aws-languageextensions.md)verwenden, können Sie die folgenden Funktionen innerhalb der Funktion `Fn::GetAtt` verwenden. Dies gilt entweder für den logischen Namen der `Fn::GetAtt`-Ressource oder den `Fn::GetAtt`-Attributnamen.
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

Wenn die Transformation `AWS::LanguageExtensions` nicht verwendet wird:
+ Der Name des Attributs `Fn::GetAtt` kann nur die Funktion [`Ref`](intrinsic-function-reference-ref.md) verwenden.
+ Der logische Name der `Fn::GetAtt`-Ressource kann keine Funktionen enthalten. Sie müssen eine Zeichenfolge angeben, die eine logische ID einer Ressource darstellt. 

# `Fn::GetAZs`
<a name="intrinsic-function-reference-getavailabilityzones"></a>

Die intrinsische Funktion `Fn::GetAZs` gibt ein Array mit einer Liste der Availability Zones für eine angegebene Region in alphabetischer Reihenfolge zurück. Da Kunden Zugriff auf verschiedene Availability Zones haben, ermöglicht die intrinsische Funktion `Fn::GetAZs` die Erstellung von Vorlagen, die sich an den Zugriff des aufrufenden Benutzers anpassen. Dadurch ist es nicht erforderlich, eine vollständige Liste der Availability Zones für eine bestimmte Region im Code explizit anzugeben.

**Wichtig**  
Die Funktion `Fn::GetAZs` gibt nur die Availability Zones zurück, die über ein Standardsubnetz verfügen, es sei denn, keine der Availability Zones verfügt über ein Standardsubnetz. In diesem Fall werden alle Availability Zones zurückgegeben.  
Ähnlich wie bei der Antwort des `describe-availability-zones` AWS CLI Befehls ist die Reihenfolge der Ergebnisse der `Fn::GetAZs` Funktion nicht garantiert und kann sich ändern, wenn neue Availability Zones hinzugefügt werden.

IAM-Berechtigungen

Die Berechtigungen, die Sie zum Aufrufen der Funktion `Fn::GetAZs` benötigen, hängen von der Plattform ab, auf der Sie Amazon EC2 Instances starten. Bei beiden Plattformen benötigen Sie die Berechtigungen für die Amazon EC2-Aktionen `DescribeAvailabilityZones` und `DescribeAccountAttributes`. Bei EC2-VPC benötigen Sie auch Berechtigungen für die Amazon EC2-Aktion `DescribeSubnets`.

## Deklaration
<a name="intrinsic-function-reference-getazs-declaration"></a>

### JSON
<a name="intrinsic-function-reference-getazs-syntax.json"></a>

```
{ "Fn::GetAZs" : "Region" }
```

### YAML
<a name="intrinsic-function-reference-getazs-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::GetAZs: Region
```

Syntax für die Kurzform:

```
!GetAZs Region
```

## Parameters
<a name="intrinsic-function-reference-getazs-parameters"></a>

Region  <a name="region"></a>
Der Name der Region, für die Sie die Availability Zones abrufen möchten.  
Sie können mit dem Pseudoparameter `AWS::Region` die Region angeben, in welcher der Stack erstellt wird. Die Angabe einer leeren Zeichenfolge entspricht der Angabe von `AWS::Region`.

## Rückgabewert
<a name="intrinsic-function-reference-getazs-return-value"></a>

Die Liste der Availability Zones für die Region.

## Beispiele
<a name="intrinsic-function-reference-getazs-examples"></a>

### Bewerten einer Region
<a name="intrinsic-function-reference-getazs-examples-evaluate-region"></a>

Für diese Beispiele wird das folgende Array CloudFormation ausgewertet `Fn::GetAZs` — vorausgesetzt, der Benutzer hat den Stack in der Region erstellt: `us-east-1`

`[ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e" ]`

#### JSON
<a name="intrinsic-function-reference-getazs-example1.json"></a>

```
1. { "Fn::GetAZs" : "" }
2. { "Fn::GetAZs" : { "Ref" : "AWS::Region" } }
3. { "Fn::GetAZs" : "us-east-1" }
```

#### YAML
<a name="intrinsic-function-reference-getazs-example1.yaml"></a>

```
1. Fn::GetAZs: ""
2. Fn::GetAZs:
3.   Ref: "AWS::Region"
4. Fn::GetAZs: us-east-1
```

 

### Die Availability Zone eines Subnetzes angeben
<a name="intrinsic-function-reference-getazs-examples-subnet-az"></a>

Im folgenden Beispiel wird mit `Fn::GetAZs` die Availability Zone (AZ) eines Subnetzes angegeben:

#### JSON
<a name="intrinsic-function-reference-getazs-example.json"></a>

```
"mySubnet" : {
  "Type" : "AWS::EC2::Subnet",
  "Properties" : {
    "VpcId" : { 
      "Ref" : "VPC"   
    },
    "CidrBlock" : "10.0.0.0/24",
    "AvailabilityZone" : {
      "Fn::Select" : [ 
        0, 
        { 
          "Fn::GetAZs" : "" 
        } 
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getazs-example.yaml"></a>

```
mySubnet: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: 
      !Ref VPC
    CidrBlock: 10.0.0.0/24
    AvailabilityZone: 
      Fn::Select: 
        - 0
        - Fn::GetAZs: ""
```

 

### Verschachtelte Funktionen mit YAML in Kurzschreibweise
<a name="intrinsic-function-reference-getazs-examples-nested-functions"></a>

Die folgenden Beispiele zeigen gültige Muster für die Nutzung von verschachtelten intrinsischen Funktionen mit der Kurzschreibweise von YAML. Sie können Funktionen in Kurzschreibweise nicht nacheinander verschachteln, daher ist ein Muster wie `!GetAZs !Ref` ungültig.

#### YAML
<a name="intrinsic-function-reference-getavailabilityzones-example3.yaml"></a>

```
1. AvailabilityZone: !Select
2.   - 0
3.   - !GetAZs
4.     Ref: 'AWS::Region'
```

#### YAML
<a name="intrinsic-function-reference-getavailabilityzones-example4.yaml"></a>

```
1. AvailabilityZone: !Select
2.   - 0
3.   - Fn::GetAZs: !Ref 'AWS::Region'
```

## Unterstützte Funktionen
<a name="intrinsic-function-reference-getazs-supported-functions"></a>

Sie können die Funktion `Ref` in der Funktion `Fn::GetAZs` verwenden.

# `Fn::ImportValue`
<a name="intrinsic-function-reference-importvalue"></a>

Die systeminterne Funktion `Fn::ImportValue` gibt den Wert einer Ausgabe zurück, die von einem anderen Stack exportiert wurde. Normalerweise verwenden Sie diese Funktion zum Erstellen von Cross-Stack-Referenzen. *Weitere Informationen finden Sie unter [Exemplarische Vorgehensweise: Weitere Informationen finden Sie unter Ressourcenausgaben in einem anderen CloudFormation Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html) im AWS CloudFormation Benutzerhandbuch.*

Im folgenden Beispiel eines Vorlagenausschnitts exportiert Stack A die VPC-Sicherheitsgruppenwerte, die von Stack B importiert werden.

**Anmerkung**  
Die folgenden Einschränkungen gelten für Cross-Stack-Referenzen:  
Jeder AWS-Konto`Export` Name muss innerhalb einer Region eindeutig sein.
Cross-Stack-Referenzen können nicht regionsübergreifend erstellt werden. Sie können die intrinsische Funktion `Fn::ImportValue` verwenden, um nur Werte zu importieren, die innerhalb derselben Region exportiert wurden.
Für Ausgaben kann der Wert der `Name`-Eigenschaft eines `Export` keine `Ref`- oder `GetAtt`-Funktionen verwenden, die von einer Ressource abhängen.  
Ebenso darf die `ImportValue`-Funktion keine `Ref`- oder `GetAtt`-Funktionen enthalten, die von einer Ressource abhängen.
Nachdem ein anderer Stack einen Ausgabewert importiert hat, können Sie den Stack, der den Ausgabewert exportiert, nicht löschen oder den exportierten Ausgabewert ändern. Alle Importe müssen entfernt werden, bevor Sie den exportierenden Stack löschen oder den Ausgabewert ändern können.

## JSON
<a name="intrinsic-function-reference-importvalue-export.json"></a>

Stack A – Export

```
"Outputs" : {
  "PublicSubnet" : {
    "Description" : "The subnet ID to use for public web servers",
    "Value" :  { "Ref" : "PublicSubnet" },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SubnetID" }}
  },
  "WebServerSecurityGroup" : {
    "Description" : "The security group ID to use for public web servers",
    "Value" :  { "Fn::GetAtt" : ["WebServerSecurityGroup", "GroupId"] },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SecurityGroupID" }}
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-export.yaml"></a>

Stack A – Export

```
Outputs:
  PublicSubnet:
    Description: The subnet ID to use for public web servers
    Value:
      Ref: PublicSubnet
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SubnetID'
  WebServerSecurityGroup:
    Description: The security group ID to use for public web servers
    Value:
      'Fn::GetAtt':
        - WebServerSecurityGroup
        - GroupId
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SecurityGroupID'
```

## JSON
<a name="intrinsic-function-reference-importvalue-import.json"></a>

Stack B – Import

```
"Resources" : {
  "WebServerInstance" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
      "InstanceType" : "t2.micro",
      "ImageId" : "ami-a1b23456",
      "NetworkInterfaces" : [{
        "GroupSet" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SecurityGroupID"}}],
        "AssociatePublicIpAddress" : "true",
        "DeviceIndex" : "0",
        "DeleteOnTermination" : "true",
        "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SubnetID"}}
      }]
    }
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-import.yaml"></a>

Stack B – Import

```
Resources:
  WebServerInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-a1b23456
      NetworkInterfaces:
        - GroupSet:
            - Fn::ImportValue: 
              'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID'
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
          SubnetId: Fn::ImportValue: 
            'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'
```

## Deklaration
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-syntax.json"></a>

```
{ "Fn::ImportValue" : sharedValueToImport }
```

### YAML
<a name="intrinsic-function-reference-importvalue-syntax.yaml"></a>

Sie können den vollständigen Funktionsnamen verwenden:

```
Fn::ImportValue: sharedValueToImport
```

Alternativ können Sie auch die Kurzform verwenden:

```
!ImportValue sharedValueToImport
```

**Wichtig**  
Sie können die Kurzform von `!ImportValue` nicht verwenden, wenn es die Kurzform von `!Sub` enthält.   

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
Stattdessen müssen Sie den vollständigen Funktionsnamen verwenden, zum Beispiel:  

```
Fn::ImportValue:
  !Sub "${NetworkStack}-SubnetID"
```

## Parameters
<a name="w2aac24c43c13"></a>

sharedValueToImportieren  
Der Stack-Ausgabewert, den Sie importieren möchten.

## Rückgabewert
<a name="w2aac24c43c15"></a>

Der Stack-Ausgabewert.

## Beispiel
<a name="w2aac24c43c17"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-example.json"></a>

```
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
```

### YAML
<a name="intrinsic-function-reference-importvalue-example.yaml"></a>

```
Fn::ImportValue:
  !Sub "${NetworkStackName}-SecurityGroupID"
```

## Unterstützte Funktionen
<a name="w2aac24c43c19"></a>

Sie können die folgenden Funktionen in der `Fn::ImportValue`-Funktion verwenden. Der Wert dieser Funktionen darf nicht von einer Ressource abhängen.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Join`
<a name="intrinsic-function-reference-join"></a>

Die intrinsische Funktion `Fn::Join` fügt einem einzelnen Wert eine Gruppe von Werten getrennt durch das angegebene Trennzeichen an. Wenn das Trennzeichen eine leere Zeichenfolge ist, dann wird die Gruppe von Werten ohne Trennzeichen verkettet.

## Deklaration
<a name="w2aac24c48b5"></a>

### JSON
<a name="intrinsic-function-reference-join-syntax.json"></a>

```
{ "Fn::Join" : [ "delimiter", [ comma-delimited list of values ] ] }
```

### YAML
<a name="intrinsic-function-reference-join-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Join: [ delimiter, [ comma-delimited list of values ] ]
```

Syntax für die Kurzform:

```
!Join [ delimiter, [ comma-delimited list of values ] ]
```

## Parameters
<a name="intrinsic-function-reference-join-parameters"></a>

delimiter  
Der Wert, der zwischen Fragmenten stehen soll. Das Trennzeichen wird nur zwischen den Fragmenten eingefügt. Es wird den endgültigen Wert nicht beenden.

ListOfValues  
Die Liste der Werte, die kombiniert werden sollen.

## Rückgabewert
<a name="intrinsic-function-reference-join-returnvalues"></a>

Die kombinierte Zeichenfolge.

## Beispiele
<a name="intrinsic-function-reference-join-examples"></a>

### Einem Simple String Array beitreten
<a name="intrinsic-function-reference-join-example1"></a>

Im folgenden Beispiel wird Folgendes zurückgegeben: `"a:b:c"`

#### JSON
<a name="intrinsic-function-reference-join-example1.json"></a>

```
"Fn::Join" : [ ":", [ "a", "b", "c" ] ]
```

#### YAML
<a name="intrinsic-function-reference-join-example1.yaml"></a>

```
!Join [ ":", [ a, b, c ] ]
```

### Beitreten mithilfe der Referenzfunktion mit Parametern
<a name="intrinsic-function-reference-join-example2"></a>

Im folgenden Beispiel wird `Fn::Join` zum Erstellen eines Zeichenfolgenwerts verwendet. Es verwendet die `Ref`-Funktion mit dem `AWS::Partition`-Parameter und dem `AWS::AccountId`-Pseudoparameter.

#### JSON
<a name="intrinsic-function-reference-join-example2.json"></a>

```
{
  "Fn::Join": [
    "", [
      "arn:",
      {
        "Ref": "AWS::Partition"
      },
      ":s3:::elasticbeanstalk-*-",
      {
        "Ref": "AWS::AccountId"
      }
    ]
  ]
}
```

#### YAML
<a name="intrinsic-function-reference-join-example2.yaml"></a>

```
!Join
  - ''
  - - 'arn:'
    - !Ref AWS::Partition
    - ':s3:::elasticbeanstalk-*-'
    - !Ref AWS::AccountId
```

**Anmerkung**  
Ähnliche Funktionen finden Sie darüber hinaus in der [`Fn::Sub`](intrinsic-function-reference-sub.md)-Funktion.

## Unterstützte Funktionen
<a name="intrinsic-function-reference-join-supportedfunctions"></a>

Für das `Fn::Join`-Trennzeichen können Sie nicht jede beliebige Funktion verwenden. Sie müssen einen Zeichenfolgenwert angeben.

Für die Werteliste `Fn::Join` können Sie die folgenden Funktionen verwenden:
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Split`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Length`
<a name="intrinsic-function-reference-length"></a>

Die intrinsische Funktion `Fn::Length` gibt die Anzahl der Elemente innerhalb eines Arrays oder einer intrinsischen Funktion zurück, die ein Array zurückgibt.

**Wichtig**  
Sie müssen die [`AWS::LanguageExtensions`-Transformation](transform-aws-languageextensions.md) verwenden, um die intrinsische Funktion `Fn::Length` nutzen zu können.

## Deklaration
<a name="length-declaration"></a>

### JSON
<a name="intrinsic-function-reference-length-syntax.json"></a>

```
{ "Fn::Length" : IntrinsicFunction }
```

```
{ "Fn::Length" : Array }
```

### YAML
<a name="intrinsic-function-reference-length-syntax.yaml"></a>

```
Fn::Length : IntrinsicFunction
```

```
Fn::Length : Array
```

## Parameters
<a name="length-parameters"></a>

`IntrinsicFunction`  
Die intrinsische Funktion, die ein Array zurückgibt, aus dem Sie eine Anzahl an Elementen zurückgeben möchten.

`Array`  
Das Array, aus dem Sie die Anzahl an Elementen zurückgeben möchten.

## Rückgabewert
<a name="intrinsic-function-reference-length-return"></a>

Die Anzahl der Elemente innerhalb der intrinsischen Funktion, die ein Array zurückgibt oder des Arrays, das der intrinsischen Funktion übergeben wurde. 

## Beispiele
<a name="intrinsic-function-reference-length-examples"></a>

### Die Anzahl der Elemente innerhalb einer intrinsischen Funktion zurückgeben, die ein Array zurückgibt.
<a name="intrinsic-function-reference-length-example-subsection"></a>

In diesem Beispiel wird die Anzahl der Elemente innerhalb einer intrinsischen Funktion zurückgegeben, die ein Array zurückgibt. Die Funktion gibt den Wert „3“ zurück.

#### JSON
<a name="intrinsic-function-reference-length-example.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::Length" : {
            "Fn::Split": ["|", "a|b|c"]
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-legnth-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    !Split ["|", "a|b|c"]
#...
```

### Zurückgeben der Anzahl der Elemente innerhalb einer intrinsischen Ref-Funktion, die auf einen Listenparametertyp verweist
<a name="intrinsic-function-reference-length-example2"></a>

In diesem Beispiel wird die Anzahl der Elemente innerhalb der intrinsischen Funktion `Ref` zurückgeben, die auf einen Listenparametertyp verweist. Wenn der Parameter mit dem Namen `ListParameter` eine Liste mit 3 Elementen ist, gibt die Funktion 3 zurück.

#### JSON
<a name="intrinsic-function-reference-length-example2.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::Length": {
            "Ref": "ListParameter"
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-legnth-example2.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    !Ref ListParameter
#...
```

### Zurückgeben der Anzahl von Elementen innerhalb eines Arrays
<a name="intrinsic-function-reference-length-example3"></a>

In diesem Beispiel wird die Anzahl der Elemente innerhalb eines Arrays zurückgegeben, das der intrinsischen Funktion übergeben wurde. Die Funktion gibt den Wert „3“ zurück.

#### JSON
<a name="intrinsic-function-reference-length-example3.json"></a>

```
 1. {
 2. //...
 3.     "Transform": "AWS::LanguageExtensions"
 4.     //...
 5.         "Fn::Length": [
 6.             1,
 7.             {"Ref": "ParameterName"}, 
 8.             3
 9.         ]
10. //...
11. }
```

#### YAML
<a name="intrinsic-function-reference-legnth-example3.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    - 1
    - !Ref ParameterName
    - 3
#...
```

## Unterstützte Funktionen
<a name="length-supported-functions"></a>

Sie können die folgenden Funktionen in der intrinsischen Funktion `Fn::Length` oder im Array verwenden:
+ `Condition Functions`
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::Join`
+ `Fn::Length`
+ `Fn::Select`
+ `Fn::Split`
+ `Fn::Sub`
+ `Fn::ToJsonString`
+ `Ref`

# `Fn::Select`
<a name="intrinsic-function-reference-select"></a>

Die intrinsische Funktion `Fn::Select` gibt ein einzelnes Objekt aus einer Objektliste durch Angabe des Index zurück.

**Wichtig**  
`Fn::Select` überprüft nicht auf Null-Werte oder ob sich der Index außerhalb des Arrays befindet. Beide Bedingungen führen zu einem Stack-Fehler. Sie sollten daher sicherstellen, dass der von Ihnen gewählte Index gültig ist und dass die Liste keine Null-Werte enthält.

## Deklaration
<a name="w2aac24c58b7"></a>

### JSON
<a name="intrinsic-function-reference-select-syntax.json"></a>

```
{ "Fn::Select" : [ index, listOfObjects ] }
```

### YAML
<a name="intrinsic-function-reference-select-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Select: [ index, listOfObjects ] 
```

Syntax für die Kurzform:

```
!Select [ index, listOfObjects ]
```

## Parameters
<a name="w2aac24c58b9"></a>

index  
Der Index des Objekts zum Abrufen des Objekts. Dies muss ein Wert zwischen Null und N-1 sein, wobei N für die Anzahl der Elemente im Array steht.

listOfObjects  
Die Auswahlliste für die Objekte. Diese Liste darf nicht Null sein und darf keine Null-Einträge besitzen.

## Rückgabewert
<a name="w2aac24c58c11"></a>

Das ausgewählte Objekt.

## Beispiele
<a name="w2aac24c58c13"></a>

### Einfaches Beispiel
<a name="w2aac24c58c13b3"></a>

Im folgenden Beispiel wird Folgendes zurückgegeben: `"grapes"`

#### JSON
<a name="intrinsic-function-reference-select-example0.json"></a>

```
{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }
```

#### YAML
<a name="intrinsic-function-reference-select-example0.yaml"></a>

```
!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]
```

 

### Parametertyp für Komma-getrennte Listen
<a name="w2aac24c58c13b5"></a>

Mit `Fn::Select` können Sie ein Objekt aus einem `CommaDelimitedList`-Parameter auswählen. Sie können einen `CommaDelimitedList`-Parameter verwenden, um die Werte zugehöriger Parameter zu kombinieren, wodurch die Gesamtanzahl der Parameter in Ihrer Vorlage reduziert wird. Beispielsweise gibt der folgende Parameter eine durch Komma getrennte Liste von drei CIDR-Blöcken an:

#### JSON
<a name="intrinsic-function-reference-select-example1.json"></a>

```
"Parameters" : {
  "DbSubnetIpBlocks": {
    "Description": "Comma-delimited list of three CIDR blocks",
    "Type": "CommaDelimitedList",
      "Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example1.yaml"></a>

```
Parameters: 
  DbSubnetIpBlocks: 
    Description: "Comma-delimited list of three CIDR blocks"
    Type: CommaDelimitedList
    Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
```

Legen Sie einen der drei CIDR-Blöcke fest, indem Sie `Fn::Select` im Abschnitt Ressourcen derselben Vorlage wie im folgenden Beispiel-Snippet verwenden:

#### JSON
<a name="intrinsic-function-reference-select-example2.json"></a>

```
"Subnet0": {
  "Type": "AWS::EC2::Subnet",
    "Properties": {
      "VpcId": { "Ref": "VPC" },
      "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example2.yaml"></a>

```
Subnet0: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: !Ref VPC
    CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]
```

 

### Verschachtelte Funktionen mit YAML in Kurzschreibweise
<a name="w2aac24c58c13b7"></a>

Die folgenden Beispiele zeigen gültige Muster für die Nutzung von verschachtelten intrinsischen Funktionen mit der Kurzschreibweise von `!Select`. Sie können Funktionen in Kurzschreibweise nicht nacheinander verschachteln, daher ist ein Muster wie `!GetAZs !Ref` ungültig.

#### YAML
<a name="intrinsic-function-reference-select-example3.yaml"></a>

```
AvailabilityZone: !Select 
  - 0
  - !GetAZs 
    Ref: 'AWS::Region'
```

#### YAML
<a name="intrinsic-function-reference-select-example4.yaml"></a>

```
AvailabilityZone: !Select 
  - 0
  - Fn::GetAZs: !Ref 'AWS::Region'
```

## Unterstützte Funktionen
<a name="w2aac24c58c15"></a>

Für den Indexwert `Fn::Select` können Sie die Funktionen `Ref` und `Fn::FindInMap` verwenden.

Für die Objektliste `Fn::Select` können Sie die folgenden Funktionen verwenden:
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Split`
+ `Ref`

# `Fn::Split`
<a name="intrinsic-function-reference-split"></a>

Verwenden Sie die intrinsische `Fn::Split`-Funktion, um eine Zeichenfolge in eine Liste von Zeichenfolgen aufzuteilen, sodass Sie aus der fertigen Liste ein Element wählen können. Geben Sie den Speicherort der Aufteilungen mit einem Trennzeichen an, z. B. `,` (ein Komma). Nachdem Sie eine Zeichenfolge aufgeteilt haben, verwenden Sie die [`Fn::Select`](intrinsic-function-reference-select.md)-Funktion, um ein bestimmtes Element zu wählen.

Wenn beispielsweise eine durch Kommas getrennte Zeichenfolge eines Subnetzes in Ihre Stack-Vorlage importiert IDs wird, können Sie die Zeichenfolge an jedem Komma aufteilen. Verwenden Sie in der Liste der Subnetze die `Fn::Select` systeminterne Funktion IDs, um eine Subnetz-ID für eine Ressource anzugeben.

## Deklaration
<a name="w2aac24c62b7"></a>

### JSON
<a name="intrinsic-function-reference-split-syntax.json"></a>

```
{ "Fn::Split" : [ "delimiter", "source string" ] }
```

### YAML
<a name="intrinsic-function-reference-split-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Split: [ delimiter, source string ]
```

Syntax für die Kurzform:

```
!Split [ delimiter, source string ]
```

## Parameters
<a name="w2aac24c62b9"></a>

Sie müssen beide Parameter angeben.

delimiter  
Ein Zeichenfolgewert, der bestimmt, an welcher Stelle die Quell-Zeichenfolge aufgeteilt wird.

Quell-Zeichenfolge  
Der Zeichenfolgewert, den Sie aufteilen möchten.

## Rückgabewert
<a name="w2aac24c62c11"></a>

Eine Liste von Zeichenfolgewerten.

## Beispiele
<a name="w2aac24c62c13"></a>

Das folgende Beispiele zeigt das Verhalten der `Fn::Split`-Funktion.

### Einfache Liste
<a name="w2aac24c62c13b5"></a>

Im folgenden Beispiel wird eine Zeichenfolge an jedem vertikalen Balken (`|`) aufgeteilt. Die Funktion gibt `["a", "b", "c"]` zurück.

#### JSON
<a name="intrinsic-function-reference-split-example.json"></a>

```
{ "Fn::Split" : [ "|" , "a|b|c" ] }
```

#### YAML
<a name="intrinsic-function-reference-split-example.yaml"></a>

```
!Split [ "|" , "a|b|c" ]
```

 

### Liste mit leeren Zeichenfolgewerten
<a name="w2aac24c62c13b7"></a>

Wenn Sie eine Zeichenfolge mit aufeinanderfolgenden Trennzeichen aufteilen, enthält die resultierende Liste eine leere Zeichenfolge. Im folgenden Beispiel wird eine Zeichenfolge mit zwei aufeinanderfolgende Trennzeichen und einem angehängten Trennzeichen aufgeteilt. Die Funktion gibt `["a", "", "c", ""]` zurück.

#### JSON
<a name="w2aac24c62c13b7b5"></a>

```
{ "Fn::Split" : [ "|" , "a||c|" ] }
```

#### YAML
<a name="w2aac24c62c13b7b7"></a>

```
!Split [ "|" , "a||c|" ]
```

 

### Aufteilen eines importierten Ausgabewerts
<a name="w2aac24c62c13b9"></a>

Im folgenden Beispiel wird ein importierter Ausgabewert aufgeteilt und dann das dritte Element aus der resultierenden Subnetzliste ausgewählt IDs, wie in der Funktion angegeben. `Fn::Select`

#### JSON
<a name="w2aac24c62c13b9b5"></a>

```
{ "Fn::Select" : [ "2", { "Fn::Split": [",", {"Fn::ImportValue": "AccountSubnetIDs"}]}] }
```

#### YAML
<a name="w2aac24c62c13b9b7"></a>

```
!Select [2, !Split [",", !ImportValue AccountSubnetIDs]]
```

## Unterstützte Funktionen
<a name="w2aac24c62c15"></a>

Für das `Fn::Split`-Trennzeichen können Sie nicht jede beliebige Funktion verwenden. Sie müssen einen Zeichenfolgenwert angeben.

Für die Werteliste `Fn::Split` können Sie die folgenden Funktionen verwenden:
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Sub`
<a name="intrinsic-function-reference-sub"></a>

Mit der intrinsischen Funktion`Fn::Sub` können Sie Variablen in einer Eingabezeichenfolge mit Werten ersetzen, die Sie angeben. In Ihren Vorlagen können Sie diese Funktion verwenden, um Befehle oder Ausgaben mit Werten zu erstellen, die erst verfügbar sind, wenn Sie einen Stack erstellen oder aktualisieren.

## Deklaration
<a name="intrinsic-function-reference-sub-declaration"></a>

In den folgenden Abschnitten wird die Syntax der Funktion erläutert.

### JSON
<a name="intrinsic-function-reference-sub-syntax.json"></a>

```
{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }
```

Wenn Sie im Parameter nur Vorlagenparameter, ressourcenlogische IDs Attribute oder Ressourcenattribute ersetzen, geben Sie keine Variablenzuordnung an. `String`

```
{ "Fn::Sub" : String }
```

### YAML
<a name="intrinsic-function-reference-sub-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Sub:
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

Syntax für die Kurzform:

```
!Sub
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

Wenn Sie im Parameter nur Vorlagenparameter, ressourcenlogische Attribute oder Ressourcenattribute ersetzen IDs, geben Sie keine `String` Variablenzuordnung an.

Syntax für den vollständigen Funktionsnamen:

```
Fn::Sub: String
```

Syntax für die Kurzform:

```
!Sub String
```

## Parameters
<a name="w2aac24c66b7"></a>

`String`  
Eine Zeichenfolge mit Variablen, die zur Laufzeit durch ihre zugehörigen Werte CloudFormation ersetzt werden. Schreibt Variablen als `${MyVarName}`. Bei Variablen kann es sich um Namen von Vorlagenparametern, um logische Ressourcen IDs, Ressourcenattribute oder um eine Variable in einer Key-Value-Map handeln. Wenn Sie nur Vorlagenparameternamen, logische Ressourcenattribute und Ressourcenattribute angeben IDs, geben Sie keine Schlüssel-Wert-Zuordnung an.  
Wenn Sie Vorlagenparameternamen oder ressourcenlogische Parameter angeben IDs, werden dieselben Werte CloudFormation zurückgegeben`${InstanceTypeParameter}`, als ob Sie die `Ref` systeminterne Funktion verwenden würden. Wenn Sie Ressourcenattribute angeben, z. B. werden dieselben Werte CloudFormation zurückgegeben`${MyInstance.PublicIp}`, als ob Sie die `Fn::GetAtt` systeminterne Funktion verwendet hätten.  
Um ein Dollarzeichen und geschweifte Klammern (`${}`) wörtlich zu schreiben, fügen Sie nach der geöffneten geschweiften Klammer ein Ausrufezeichen (`!`) hinzu, z. B. `${!Literal}` CloudFormation `${Literal}`löst diesen Text auf als.  
Wenn Sie eine Startvorlage verwenden, fügen Sie einen Backslash `\` vor dem Dollarzeichen ein, beispielsweise `\${!Literal}`, da das Literal sonst als leere Zeichenkette aufgelöst wird.

`VarName`  
Der Name einer Variablen, die Sie im Parameter `String` eingefügt haben.

`VarValue`  
Der Wert, der zur CloudFormation Laufzeit den zugehörigen Variablennamen ersetzt.

## Rückgabewert
<a name="w2aac24c66b9"></a>

CloudFormation gibt die ursprüngliche Zeichenfolge zurück und ersetzt alle Variablen durch die Werte.

## Beispiele
<a name="w2aac24c66c11"></a>

Das folgende Beispiele zeigt, wie die `Fn::Sub`-Funktion verwendet wird.

### Verwenden Sie `Fn::Sub` ohne eine Schlüssel-Wert-Map
<a name="w2aac24c66c11b5"></a>

In diesem einfachen Beispiel wird die Beschreibung der Ressource `InstanceSecurityGroup` dynamisch mit dem Pseudoparameter `AWS::StackName` erstellt. Wenn der Stapelname beispielsweise "VPC-EC2-ALB-Stack" lautet, ist die resultierende Beschreibung "SSH security group for VPC-EC2-ALB-Stack".

#### JSON
<a name="intrinsic-function-reference-sub-example-1.json"></a>

```
"InstanceSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
        "GroupDescription" : {"Fn::Sub": "SSH security group for ${AWS::StackName}"}
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-1.yaml"></a>

```
InstanceSecurityGroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: !Sub "SSH security group for ${AWS::StackName}"
```

### Verwenden Sie `Fn::Sub` mit einer Schlüssel-Wert-Map
<a name="w2aac24c66c11b7"></a>

In diesem Beispiel wird der Name der Ressource `WWWBucket` dynamisch mit einer Key-Value-Map erstellt. Die Funktion `Fn::Sub` ersetzt `${Domain}` in der Eingabezeichenfolge `www.${Domain}` durch den Wert einer Funktion `Ref`, die auf den Parameter `RootDomainName` verweist, der in derselben Stackvorlage definiert ist. Wenn der Stammdomainnname beispielsweise "mydomain.com" lautet, ist der resultierende Name für diese Ressource "www.mydomain.com".

#### JSON
<a name="intrinsic-function-reference-sub-example-2.json"></a>

```
"WWWBucket":{
  "Type":"AWS::S3::Bucket",
  "Properties":{
    "BucketName":{
      "Fn::Sub":[
        "www.${Domain}",
        {
          "Domain":{
            "Ref":"RootDomainName"
          }
        }
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-2.yaml"></a>

```
  WWWBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub
        - 'www.${Domain}'
        - Domain: !Ref RootDomainName
```

### Verwenden Sie mehrere Variablen zum Konstruieren ARNs
<a name="w2aac24c66c11b9"></a>

Das folgende Beispiel verwendet `Fn::Sub` mit den Pseudo-Parametern `AWS::Region` und `AWS::AccountId` und der logischen Ressourcen-ID `vpc`, um einen Amazon Resource Name (ARN) für eine VPC zu erstellen.

#### JSON
<a name="intrinsic-function-reference-sub-example-3.json"></a>

```
{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }
```

#### YAML
<a name="intrinsic-function-reference-sub-example-3.yaml"></a>

```
!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'
```

### Parameterwerte in Skripten für Benutzerdaten übergeben
<a name="w2aac24c66c11c11"></a>

In dem folgenden Beispiel werden die Pseudoparameter `Fn::Sub` und `AWS::StackName` mit `AWS::Region` zur Laufzeit mit dem tatsächlichen Stack-Namen und der Region ersetzt.

#### JSON
<a name="intrinsic-function-reference-sub-example.json"></a>

Zur besseren Lesbarkeit werden die einzelnen Befehle im JSON-Beispiel mit der `Fn::Join`-Funktion voneinander getrennt, sodass nicht das gesamte Benutzerdaten-Skript in einem einzelnen Zeichenfolgewert angegeben ist.

```
"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [
  "#!/bin/bash -xe",
  "yum update -y aws-cfn-bootstrap",
  { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" },
  { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]]
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example.yaml"></a>

Im YAML-Beispiel wird ein Literal-Block verwendet, um ein Benutzerdaten-Skript anzugeben.

```
UserData:
  Fn::Base64:
    !Sub |
      #!/bin/bash -xe
      yum update -y aws-cfn-bootstrap
      /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
      /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
```

### Bedingte Werte mit Hilfe von Mappings spezifizieren
<a name="w2aac24c66c11c13"></a>

In diesem Beispiel wird der Name der Ressource `myLogGroup` dynamisch erstellt, indem die Variable `log_group_name` durch den Ergebniswert der Funktion `Fn::FindInMap` ersetzt wird.

#### JSON
<a name="intrinsic-function-reference-sub-example-5.json"></a>

```
{
  "Mappings": {
    "LogGroupMapping": {
      "Test": {
        "Name": "test_log_group"
      },
      "Prod": {
        "Name": "prod_log_group"
      }
    }
  },
  "Resources": {
    "myLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": [
            "cloud_watch_${log_group_name}",
            {
              "log_group_name": {
                "Fn::FindInMap": [
                  "LogGroupMapping",
                  "Test",
                  "Name"
                ]
              }
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-5.yaml"></a>

```
Mappings:
  LogGroupMapping:
    Test:
      Name: test_log_group
    Prod:
      Name: prod_log_group
Resources:
  myLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub 
        - 'cloud_watch_${log_group_name}'
        - log_group_name: !FindInMap 
            - LogGroupMapping
            - Test
            - Name
```

## Unterstützte Funktionen
<a name="intrinsic-function-reference-sub-supported-functions"></a>

Für den `String`-Parameter können Sie nicht jede beliebige Funktion verwenden. Sie müssen einen Zeichenfolgenwert angeben.

Für die Parameter `VarName` und `VarValue` stehen Ihnen die folgenden Funktionen zur Verfügung:
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](#intrinsic-function-reference-sub)
+ [`Ref`](intrinsic-function-reference-ref.md)

# `Fn::ToJsonString`
<a name="intrinsic-function-reference-ToJsonString"></a>

Die intrinsische Funktion `Fn::ToJsonString` konvertiert ein Objekt oder Array zur entsprechenden JSON-Zeichenfolge.

**Wichtig**  
Sie müssen die [`AWS::LanguageExtensions`-Transformation](transform-aws-languageextensions.md) verwenden, um die intrinsische Funktion `Fn::ToJsonString` nutzen zu können.

## Deklaration
<a name="tojsonstring-declaration"></a>

### JSON
<a name="intrinsic-function-reference-tojsonstring-syntax.json"></a>

```
{ "Fn::ToJsonString": Object }
```

```
{ "Fn::ToJsonString": Array }
```

### YAML
<a name="intrinsic-function-reference-tojsonstring-syntax.yaml"></a>

```
Fn::ToJsonString: Object
```

```
Fn::ToJsonString: Array
```

## Parameters
<a name="tojsonstring-parameters"></a>

`Object`  
Das Objekt, das zu einer JSON-Zeichenfolge konvertiert werden soll.

`Array`  
Das Array, das zu einer JSON-Zeichenfolge konvertiert werden soll.

## Rückgabewert
<a name="intrinsic-function-reference-tojsonstring-return"></a>

Das Objekt oder Array, das zu einer JSON-Zeichenfolge konvertiert wurde. 

## Beispiele
<a name="intrinsic-function-reference-tojsonstring-examples"></a>

### Ein Objekt zu einer JSON-Zeichenfolge konvertieren.
<a name="intrinsic-function-reference-tojsonstring-example-subsection"></a>

In diesem Beispiel wird das an die intrinsische Funktion übergebene Objekt zu einer JSON-Zeichenfolge konvertiert.

#### JSON
<a name="intrinsic-function-reference-tojsonstring-example.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::ToJsonString": {
            "key1": "value1",
            "key2": { 
                "Ref": "ParameterName"
            }
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-tojsonstring-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::ToJsonString: 
    key1: value1
    key2: !Ref ParameterName
#...
```

In beiden Beispielen gilt: Wenn die `Ref` des `ParameterName` zu `resolvedValue` aufgelöst wird, wird die Funktion in die folgende JSON-Zeichenfolge aufgelöst:

```
"{\"key1\":\"value1\",\"key2\":\"resolvedValue\"}"
```

### Ein Array zu einer JSON-Zeichenfolge konvertieren
<a name="intrinsic-function-reference-tojsonstring-example2"></a>

In diesem Beispiel wird das an die intrinsische Funktion übergebene Array zu einer JSON-Zeichenfolge konvertiert.

#### JSON
<a name="intrinsic-function-reference-tojsonstring-example2.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::ToJsonString": [{
            "key1": "value1",
            "key2": { 
                "Ref": "ParameterName" 
            }
        }]
//...
}
```

#### YAML
<a name="intrinsic-function-reference-tojsonstring-example2.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::ToJsonString: 
    - key1: value1
      key2: !Ref ParameterName
#...
```

In beiden Beispielen gilt: Wenn die `Ref` des `ParameterName` zu `resolvedValue` aufgelöst wird, löst sich die Funktion in die folgende JSON-Zeichenfolge auf:

```
"[{\"key1\":\"value1\"},{\"key2\":\"resolvedValue\"}]"
```

## Unterstützte Funktionen
<a name="tojsonstring-supported-functions"></a>

Sie können die folgenden Funktionen in der intrinsischen Funktion `Fn::ToJsonString` oder im Array verwenden:
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Length`
+ `Fn::Select`
+ `Fn::Split`
+ `Fn::Sub`
+ `Fn::ToJsonString`
+ `Ref`

# `Fn::Transform`
<a name="intrinsic-function-reference-transform"></a>

Die intrinsische Funktion `Fn::Transform` spezifiziert ein Makro, um eine benutzerdefinierte Verarbeitung auf einem Teil einer Stack-Vorlage durchzuführen. Makros ermöglichen Ihnen die benutzerdefinierte Verarbeitung von Vorlagen, von einfachen Aktionen wie find-and-replace Operationen bis hin zu umfangreichen Transformationen ganzer Vorlagen. *Weitere Informationen finden Sie im [Benutzerhandbuch unter Verwenden von CloudFormation Makros zur benutzerdefinierten Verarbeitung von Vorlagen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html).AWS CloudFormation *

Sie können es auch verwenden`Fn::Transform`, um die [`AWS::Include`-Transformation](transform-aws-include.md) Transformation aufzurufen. Dabei handelt es sich um ein Makro, das von CloudFormation bereitgestellt wird.

## Deklaration
<a name="intrinsic-function-reference-transform-declaration"></a>

### JSON
<a name="intrinsic-function-reference-transform-syntax.json"></a>

Syntax für den vollständigen Funktionsnamen:

```
{
    "Fn::Transform": {
        "Name": "macro name",
        "Parameters": {
            "Key": "value"
        }
    }
}
```

Syntax für die Kurzform:

```
{
    "Transform": {
        "Name": "macro name",
        "Parameters": {
            "Key": "value"
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-transform-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Fn::Transform:
  Name : macro name
  Parameters :
    Key : value
```

Syntax für die Kurzform:

```
!Transform
  Name: macro name
  Parameters:
    Key: value
```

## Parameters
<a name="intrinsic-function-reference-transform-parameters"></a>

`Name`  
Der Name des Makros, das Sie für die Verarbeitung verwenden möchten.

`Parameters`  
Die Listenparameter, die als Schlüssel-Wert-Paare angegeben sind, werden an das Makro übergeben.

## Rückgabewert
<a name="intrinsic-function-reference-transform-returnvalue"></a>

Der bearbeitete Vorlagenausschnitt, der in die bearbeitete Stack-Vorlage aufgenommen werden soll.

## Beispiele
<a name="intrinsic-function-reference-transform-examples"></a>

Das folgende Beispiel ruft die `AWS::Include`-Transformation auf und gibt an, dass im Parameter `InputValue` der Ort übergeben wird, an dem ein Vorlagenausschnitt abgerufen werden soll.

### JSON
<a name="intrinsic-function-reference-transform-example-1.json"></a>

```
{
    "Fn::Transform": {
        "Name": "AWS::Include",
        "Parameters": {
            "Location": {
                "Ref": "InputValue"
            }
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-transform-example-1.yaml"></a>

```
Fn::Transform:
  Name: AWS::Include
  Parameters:
    Location: !Ref InputValue
```

## Unterstützte Funktionen
<a name="intrinsic-function-reference-transform-supported-functions"></a>

Keine.

CloudFormation übergibt alle systeminternen Funktionsaufrufen, die im angegebenen Makro enthalten sind`Fn::Transform`, als Literalzeichenfolgen.

# `Ref`
<a name="intrinsic-function-reference-ref"></a>

Die intrinsische Funktion `Ref` gibt den Wert eines angegebenen Parameters, einer Ressource oder einer anderen intrinsischen Funktion zurück. Diese Funktion wird häufig verwendet, um Verweise zwischen Ressourcen innerhalb einer CloudFormation Vorlage zu erstellen. 

## Deklaration
<a name="ref-declaration"></a>

### JSON
<a name="intrinsic-function-reference-ref-syntax.json"></a>

```
{ "Ref" : "logicalName" }
```

```
{ "Ref" : "IntrinsicFunction" }
```

### YAML
<a name="intrinsic-function-reference-ref-syntax.yaml"></a>

Syntax für den vollständigen Funktionsnamen:

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

Syntax für die Kurzform:

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

## Parameters
<a name="ref-parameters"></a>

logicalName  
Der logische Name der Ressource oder des Parameters, die bzw. der zu referenzieren ist.

IntrinsicFunction  
Die intrinsische Funktion, die als gültige Zeichenfolge aufgelöst wird. Sie sollte Verweise auf Parameter oder Kennungen und keine logischen Ressourcenkennungen enthalten.

## Rückgabewert
<a name="ref-return-value"></a>

Der Rückgabewert von `Ref` hängt von der Art der Entität ab, auf die verwiesen wird:
+ Wenn Sie den logischen Namen eines Parameters angeben, wird der Wert des Parameters zurückgegeben. Weitere Informationen finden Sie unter [CloudFormation ParametersVorlagensyntax](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html).
+ Wenn Sie den logischen Namen einer Ressource angeben, wird ein Wert zurückgegeben, mit dem Sie diese Ressource identifizieren können. Normalerweise ist das der Name der Ressource. Für einige Ressourcen wird jedoch ein Identifikator zurückgegeben, der im Kontext der Ressource eine andere Bedeutung hat. Die Ressource `AWS::EC2::EIP` gibt zum Beispiel die IP-Adresse zurück und die Ressource `AWS::EC2::Instance` die Instance-ID. Weitere Informationen über `Ref`-Rückgabewerte für eine Ressource finden Sie in der Dokumentation für diese Ressource im Abschnitt [Ressourcen- und Eigenschaftstypen](aws-template-resource-type-ref.md).
+ Wenn Sie eine intrinsische Funktion angeben, wird die Ausgabe dieser Funktion zurückgegeben.

## Beispiele
<a name="ref-examples"></a>

### Referenzen zwischen Ressourcen erstellen
<a name="intrinsic-function-reference-ref-example"></a>

Die folgende Ressourcendeklaration für eine Elastic IP-Adresse benötigt die Instance-ID einer EC2-Instance. Sie verwendet die Funktion `Ref`, um die Instance-ID der an anderer Stelle in der Vorlage deklarierten Ressource `MyEC2Instance` anzugeben.

#### JSON
<a name="intrinsic-function-reference-ref-example.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Resources":{
  
      ...
  
    "MyEIP":{
      "Type":"AWS::EC2::EIP",
      "Properties":{
        "InstanceId":{
          "Ref":"MyEC2Instance"
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-ref-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:

  ...

  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyEC2Instance
```

### Rückgabe einer Ressourcenkennung als Stack-Ausgabe
<a name="intrinsic-function-reference-ref-example-2"></a>

Die folgenden Beispiele zeigen, wie Sie die Funktion `Ref` verwenden, um den Namen eines Amazon S3 Buckets mit dem logischen Namen `MyBucket` als Stack-Ausgabe zurückzugeben. 

#### JSON
<a name="intrinsic-function-reference-ref-example-2.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Resources":{
    "MyBucket":{
      "Type":"AWS::S3::Bucket",
      "Properties":{
        "BucketName":{
          "Fn::Sub": "${AWS::StackName}-mybucket"
        }
      }
    }
  },
  "Outputs":{
    "BucketNameOutput":{
      "Description":"The name of the S3 bucket",
      "Value":{
        "Ref":"MyBucket"
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-ref-example-2.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${AWS::StackName}-mybucket

Outputs:
  BucketNameOutput:
    Description: The name of the S3 bucket
    Value: !Ref MyBucket
```

### Verwenden Sie die intrinsische Funktion `Fn::Join` innerhalb der Funktion `Ref` .
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**Anmerkung**  
Wenn Sie die Transformation `AWS::LanguageExtensions` verwenden, können Sie `Ref` in Kombination mit anderen intrinsischen Funktionen verwenden. Für unterstützte Funktionen, siehe [Unterstützte Funktionen](#ref-supported-functions).

Die folgenden Beispiele zeigen, wie Sie mit der intrinsischen Funktion `Fn::Sub`, den Bedingungen und der Eingabe für den Parameter `Stage` Identifikatoren von Ressourcen festlegen. Die Funktionen `Ref` und die `Fn::GetAtt` Funktionen verweisen dann auf die entsprechenden Werte, die auf der Stufe basieren. `Fn::Sub`wird zuerst mit verwendet`Fn::GetAtt`, um den ARN der entsprechenden Amazon SQS SQS-Warteschlange abzurufen, um die Dimensionen des CloudWatch Amazon-Alarms festzulegen. Als nächstes wird [`Fn::Join`](intrinsic-function-reference-join.md) mit `Ref` verwendet, um den Namen des SNS-Themas für die Eigenschaft `AlarmActions` zu erstellen. 

#### JSON
<a name="ref-example-intrinsic-functions-multiple-stages.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "Stage": {
            "Type": "String",
            "Default": "Dev",
            "AllowedValues": [
                "Dev",
                "Prod"
            ]
        }
    },
    "Conditions": {
        "isProd": {
            "Fn::Equals": [
                {"Ref": "Stage"},
                "Prod"
            ]
        },
        "isDev": {
            "Fn::Equals": [
                {"Ref": "Stage"},
                "Dev"
            ]
        }
    },
    "Resources": {
        "DevQueue": {
            "Type": "AWS::SQS::Queue",
            "Condition": "isDev",
            "Properties": {
                "QueueName": {"Fn::Sub": "My${Stage}Queue"}
            }
        },
        "ProdQueue": {
            "Type": "AWS::SQS::Queue",
            "Condition": "isProd",
            "Properties": {
                "QueueName": {"Fn::Sub": "My${Stage}Queue"}
            }
        },
        "DevTopic": {
            "Condition": "isDev",
            "Type": "AWS::SNS::Topic"
        },
        "ProdTopic": {
            "Condition": "isProd",
            "Type": "AWS::SNS::Topic"
        },
        "MyAlarm": {
            "Type": "AWS::CloudWatch::Alarm",
            "Properties": {
                "AlarmDescription": "Alarm if queue depth grows beyond 10 messages",
                "Namespace": "AWS/SQS",
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Dimensions":[
                    {
                        "Name": {"Fn::Sub": "${Stage}Queue"},
                        "Value": {"Fn::GetAtt": [{"Fn::Sub": "${Stage}Queue"}, "QueueName"]}
                    }
                ],
                "Statistic": "Sum",
                "Period": 300,
                "EvaluationPeriods": 1,
                "Threshold": 10,
                "ComparisonOperator": "GreaterThanThreshold",
                "AlarmActions": [
                    {
                        "Ref": {"Fn::Join": ["", [{"Ref": "Stage"}, "Topic"]]}
                    }
                ]
            }
        }
    }
}
```

#### YAML
<a name="ref-example-intrinsic-functions-multiple-stages.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  Stage:
    Type: String
    Default: Dev
    AllowedValues:
      - Dev
      - Prod
Conditions:
  isProd: !Equals 
    - !Ref Stage
    - Prod
  isDev: !Equals 
    - !Ref Stage
    - Dev
Resources:
  DevQueue:
    Type: AWS::SQS::Queue
    Condition: isDev
    Properties:
      QueueName: !Sub My${Stage}Queue
  ProdQueu:
    Type: AWS::SQS::Queue
    Condition: isProd
    Properties:
      QueueName: !Sub My${Stage}Queue
  DevTopic:
    Condition: isDev
    Type: AWS::SNS::Topic
  ProdTopic:
    Condition: isProd
    Type: AWS::SNS::Topic
  MyAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: Alarm if queue depth grows beyond 10 messages
      Namespace: AWS/SQS
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: !Sub '${Stage}Queue'
          Value: !GetAtt 
            - !Sub '${Stage}Queue'
            - QueueName
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 10
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Ref 
          'Fn::Join':
            - ''
            - - !Ref Stage
              - Topic
```

## Unterstützte Funktionen
<a name="ref-supported-functions"></a>

Wenn Sie die Funktion [AWS::LanguageExtensions transform](transform-aws-languageextensions.md)verwenden, können Sie die folgenden Funktionen innerhalb der Funktion `Ref` verwenden.
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ `Ref`

# Regel-Funktionen
<a name="intrinsic-function-reference-rules"></a>

Regelfunktionen sind spezielle Funktionen, die nur im `Rules` Abschnitt einer CloudFormation Vorlage funktionieren. Mit diesen Funktionen können Sie Parameterwerte mit Hilfe einer benutzerdefinierten Logik validieren. Alle Validierungen finden statt, bevor Ressourcen CloudFormation erstellt oder aktualisiert werden.

Regeln sind nützlich, wenn die Standard-Parameterbeschränkungen nicht ausreichen. Wenn zum Beispiel SSL aktiviert ist, müssen sowohl ein Zertifikat als auch ein Domainnname angegeben werden. Eine Regel kann sicherstellen, dass diese Abhängigkeiten erfüllt werden.

In der Bedingung oder den Assertionen einer Regel können Sie intrinsische Funktionen wie `Fn::Equals`, `Fn::Not` und `Fn::RefAll` verwenden. Die Bedingungseigenschaft bestimmt, ob die CloudFormation Assertionen angewendet werden. Wenn die Bedingung zu ausgewertet wird`true`, werden die Assertionen CloudFormation ausgewertet, um zu überprüfen, ob ein Parameterwert gültig ist, wenn ein Stack erstellt oder aktualisiert wird. Wenn ein Parameterwert nicht gültig ist, wird der CloudFormation Stack nicht erstellt oder aktualisiert. Wenn die Bedingung als 0 ausgewertet wird`false`, CloudFormation wird der Parameterwert nicht überprüft und der Stackvorgang wird fortgesetzt.

Wenn Sie mit der Verwendung von Regeln in Ihren Vorlagen noch nicht vertraut sind, empfehlen wir Ihnen, zuerst das Thema zur [CloudFormation RulesVorlagensyntax](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html) im *AWS CloudFormation Benutzerhandbuch* zu lesen.

**Topics**
+ [`Fn::And`](#fn-and)
+ [`Fn::Contains`](#fn-contains)
+ [`Fn::EachMemberEquals`](#fn-eachmemberequals)
+ [`Fn::EachMemberIn`](#fn-eachmemberin)
+ [`Fn::Equals`](#fn-equals)
+ [`Fn::Not`](#fn-not)
+ [`Fn::Or`](#fn-or)
+ [`Fn::RefAll`](#fn-refall)
+ [`Fn::ValueOf`](#fn-valueof)
+ [`Fn::ValueOfAll`](#fn-valueofall)
+ [Unterstützte Funktionen](#supported-rule-functions)
+ [Unterstützte Attribute](#rules-parameter-attributes)

## `Fn::And`
<a name="fn-and"></a>

Gibt `true` zurück, wenn alle angegebenen Bedingungen `true` ergeben, oder gibt `false` zurück, wenn eine der Bedingungen mit `false` ausgewertet wird. `Fn::And` dient als AND-Operator. Sie können mindestens 2 und höchstens 10 Bedingungen verwenden.

### Deklaration
<a name="fn-and-declaration"></a>

```
"Fn::And" : [{condition}, {...}]
```

### Parameters
<a name="fn-and-parameters"></a>

*Bedingung*  
Eine regelspezifische intrinsische Funktion, die mit `true` oder `false` ausgewertet wird.

### Beispiel
<a name="fn-and-example"></a>

Das folgende Beispiel ergibt `true`, wenn der Name der referenzierten Sicherheitsgruppe `sg-mysggroup` entspricht und der Parameterwert `InstanceType` entweder `t3.large` oder `t3.small` ist:

```
"Fn::And": [
  {
    "Fn::Equals": [
      "sg-mysggroup",
      {"Ref": "ASecurityGroup"}
    ]
  },
  {
    "Fn::Contains": [
      [
        "t3.large",
        "t3.small"
      ],
      {"Ref": "InstanceType"}
    ]
  }
]
```

## `Fn::Contains`
<a name="fn-contains"></a>

Gibt `true` zurück, wenn eine angegebene Zeichenfolge mindestens einem Wert in einer Liste von Zeichenfolgen entspricht.

### Deklaration
<a name="fn-contains-declaration"></a>

```
"Fn::Contains" : [[list_of_strings], string]
```

### Parameters
<a name="fn-contains-parameters"></a>

*list\$1of\$1strings*  
Eine Liste mit Zeichenfolgen, z. B. `"A", "B", "C"`

*Zeichenfolge*  
Eine Zeichenfolge, z. B. `"A"`, die Sie mit einer Liste von Zeichenfolgen vergleichen.

### Beispiel
<a name="fn-contains-example"></a>

Die folgende Funktion ergibt `true`, wenn der Parameterwert `InstanceType` in der Liste (`t3.large` oder `t3.small`) enthalten ist:

```
"Fn::Contains" : [
  ["t3.large", "t3.small"], {"Ref" : "InstanceType"}
]
```

## `Fn::EachMemberEquals`
<a name="fn-eachmemberequals"></a>

Gibt `true` zurück, wenn eine angegebene Zeichenfolge allen Werten in einer Liste entspricht.

### Deklaration
<a name="fn-eachmemberequals-declaration"></a>

```
"Fn::EachMemberEquals" : [[list_of_strings], string]
```

### Parameters
<a name="fn-eachmemberequals-parameters"></a>

*list\$1of\$1strings*  
Eine Liste mit Zeichenfolgen, z. B. `"A", "B", "C"`

*Zeichenfolge*  
Eine Zeichenfolge, z. B. `"A"`, die Sie mit einer Liste von Zeichenfolgen vergleichen.

### Beispiel
<a name="fn-eachmemberequals-example"></a>

Die folgende Funktion gibt `true` zurück, wenn das Tag `Department` für alle Parameter vom Typ `AWS::EC2::VPC::Id` einen Wert von `IT` hat:

```
"Fn::EachMemberEquals" : [
  {"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]}, "IT"
]
```

## `Fn::EachMemberIn`
<a name="fn-eachmemberin"></a>

Gibt `true` zurück, wenn jedes Element in einer Liste von Zeichenfolgen mindestens einem Wert in einer zweiten Zeichenfolgenliste entspricht.

### Deklaration
<a name="fn-eachmemberin-declaration"></a>

```
"Fn::EachMemberIn" : [[strings_to_check], [strings_to_match]]
```

### Parameters
<a name="fn-eachmemberin-parameters"></a>

*strings\$1to\$1check*  
Eine Liste von Zeichenketten, wie `"A", "B", "C"` z. CloudFormation prüft, ob jedes Element im `strings_to_check` Parameter im `strings_to_match` Parameter enthalten ist.

*strings\$1to\$1match*  
Eine Liste mit Zeichenfolgen, z. B. `"A", "B", "C"`. Jedes Element im Parameter `strings_to_match` wird mit den Elementen des Parameters `strings_to_check` verglichen.

### Beispiel
<a name="fn-eachmemberin-example"></a>

Die folgende Funktion überprüft, ob die Benutzer ein Subnetz angeben, das sich in einer gültigen Virtual Private Cloud (VPC) befindet. Die VPC muss sich in dem Konto und in der Region befinden, in dem bzw. der die Benutzer mit dem Stack arbeiten. Die Funktion gilt für alle Parameter des Typs `AWS::EC2::Subnet::Id`.

```
"Fn::EachMemberIn" : [ 
  {"Fn::ValueOfAll" : ["AWS::EC2::Subnet::Id", "VpcId"]}, {"Fn::RefAll" : "AWS::EC2::VPC::Id"}
]
```

## `Fn::Equals`
<a name="fn-equals"></a>

Vergleicht zwei Werte, um festzustellen, ob sie gleich sind. Gibt `true` zurück, wenn die beiden Werte gleich sind, und `false`, wenn sie nicht gleich sind.

### Deklaration
<a name="fn-equals-declaration"></a>

```
"Fn::Equals" : ["value_1", "value_2"]
```

### Parameters
<a name="fn-equals-parameters"></a>

*`value`*  
Ein Wert eines beliebigen Typs, den Sie mit einem anderen Wert vergleichen.

### Beispiel
<a name="fn-equals-example"></a>

Das folgende Beispiel ergibt `true`, wenn der Wert für den Parameter `EnvironmentType` `prod` entspricht:

```
"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]
```

## `Fn::Not`
<a name="fn-not"></a>

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
<a name="fn-not-declaration"></a>

```
"Fn::Not" : [{condition}]
```

### Parameters
<a name="fn-not-parameters"></a>

*`condition`*  
Eine regelspezifische intrinsische Funktion, die mit `true` oder `false` ausgewertet wird.

### Beispiel
<a name="fn-not-example"></a>

Das folgende Beispiel ergibt `true`, wenn der Wert für den Parameter `EnvironmentType` `prod` nicht entspricht:

```
"Fn::Not" : [{"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]}]
```

## `Fn::Or`
<a name="fn-or"></a>

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. Sie können mindestens 2 und höchstens 10 Bedingungen verwenden.

### Deklaration
<a name="fn-or-declaration"></a>

```
"Fn::Or" : [{condition}, {...}]
```

### Parameters
<a name="fn-or-parameters"></a>

*`condition`*  
Eine regelspezifische intrinsische Funktion, die mit `true` oder `false` ausgewertet wird.

### Beispiel
<a name="fn-or-example"></a>

Das folgende Beispiel ergibt `true`, wenn der Name der referenzierten Sicherheitsgruppe `sg-mysggroup` entspricht oder der Parameterwert `InstanceType` entweder `t3.large` oder `t3.small` ist:

```
"Fn::Or" : [
  {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
  {"Fn::Contains" : [["t3.large", "t3.small"], {"Ref" : "InstanceType"}]}
]
```

## `Fn::RefAll`
<a name="fn-refall"></a>

Gibt alle Werte für einen bestimmten Parametertyp zurück.

### Deklaration
<a name="fn-refall-declaration"></a>

```
"Fn::RefAll" : "parameter_type"
```

### Parameters
<a name="fn-refall-parameters"></a>

*parameter\$1type*  
Ein AWS-spezifischer Parametertyp, z. B. `AWS::EC2::SecurityGroup::Id` oder`AWS::EC2::VPC::Id`. Weitere Informationen finden Sie im *AWS CloudFormation Benutzerhandbuch* unter [Unterstützte AWS-spezifische Parametertypen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported).

### Beispiel
<a name="fn-refall-example"></a>

Die folgende Funktion gibt eine Liste aller VPC IDs für die Region zurück, AWS-Konto in der der Stack erstellt oder aktualisiert wird:

```
"Fn::RefAll" : "AWS::EC2::VPC::Id"
```

## `Fn::ValueOf`
<a name="fn-valueof"></a>

Gibt einen Attributwert oder eine Liste der Werte für einen bestimmten Parameter und ein Attribut zurück.

### Deklaration
<a name="fn-valueof-declaration"></a>

```
"Fn::ValueOf" : [ "parameter_logical_id", "attribute" ]
```

### Parameters
<a name="fn-valueof-parameters"></a>

*Attribut*  
Der Name eines Attributs, von dem ein Wert abgerufen werden soll. Weitere Informationen zu Attributen finden Sie unter [Unterstützte Attribute](#rules-parameter-attributes).

*parameter\$1logical\$1id*  
Der Name eines Parameters, von dem Attributwerte abgerufen werden sollen. Der Parameter muss im `Parameters`-Abschnitt der Vorlage definiert sein.

### Beispiele
<a name="fn-valueof-examples"></a>

Das folgende Beispiel gibt den Wert des `Department`-Tags für die VPC zurück, die vom Parameter `ElbVpc` angegeben wird:

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

Wenn Sie mehrere Werte für einen Parameter angeben, kann die ValueOf Funktion Fn:: eine Liste zurückgeben. Beispielsweise können Sie mehrere Subnetze angeben und eine Liste mit Availability Zones erhalten, wobei jedes Element die Availability Zone eines bestimmten Subnetzes ist:

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

Gibt eine Liste mit allen Attributwerten für einen bestimmten Parametertyp und ein Attribut zurück.

### Deklaration
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

### Parameters
<a name="fn-valueofall-parameters"></a>

*Attribut*  
Der Name eines Attributs, von dem Sie einen Wert abrufen möchten. Weitere Informationen zu Attributen finden Sie unter [Unterstützte Attribute](#rules-parameter-attributes).

*parameter\$1type*  
Ein AWS-spezifischer Parametertyp, z. B. `AWS::EC2::SecurityGroup::Id` oder`AWS::EC2::VPC::Id`. Weitere Informationen finden Sie im *AWS CloudFormation Benutzerhandbuch* unter [Unterstützte AWS-spezifische Parametertypen](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported).

### Beispiel
<a name="fn-valueofall-example"></a>

Im folgenden Beispiel gibt die `Fn::ValueOfAll` Funktion eine Werteliste zurück, wobei jedes Element der `Department` Tag-Wert für VPCs dieses Tag ist:

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## Unterstützte Funktionen
<a name="supported-rule-functions"></a>

Sie können innerhalb der Funktionen `Fn::ValueOf` und `Fn::ValueOfAll` keine andere Funktion verwenden. Allerdings können Sie die folgenden Funktionen in allen anderen regelspezifischen intrinsischen Funktionen verwenden:
+ `Ref`
+ Andere regelspezifische intrinsische Funktionen

## Unterstützte Attribute
<a name="rules-parameter-attributes"></a>

Die folgende Liste beschreibt die Attributwerte, die Sie für bestimmte Ressourcen und Parametertypen abrufen können:

Der `AWS::EC2::VPC::Id` Parametertyp oder VPC IDs.  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ Tags.*tag\$1key*

Der `AWS::EC2::Subnet::Id` Parametertyp oder das IDs Subnetz,  
+ AvailabilityZone
+ Tags.*tag\$1key*
+ VpcId

Der `AWS::EC2::SecurityGroup::Id` Parametertyp oder die Sicherheitsgruppe IDs.  
+ Tags.*tag\$1key*