

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# CloudFormation ResourcesVorlagensyntax
<a name="resources-section-structure"></a>

Der `Resources` Abschnitt ist ein erforderlicher Abschnitt auf oberster Ebene in einer CloudFormation Vorlage. Er deklariert die AWS Ressourcen, die Sie als Teil Ihres Stacks bereitstellen und konfigurieren möchten CloudFormation .

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

Der Abschnitt `Resources` verwendet die folgende Syntax:

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

```
"Resources" : {
    "LogicalResourceName1" : {
        "Type" : "AWS::ServiceName::ResourceType",
        "Properties" : {
            "PropertyName1" : "PropertyValue1",
            ...
        }
    },

    "LogicalResourceName2" : {
        "Type" : "AWS::ServiceName::ResourceType",
        "Properties" : {
            "PropertyName1" : "PropertyValue1",
            ...
        }
    }
}
```

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

```
Resources:
  LogicalResourceName1:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1
      ...

  LogicalResourceName2:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1
      ...
```

## Logische ID (auch *logischer Name*genannt)
<a name="resources-section-logical-id"></a>

Innerhalb einer CloudFormation Vorlage werden Ressourcen anhand ihrer logischen Ressourcennamen identifiziert. Diese Namen müssen alphanumerisch sein (A-Za-z0-9) und innerhalb der Vorlage eindeutig sein. Logische Namen werden verwendet, um auf Ressourcen aus anderen Abschnitten der Vorlage zu verweisen. 

## Ressourcentyp
<a name="resources-section-resource-type"></a>

Jede Ressource muss ein `Type`-Attribut haben, das die Art der AWS -Ressource definiert. Das Attribut `Type` hat das Format `AWS::ServiceName::ResourceType`. Das Attribut `Type` für einen Amazon S3-Bucket lautet zum Beispiel `AWS::S3::Bucket`. 

Eine vollständige Liste der unterstützten Ressourcentypen finden Sie in der Referenz [AWS Ressourcen- und Eigenschaftstypen](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).

## ResourceProperties
<a name="resources-section-resource-properties"></a>

Ressourceneigenschaften sind zusätzliche Optionen, die Sie angeben können, um Konfigurationsdetails für den spezifischen Ressourcentyp zu definieren. Einige Eigenschaften sind erforderlich, während andere optional sind. Einige Eigenschaften haben Standardwerte, so dass die Angabe dieser Eigenschaften optional ist.

Einzelheiten zu den Eigenschaften, die für jeden Ressourcentyp unterstützt werden, finden Sie in den Themen unter [AWS Ressourcen- und Eigenschaftstypen Referenz](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).

Eigenschaftswerte können literale Strings, Listen von Strings, Boolesche Werte, dynamische Referenzen, Parameterreferenzen, Pseudoreferenzen oder der von einer Funktion zurückgegebene Wert sein. Die folgenden Beispiele zeigen Ihnen, wie Sie verschiedene Arten von Eigenschaftswerten deklarieren können:

### JSON
<a name="resource-properties-example.json"></a>

```
"Properties" : {
    "String" : "A string value",
    "Number" : 123,
    "LiteralList" : [ "first-value", "second-value" ],
    "Boolean" : true
}
```

### YAML
<a name="resource-properties-example.yaml"></a>

```
Properties:
  String: A string value 
  Number: 123
  LiteralList:
    - first-value
    - second-value
  Boolean: true
```

## Physische ID
<a name="resources-section-physical-id"></a>

Neben einer logischen ID haben bestimmte Ressourcen auch eine physische ID. Sie ist der tatsächliche Name, der dieser Ressource zugewiesen ist, zum Beispiel die ID einer EC2-Instance oder der Name eines S3-Buckets. Verwenden Sie die physischen IDs, um Ressourcen außerhalb von CloudFormation Vorlagen zu identifizieren, jedoch erst, nachdem die Ressourcen erstellt wurden. Angenommen, Sie geben einer EC2-Instance-Ressource eine logische ID von `MyEC2Instance`. Beim CloudFormation Erstellen der Instanz CloudFormation wird automatisch eine physische ID (z. B.`i-1234567890abcdef0`) generiert und der Instanz zugewiesen. Diese physische ID können Sie verwenden, um die Instance zu referenzieren und ihre Eigenschaften (beispielsweise den DNS-Namen) über die Amazon-EC2-Konsole abzurufen. 

Generiert für Amazon S3 S3-Buckets und viele andere Ressourcen CloudFormation automatisch einen eindeutigen physischen Namen für die Ressource, wenn Sie keinen explizit angeben. Dieser physische Name basiert auf einer Kombination aus dem Namen des CloudFormation Stacks, dem in der CloudFormation Vorlage angegebenen logischen Namen der Ressource und einer eindeutigen ID. Wenn Sie beispielsweise einen Amazon S3 S3-Bucket mit dem logischen Namen `MyBucket` in einem Stack namens haben`MyStack`, CloudFormation könnten Sie den Bucket mit dem folgenden physischen Namen benennen`MyStack-MyBucket-abcdefghijk1`.

