CloudFormation ResourcesVorlagensyntax - 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.

CloudFormation ResourcesVorlagensyntax

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

Der Abschnitt Resources verwendet die folgende Syntax:

JSON

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

YAML

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

Logische ID (auch logischer Namegenannt)

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

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.

ResourceProperties

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.

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

"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 physische IDs , 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 einzusehen.

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

Ressourcen referenzieren

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

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

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

YAML

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

Ausführlichere Informationen über die Funktion Ref finden Sie unter Ref.

Die Funktion Fn::GetAtt

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

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

YAML

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

Ausführlichere Informationen über die Funktion GetAtt 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 in derselben Vorlage definiert sind, und auf vorhandene AWS Ressourcen.

Deklarieren einer einzelnen Ressource mit einem benutzerdefinierten Namen

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-bucketeingestellt, 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, wie z. B. eine EC2 Amazon-Instance oder eine Amazon EC2 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

Verweis auf andere Ressourcen mit der Funktion Ref .

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

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

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