Resources - AWS CloudFormation

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

Resources

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

Syntax

Der Resources Abschnitt verwendet die folgende Syntax:

JSON

"Resources" : { "LogicalResourceName1" : { "Type" : "AWS::ProductIdentifier::ResourceType", "Properties" : { "PropertyName1" : "PropertyValue1", ... } }, "LogicalResourceName2" : { "Type" : "AWS::ProductIdentifier::ResourceType", "Properties" : { "PropertyName1" : "PropertyValue1", ... } } }

YAML

Resources: LogicalResourceName1: Type: AWS::ProductIdentifier::ResourceType Properties: PropertyName1: PropertyValue1 ... LogicalResourceName2: Type: AWS::ProductIdentifier::ResourceType Properties: PropertyName1: PropertyValue1 ...

Logische ID (auch logischer Name genannt)

Innerhalb einer CloudFormation Vorlage werden Ressourcen anhand ihrer logischen Ressourcennamen identifiziert. Diese Namen müssen alphanumerisch (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

Jede Ressource muss ein Type Attribut haben, das die Art von definiert AWS Ressource ist es. Das Type Attribut hat das FormatAWS::ProductIdentifier::ResourceType. Das Type Attribut für einen Amazon S3 S3-Bucket lautet beispielsweiseAWS::S3::Bucket.

Die vollständige Liste der unterstützten Ressourcentypen finden Sie unterAWS Referenz zu Ressourcen- und Eigenschaftstypen.

ResourceProperties

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

Einzelheiten zu den Eigenschaften, die für die einzelnen Ressourcentypen unterstützt werden, finden Sie in den Themen unterAWS Referenz zu Ressourcen- und Eigenschaftstypen.

Eigenschaftswerte können Literalzeichenfolgen, Zeichenfolgenlisten, Boolesche Werte, dynamische Verweise, Parameterverweise, Pseudoverweise oder der von einer Funktion zurückgegebene Wert sein. Die folgenden Beispiele zeigen, wie Sie verschiedene Eigenschaftswerttypen deklarieren:

JSON

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

YAML

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

Physische ID

Zusätzlich zur logischen ID haben bestimmte Ressourcen auch eine physische ID, bei der es sich um den tatsächlich zugewiesenen Namen für diese Ressource handelt, z. B. eine EC2 Instanz-ID oder einen S3-Bucket-Namen. Verwenden Sie die physischeIDs, um Ressourcen außerhalb von CloudFormation Vorlagen zu identifizieren, aber erst, nachdem die Ressourcen erstellt wurden. Nehmen wir beispielsweise an, Sie geben einer EC2 Instanzressource die logische ID vonMyEC2Instance. Beim CloudFormation Erstellen der Instanz CloudFormation wird automatisch eine physische ID (z. B.i-1234567890abcdef0) generiert und ihr zugewiesen. Sie können diese physische ID verwenden, um die Instance zu identifizieren und ihre Eigenschaften (wie den DNS Namen) mithilfe der EC2 Amazon-Konsole anzuzeigen.

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 habenMyStack, CloudFormation könnten Sie den Bucket mit dem folgenden physischen Namen benennenMyStack-MyBucket-abcdefghijk1.

Für Ressourcen, die benutzerdefinierte Namen unterstützen, können Sie Ihre eigenen physischen Namen zuweisen, um Ressourcen schnell identifizieren zu 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.

Ressourcen referenzieren

Oft müssen Sie Eigenschaften für eine Ressource festlegen, die auf dem Namen oder der Eigenschaft einer anderen Ressource basieren. Sie können beispielsweise eine EC2 Instanz 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

Die Ref Funktion wird häufig verwendet, um eine identifizierende Eigenschaft von Ressourcen abzurufen, die in derselben CloudFormation Vorlage definiert sind. Was sie zurückgibt, hängt von der Art der Ressource ab. Bei den meisten Ressourcen wird der physische Name der Ressource zurückgegeben. Bei einigen 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-Ressourcenname (ARN) für ein SNS Amazon-Thema.

Die folgenden Beispiele zeigen, wie die Ref Funktion in Eigenschaften verwendet wird. In jedem dieser Beispiele gibt die Ref Funktion den tatsächlichen Namen der LogicalResourceName Ressource zurück, die an anderer Stelle in der Vorlage deklariert wurde. Das !Ref Syntaxbeispiel im YAML Beispiel ist nur eine kürzere Art, die Ref Funktion zu schreiben.

JSON

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

YAML

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

Ausführlichere Informationen zur Ref Funktion finden Sie unter Ref-Funktion.

Die Funktion Fn::GetAtt

Die Ref Funktion ist hilfreich, wenn der Parameter oder der für eine Ressource zurückgegebene Wert genau Ihren Wünschen entspricht. Möglicherweise benötigen Sie jedoch andere Attribute einer Ressource. Wenn Sie beispielsweise eine CloudFront Distribution mit einem S3-Ursprung erstellen möchten, müssen Sie den Bucket-Standort mithilfe einer Adresse DNS im -Format 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 Fn::GetAtt Funktion.

Die folgenden Beispiele zeigen, wie die GetAtt Funktion in Eigenschaften verwendet wird. Die Fn::GetAtt Funktion benötigt zwei Parameter, den logischen Namen der Ressource und den Namen des abzurufenden Attributs. Das !GetAtt Syntaxbeispiel im YAML Beispiel ist nur eine kürzere Art, die GetAtt Funktion zu schreiben.

JSON

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

YAML

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

Ausführlichere Informationen zur GetAtt Funktion finden Sie unter Fn:: GetAtt.

Beispiele

Die folgenden Beispiele veranschaulichen, wie Ressourcen deklariert werden und wie CloudFormation Vorlagen auf andere Ressourcen verweisen können, die innerhalb derselben Vorlage definiert sind und bereits vorhanden sind AWS Ressourcen schätzen.

Eine einzelne Ressource mit einem benutzerdefinierten Namen deklarieren

Im folgenden Beispiel wird eine einzelne Ressource vom Typ AWS::S3::Bucket mit dem logischen Namen deklariert. MyBucket Die BucketName Eigenschaft ist auf gesetzt amzn-s3-demo-bucket, der durch den gewünschten Namen für Ihren S3-Bucket ersetzt werden sollte.

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 EC2 Amazon-Instance oder eine Auto Scaling Scaling-Gruppe, CloudFormation sind weitere Informationen erforderlich.

JSON

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

YAML

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

Referenzieren anderer Ressourcen mit der Funktion Ref

Die folgenden Beispiele zeigen eine Ressourcendeklaration, die eine EC2 Instanz und eine Sicherheitsgruppe definiert. Die Ec2Instance Ressource verweist mithilfe der Ref Funktion als Teil ihrer SecurityGroupIds Eigenschaft auf die InstanceSecurityGroup Ressource. Sie enthält auch eine vorhandene Sicherheitsgruppe (sg-12a4c434), die nicht in der Vorlage deklariert ist. Sie verwenden Literalzeichenfolgen, um auf bestehende zu verweisen AWS Ressourcen schätzen.

JSON

{ "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

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 mithilfe der Funktion Fn::GetAtt

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, die die Fn::GetAtt Funktion verwendet, um das DomainName Bucket-Attribut abzurufen. Sie werden feststellen, dass die Fn::GetAtt Funktion ihre beiden Parameter in einem Array auflistet. Bei Funktionen mit mehreren Parametern werden diese in einem Array angegeben.

JSON

{ "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

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