Für Ressourcen, die benutzerdefinierte Namen unterstützen, können Sie Ihre eigenen physischen Namen vergeben, damit Sie die Ressourcen schnell identifizieren können. So können Sie einem S3-Bucket, in dem Protokolle gespeichert werden, zum Beispiel den Namen `MyPerformanceLogs` geben. Weitere Informationen finden Sie unter [Namenstyp](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html).

## Ressourcen referenzieren
<a name="using-cross-resource-references"></a>

Oft müssen Sie die Eigenschaften einer Ressource auf der Grundlage des Namens oder der Eigenschaft einer anderen Ressource festlegen. Sie könnten beispielsweise eine EC2-Instance erstellen, die EC2-Sicherheitsgruppen verwendet, oder eine CloudFront Distribution, die von einem S3-Bucket unterstützt wird. All diese Ressourcen können in derselben CloudFormation Vorlage erstellt werden. 

CloudFormation stellt systemeigene Funktionen bereit, mit denen Sie auf andere Ressourcen und deren Eigenschaften verweisen können. Mit diesen Funktionen können Sie Abhängigkeiten zwischen Ressourcen erstellen und Werte von einer Ressource an eine andere übergeben.

### Die Funktion `Ref`
<a name="resource-properties-ref"></a>

Die `Ref` Funktion wird häufig verwendet, um eine identifizierende Eigenschaft von Ressourcen abzurufen, die in derselben CloudFormation Vorlage definiert sind. Was er zurückgibt, hängt von der Art der Ressource ab. Für die meisten Ressourcen gibt es den physischen Namen der Ressource zurück. Für einige Ressourcentypen wird jedoch möglicherweise ein anderer Wert zurückgegeben, z. B. eine IP-Adresse für eine `AWS::EC2::EIP`-Ressource oder ein Amazon Resource Name (ARN) für ein Amazon SNS-Thema. 

Die folgenden Beispiele zeigen, wie Sie die Funktion `Ref` in Eigenschaften verwenden können. In jedem dieser Beispiele gibt die Funktion `Ref` den tatsächlichen Namen der an anderer Stelle in der Vorlage deklarierten Ressource `LogicalResourceName` zurück. Das `!Ref`-Syntaxbeispiel im YAML-Beispiel ist nur eine kürzere Schreibweise für die `Ref`-Funktion.

#### JSON
<a name="resource-properties-ref-example.json"></a>

```
"Properties" : {
    "PropertyName" : { "Ref" : "LogicalResourceName" }
}
```

#### YAML
<a name="resource-properties-ref-example.yaml"></a>

```
Properties:
  PropertyName1:
    Ref: LogicalResourceName
  PropertyName2: !Ref LogicalResourceName
```

Ausführlichere Informationen über die Funktion `Ref` finden Sie unter [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html). 

### Die Funktion `Fn::GetAtt`
<a name="resource-properties-getatt"></a>

Die Funktion `Ref` ist hilfreich, wenn der Parameter oder der für eine Ressource zurückgegebene Wert genau das ist, was Sie wollen. Es kann jedoch sein, dass Sie andere Attribute einer Ressource benötigen. Wenn Sie beispielsweise eine CloudFront Distribution mit einem S3-Ursprung erstellen möchten, müssen Sie den Bucket-Standort mithilfe einer Adresse im DNS-Stil angeben. Eine Reihe von Ressourcen haben zusätzliche Attribute, deren Werte Sie in Ihrer Vorlage verwenden können. Um diese Attribute zu erhalten, verwenden Sie die Funktion `Fn::GetAtt` .

Die folgenden Beispiele zeigen, wie Sie die Funktion `GetAtt` in Eigenschaften verwenden können. Die Funktion `Fn::GetAtt` benötigt zwei Parameter, den logischen Namen der Ressource und den Namen des Attributs, das abgerufen werden soll. Das `!GetAtt`-Syntaxbeispiel im YAML-Beispiel ist nur eine kürzere Schreibweise für die `GetAtt`-Funktion.

#### JSON
<a name="resource-properties-getatt-example.json"></a>

```
"Properties" : {
    "PropertyName" : {
        "Fn::GetAtt" : [ "LogicalResourceName", "AttributeName" ]
    }
}
```

#### YAML
<a name="resource-properties-getatt-example.yaml"></a>

```
Properties:
  PropertyName1:
    Fn::GetAtt:
      - LogicalResourceName
      - AttributeName
  PropertyName2: !GetAtt LogicalResourceName.AttributeName
```

Ausführlichere Informationen über die Funktion `GetAtt` finden Sie unter [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getatt.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getatt.html).

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

Die folgenden Beispiele veranschaulichen, wie Ressourcen deklariert werden und wie CloudFormation Vorlagen auf andere Ressourcen verweisen können, die in derselben Vorlage definiert sind, und auf vorhandene AWS Ressourcen.

**Topics**
+ [Deklarieren einer einzelnen Ressource mit einem benutzerdefinierten Namen](#resources-section-structure-examples-single-resource)
+ [Verweis auf andere Ressourcen mit der Funktion `Ref` .](#resources-section-structure-examples-ref)
+ [Referenzieren von Ressourcenattributen mit der Funktion `Fn::GetAtt` .](#resources-section-structure-examples-getatt)

### Deklarieren einer einzelnen Ressource mit einem benutzerdefinierten Namen
<a name="resources-section-structure-examples-single-resource"></a>

Die folgenden Beispiele deklarieren eine einzelne Ressource vom Typ `AWS::S3::Bucket` mit dem logischen Namen `MyBucket`. Die Eigenschaft `BucketName` ist auf *amzn-s3-demo-bucket*eingestellt, die Sie durch den gewünschten Namen für Ihren S3-Bucket ersetzen sollten.

Wenn Sie diese Ressourcendeklaration verwenden, um einen Stack zu erstellen, CloudFormation wird ein Amazon S3 S3-Bucket mit Standardeinstellungen erstellt. Für andere Ressourcen, z. B. eine Amazon EC2 EC2-Instance oder eine Auto Scaling Scaling-Gruppe, CloudFormation sind weitere Informationen erforderlich.

#### JSON
<a name="resources-section-structure-examples-single-resource.json"></a>

```
{
    "Resources": {
        "MyBucket": {
            "Type": "AWS::S3::Bucket",
            "Properties": {
                "BucketName": "amzn-s3-demo-bucket"
            }
        }
    }
}
```

#### YAML
<a name="resources-section-structure-examples-single-resource.yaml"></a>

```
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: amzn-s3-demo-bucket
```

### Verweis auf andere Ressourcen mit der Funktion `Ref` .
<a name="resources-section-structure-examples-ref"></a>

Die folgenden Beispiele zeigen eine Ressourcendeklaration, die eine EC2-Instance und eine Sicherheitsgruppe definiert. Die `Ec2Instance`-Ressource referenziert die `InstanceSecurityGroup`-Ressource als Teil ihrer `SecurityGroupIds`-Eigenschaft unter Verwendung der `Ref`-Funktion. Sie enthält auch eine bestehende Sicherheitsgruppe (`sg-12a4c434`), die nicht in der Vorlage deklariert ist. Verwenden Sie Literalzeichenfolgen, um auf eine vorhandene AWS -Ressource zu verweisen.

#### JSON
<a name="resources-section-structure-examples-ref.json"></a>

```
{
    "Resources": {
        "Ec2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "SecurityGroupIds": [
                    {
                        "Ref": "InstanceSecurityGroup"
                    },
                    "sg-12a4c434"
                ],
                "KeyName": "MyKey",
                "ImageId": "ami-1234567890abcdef0"
            }
        },
        "InstanceSecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "Enable SSH access via port 22",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 22,
                        "ToPort": 22,
                        "CidrIp": "0.0.0.0/0"
                    }
                ]
            }
        }
    }
}
```

#### YAML
<a name="resources-section-structure-examples-ref.yaml"></a>

```
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup
        - sg-12a4c434
      KeyName: MyKey
      ImageId: ami-1234567890abcdef0
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
```

### Referenzieren von Ressourcenattributen mit der Funktion `Fn::GetAtt` .
<a name="resources-section-structure-examples-getatt"></a>

Die folgenden Beispiele zeigen eine Ressourcendeklaration, die eine CloudFront Verteilungsressource und einen S3-Bucket definiert. Die `MyDistribution`-Ressource gibt den DNS-Namen der `MyBucket`-Ressource an und verwendet die `Fn::GetAtt`-Funktion, um das `DomainName`-Attribut des Buckets zu erhalten. Sie werden feststellen, dass die Funktion `Fn::GetAtt` ihre beiden Parameter in einem Array auflistet. Bei Funktionen mit mehreren Parametern werden diese in einem Array angegeben.

#### JSON
<a name="resources-section-structure-examples-getatt.json"></a>

```
{
  "Resources": {
    "MyBucket": {
      "Type": "AWS::S3::Bucket"
    },
    "MyDistribution": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "Origins": [
            {
              "DomainName": {
                "Fn::GetAtt": [
                  "MyBucket",
                  "DomainName"
                ]
              },
              "Id": "MyS3Origin",
              "S3OriginConfig": {}
            }
          ],
          "Enabled": "true",
          "DefaultCacheBehavior": {
            "TargetOriginId": "MyS3Origin",
            "ForwardedValues": {
              "QueryString": "false"
            },
            "ViewerProtocolPolicy": "allow-all"
          }
        }
      }
    }
  }
}
```

#### YAML
<a name="resources-section-structure-examples-getatt.yaml"></a>

```
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
  MyDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: !GetAtt 
              - MyBucket
              - DomainName
            Id: MyS3Origin
            S3OriginConfig: {}
        Enabled: 'true'
        DefaultCacheBehavior:
          TargetOriginId: MyS3Origin
          ForwardedValues:
            QueryString: 'false'
          ViewerProtocolPolicy: allow-all
```