Übersicht der Vorlagen - 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.

Übersicht der Vorlagen

Dieses Thema bietet eine Einführung in die wichtigsten Bestandteile einer Vorlage und deren Verwendung.

Sie können die Abschnitte auf dieser Seite verwenden, um Folgendes über Vorlagen zu erfahren:

  • Deklarieren von Ressourcen und deren Eigenschaften.

  • Referenzieren anderer Ressourcen mit der Ref Funktion und Ressourcenattributen unter Verwendung der Fn::GetAtt Funktion.

  • Verwendung von Parametern zur Angabe von Werten zum Zeitpunkt der Stack-Erstellung und Verwendung von Einschränkungen zur Validierung der Parametereingabe.

  • Verwenden von Zuweisungen zur Bestimmung bedingter Werte.

  • Verwendung der Fn::Join Funktion zum Konstruieren von Werten auf der Grundlage von Parametern, Ressourcenattributen und anderen Zeichenketten.

  • Verwenden von Ausgabewerten zum Erfassen von Informationen zu Stack-Ressourcen

Über Vorlagen

Eine CloudFormation Vorlage ist eine Deklaration der AWS Ressourcen, aus denen ein Stapel besteht. Die Vorlage ist eine Textdatei, die bestimmten Formatierungsregeln folgt und entweder den JavaScript Object Notation (JSON) oder den YAML-Standard verwendet. Da es sich bei Vorlagen um Textdateien handelt, können Sie sie in jedem Texteditor erstellen und bearbeiten und sie zusammen mit dem Rest Ihres Quellcodes in Ihrem Quellcodeverwaltungssystem verwalten.

In der Vorlage deklarieren Sie die AWS Ressourcen, die Sie erstellen möchten. Sie definieren jede Ressource als eine Reihe von Eigenschaften und Werten unter Verwendung der Syntaxregeln des ausgewählten Formats (JSON oder YAML).

Vorlagen haben unterschiedliche Abschnitte, aber der einzige erforderliche Abschnitt ist der Resources Abschnitt, in dem mindestens eine Ressource deklariert werden muss.

Beispiele, die die vollständige Struktur einer Vorlage mit allen verfügbaren Abschnitten zeigen, finden Sie unterVorlagenformate. Eine Liste der Ressourcen, mit denen Sie etwas erstellen können CloudFormation, finden Sie unterAWS Referenz zu Ressourcen- und Eigenschaftstypen.

Ressourcen: Hello Bucket!

Dieser Resources Abschnitt enthält eine Liste der Ressourcen, die Sie erstellen möchten. Jede Ressource muss ein Type Attribut haben, das definiert, um welche Art von AWS Ressource es sich handelt. Das Attribut Type hat ein spezielles Format:

AWS::ProductIdentifier::ResourceType

Der Ressourcentyp für einen Amazon S3 S3-Bucket lautet beispielsweiseAWS::S3::Bucket.

Werfen wir einen Blick auf eine grundlegende Vorlage. Die folgende Vorlage deklariert eine einzelne Ressource vom Typ AWS::S3::Bucket: mit dem NamenHelloBucket.

JSON

{ "Resources": { "HelloBucket": { "Type": "AWS::S3::Bucket" } } }

YAML

Resources: HelloBucket: Type: 'AWS::S3::Bucket'

Wenn Sie diese Vorlage verwenden, um einen Stack zu erstellen, CloudFormation wird ein Amazon S3 S3-Bucket erstellt. Das Erstellen eines Buckets ist einfach, da ein Bucket mit Standardeinstellungen erstellt werden CloudFormation kann. Für andere Ressourcen, z. B. eine Amazon EC2 EC2-Instance oder eine Auto Scaling Scaling-Gruppe, CloudFormation sind weitere Informationen erforderlich. Für Ressourcendeklarationen wird das Attribut Properties verwendet, um die Informationen zum Erstellen einer Ressource anzugeben.

Je nach Ressourcentyp sind einige Eigenschaften erforderlich, z. B. die ImageId Eigenschaft für eine AWS::EC2::Instance Ressource, und andere sind optional. Einige Eigenschaften haben Standardwerte, wie z. B. die AccessControl Eigenschaft der AWS::S3::Bucket Ressource, sodass die Angabe eines Werts für diese Eigenschaften optional ist. Andere Eigenschaften sind nicht erforderlich, können aber Funktionalitäten hinzufügen, die erwünscht sind, z. B. die WebsiteConfiguration-Eigenschaft der AWS::S3::Bucket-Ressource. Die Angabe eines Wert für diese Eigenschaften ist völlig optional und hängt von den jeweiligen Anforderungen ab. Im obigen Beispiel konnten wird die Standard-Einstellungen akzeptieren und das Eigenschaften-Attribut auslassen, weil die AWS::S3::Bucket-Ressource nur über optionale Eigenschaften verfügt und wir keine optionalen Features benötigt haben.

Die Eigenschaften der einzelnen Ressourcentypen finden Sie unter den entsprechenden Themen in AWS Referenz zu Ressourcen- und Eigenschaftstypen.

Ressourceneigenschaften und gemeinsames Verwenden von Ressourcen

Normalerweise ist eine Eigenschaft einer Ressource eine Zeichenfolge. Die folgende Vorlage gibt beispielsweise eine vordefinierte ACL (PublicRead) für die AccessControl Eigenschaft des Buckets an.

JSON

{ "Resources": { "HelloBucket": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "PublicRead" } } } }

YAML

Resources: HelloBucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: PublicRead

Einige Ressourcen können mehrere Eigenschaften und einige Eigenschaften können eine oder mehrere Untereigenschaften haben. Die AWS::S3::Bucket Ressource hat beispielsweise zwei Eigenschaften: AccessControl undWebsiteConfiguration. Die WebsiteConfiguration Eigenschaft hat zwei Untereigenschaften: IndexDocument undErrorDocument. Die folgende Vorlage zeigt die ursprüngliche Bucket-Ressource mit den zusätzlichen Eigenschaften.

JSON

{ "Resources": { "HelloBucket": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "PublicRead", "WebsiteConfiguration": { "IndexDocument": "index.html", "ErrorDocument": "error.html" } } } } }

YAML

Resources: HelloBucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: PublicRead WebsiteConfiguration: IndexDocument: index.html ErrorDocument: error.html

Einer der größten Vorteile von Vorlagen CloudFormation ist die Möglichkeit, eine Reihe von Ressourcen zu erstellen, die zusammenarbeiten, um eine Anwendung oder Lösung zu erstellen. Der Name einer Ressource in der Vorlage ist ein logischer Name. Bei der Erstellung der Ressource CloudFormation wird ein physischer Name generiert, der auf der Kombination aus dem logischen Namen, dem Stacknamen und einer eindeutigen ID basiert.

Sie fragen sich vielleicht, wie Sie die Eigenschaften einer Ressource basierend auf dem Namen oder der Eigenschaft einer anderen Ressource festlegen. Sie können beispielsweise eine CloudFront Distribution erstellen, die von einem S3-Bucket oder einer EC2-Instance unterstützt wird, die EC2-Sicherheitsgruppen verwendet, und all diese Ressourcen können in derselben Vorlage erstellt werden. CloudFormation verfügt über eine Reihe systemeigener Funktionen, mit denen Sie auf andere Ressourcen und deren Eigenschaften verweisen können. Sie können die Ref Funktion verwenden, um auf eine identifizierende Eigenschaft einer Ressource zu verweisen. Häufig ist dies der physische Name der Ressource. Manchmal kann es sich jedoch auch um eine Kennung handeln, z. B. die IP-Adresse für eine AWS::EC2::EIP Ressource oder einen Amazon-Ressourcennamen (ARN) für ein Amazon SNS-Thema. Eine Liste der von der Ref Funktion zurückgegebenen Werte finden Sie unter Ref-Funktion. Die folgende Vorlage enthält eine AWS::EC2::Instance Ressource. Die SecurityGroups Eigenschaft der Ressource ruft die Ref Funktion auf, um auf die AWS::EC2::SecurityGroup Ressource zu verweisenInstanceSecurityGroup.

JSON

{ "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" } ], "KeyName": "mykey", "ImageId": "" } }, "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: SecurityGroups: - !Ref InstanceSecurityGroup KeyName: mykey ImageId: '' 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

Die SecurityGroups Eigenschaft ist eine Liste von Sicherheitsgruppen, und im vorherigen Beispiel haben wir nur ein Element in der Liste. Die folgende Vorlage enthält ein zusätzliches Element in der SecurityGroups Eigenschaftenliste.

JSON

{ "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" }, "MyExistingSecurityGroup" ], "KeyName": "mykey", "ImageId": "ami-7a11e213" } }, "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: SecurityGroups: - !Ref InstanceSecurityGroup - MyExistingSecurityGroup KeyName: mykey ImageId: ami-7a11e213 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

MyExistingSecurityGroupist eine Zeichenfolge, die auf eine bestehende EC2-Sicherheitsgruppe statt auf eine in einer Vorlage deklarierte Sicherheitsgruppe verweist. Sie verwenden literale Zeichenketten, um auf vorhandene AWS Ressourcen zu verweisen.

Im obigen Beispiel AWS::EC2::Instance ist die KeyName Eigenschaft von die Literalzeichenfolge. mykey Das bedeutet, dass in der Region, in der der Stack erstellt wird, ein Schlüsselpaar mit dem Namen mykey vorhanden sein muss. Andernfalls wird die Stack-Erstellung fehlschlagen, da das Schlüsselpaar nicht vorhanden ist. Das von Ihnen verwendete key pair kann je nach Region variieren, in der Sie den Stack erstellen, oder Sie möchten die Vorlage möglicherweise mit einer anderen Person teilen, damit diese sie mit ihren verwenden kann AWS-Konto. Wenn dies der Fall ist, können Sie einen Eingabeparameter verwenden, um den Namen des Schlüsselpaars beim Erstellen des Stacks anzugeben. Die Ref Funktion kann auf Eingabeparameter verweisen, die bei der Erstellung des Stacks angegeben wurden. Die folgende Vorlage fügt einen Parameters Abschnitt hinzu, der den KeyName Parameter enthält, der verwendet wird, um die KeyName Eigenschaft für die AWS::EC2::Instance Ressource anzugeben. Der Parametertyp lautet AWS::EC2::KeyPair::KeyName. Damit wird sichergestellt, dass ein Benutzer einen gültigen Schlüsselpaarnamen in seinem Konto und in der Region verwendet, in der der Stack erstellt wird.

JSON

{ "Parameters": { "KeyName": { "Description": "The EC2 Key Pair to allow SSH access to the instance", "Type": "AWS::EC2::KeyPair::KeyName" } }, "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" }, "MyExistingSecurityGroup" ], "KeyName": { "Ref": "KeyName" }, "ImageId": "ami-7a11e213" } }, "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

Parameters: KeyName: Description: The EC2 Key Pair to allow SSH access to the instance Type: 'AWS::EC2::KeyPair::KeyName' Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: SecurityGroups: - !Ref InstanceSecurityGroup - MyExistingSecurityGroup KeyName: !Ref KeyName ImageId: ami-7a11e213 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

Die Ref Funktion ist praktisch, wenn der Parameter oder der zurückgegebene Wert für eine Ressource 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 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 folgende Vorlage erstellt eine CloudFront Verteilungsressource, die den DNS-Namen einer S3-Bucket-Ressource angibt, wobei die Fn::GetAtt Funktion verwendet wird, um das DomainName Bucket-Attribut abzurufen.

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

Die Fn::GetAtt Funktion benötigt zwei Parameter, den logischen Namen der Ressource und den Namen des abzurufenden Attributs. Eine vollständige Liste der verfügbaren Attribute für Ressourcen finden Sie unter Fn:: GetAtt. 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.

Empfangen von Benutzereingaben mithilfe von Eingabeparametern

Sie haben nun etwas über Ressourcen erfahren und auch darüber, wie sie zusammen in einer Vorlage verwendet werden. Sie haben gelernt, wie Sie auf Eingabeparameter verweisen. Wir haben uns jedoch noch nicht eingehend damit beschäftigt, wie Eingabeparameter im Detail definiert werden. Werfen wir einen Blick auf Parameterdeklarationen und sehen wir uns an, wie Benutzereingaben eingeschränkt und überprüft werden können.

Sie deklarieren Parameter im Parameters Abschnitt einer Vorlage. Ein Parameter enthält eine Liste von Attributen, die seinen Wert sowie Einschränkungen für diesen Wert definieren. Das einzige erforderliche Attribut istType, StringNumber, oder ein AWS-spezifischer Typ. Sie können auch ein Description Attribut hinzufügen, das beschreibt, welche Art von Wert Sie angeben sollten. Der Name und die Beschreibung des Parameters werden auf der Seite „Parameter angeben“ angezeigt, wenn Sie die Vorlage im Assistenten zum Erstellen von Stacks verwenden.

Das folgende Vorlagenfragment ist ein Parameters Abschnitt, der die auf der Seite „Parameter angeben“ verwendeten Parameter deklariert.

JSON

"Parameters": { "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access into the WordPress web server", "Type": "AWS::EC2::KeyPair::KeyName" }, "WordPressUser": { "Default": "admin", "NoEcho": "true", "Description" : "The WordPress database admin account user name", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*" }, "WebServerPort": { "Default": "8888", "Description" : "TCP/IP port for the WordPress web server", "Type": "Number", "MinValue": "1", "MaxValue": "65535" } }

YAML

Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access into the WordPress web server Type: AWS::EC2::KeyPair::KeyName WordPressUser: Default: admin NoEcho: true Description: The WordPress database admin account user name Type: String MinLength: 1 MaxLength: 16 AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*" WebServerPort: Default: 8888 Description: TCP/IP port for the WordPress web server Type: Number MinValue: 1 MaxValue: 65535

CloudFormation Verwendet für Parameter mit Standardwerten die Standardwerte, sofern Benutzer keinen anderen Wert angeben. Wenn Sie das Standardattribut auslassen, muss der Benutzer einen Wert für diesen Parameter angeben. Wenn jedoch der Benutzer einen Wert angeben muss, ist nicht sichergestellt, dass der Wert gültig ist. Um den Wert eines Parameters zu überprüfen, können Sie Einschränkungen deklarieren oder einen AWS-spezifischen Parametertyp angeben.

Beachten Sie, dass der Parameter KeyName kein Default-Attribut aufweist, während andere Parameter eins haben. Der Parameter WordPressUser hat beispielsweise das Attribut Default: admin, aber der Parameter KeyName hat keins. Benutzer müssen bei der Stack-Erstellung einen Schlüsselnamenwert angeben. Ist dies nicht der Fall, CloudFormation schlägt die Erstellung des Stacks fehl und es wird eine Ausnahme ausgelöst:

Parameters: [KeyName] must have values

Bei AWS-spezifischen Parametertypen werden Eingabewerte anhand vorhandener Werte im Benutzer AWS-Konto und in der Region, in der der Stack erstellt wird, CloudFormation validiert, bevor Stack-Ressourcen erstellt werden. In der Beispielvorlage ist der KeyName Parameter ein AWS-spezifischer Parametertyp von. AWS::EC2::KeyPair::KeyName CloudFormation überprüft, ob Benutzer einen gültigen EC2-Schlüsselpaarnamen angeben, bevor der Stack erstellt wird. Ein anderes Beispiel für einen AWS-spezifischen Parametertyp istAWS::EC2::VPC::Id, bei dem Benutzer eine gültige VPC-ID angeben müssen. Zusätzlich zur Vorabvalidierung zeigt die AWS Konsole eine Dropdownliste mit gültigen Werten für AWS-spezifische Parametertypen an, z. B. gültige EC2-Schlüsselpaarnamen oder VPC-IDs, wenn Benutzer den Create Stack Wizard verwenden.

Für den Typen String können Sie die folgenden Attribute verwenden, um Einschränkungen zu deklarieren: MinLength, MaxLength, Default, AllowedValues und AllowedPattern. Im obigen Beispiel hat der Parameter WordPressUser drei Einschränkungen: Der Parameterwert muss 1 bis 16 Zeichen lang sein (MinLength, MaxLength) und muss mit einem Buchstaben beginnen, gefolgt von einer beliebigen Kombination aus Buchstaben und Zahlen (AllowedPattern).

Für den Typen Number können Sie die folgenden Einschränkungen deklarieren: MinValue, MaxValue, Default und AllowedValues. Eine Zahl kann eine ganze Zahl oder ein Gleitkommawert sein. Im obigen Beispiel muss der Parameter WebServerPort eine Zahl zwischen 1 und 65535 sein (MinValue, MaxValue).

Am Anfang dieses Abschnitts haben wir erwähnt, dass Parameter eine gute Möglichkeit darstellen, sensible oder implementierungsspezifische Daten anzugeben, z. B. Passwörter oder Benutzernamen, die Sie verwenden müssen, aber nicht in die Vorlage einbetten möchten. Wenn Sie das NoEcho Attribut auf setzentrue, wird der als Sternchen (*****) maskierte Parameterwert für alle Aufrufe CloudFormation zurückgegeben, die den Stack oder die Stack-Ereignisse beschreiben, mit Ausnahme von Informationen, die an den unten angegebenen Speicherorten gespeichert sind. Im Beispiel oben ist der WordPressUser-Parameter für Personen, die die Stack-Einstellungen anzeigen, nicht sichtbar. Der Parameterwert wird in Form von Sternchen zurückgegeben.

Wichtig

Durch die Verwendung des NoEcho-Attributs werden keine Informationen maskiert, die im Folgenden gespeichert sind:

  • Der Vorlagenbereich. Metadata CloudFormation transformiert, modifiziert oder redigiert keine Informationen, die Sie in den Metadata Abschnitt aufnehmen. Weitere Informationen finden Sie unter Metadaten.

  • Der Outputs-Vorlagenabschnitt. Weitere Informationen finden Sie unter Outputs.

  • Das Metadata-Attribut einer Ressourcendefinition. Weitere Informationen finden Sie unter Metadata Attribut.

Es wird dringend empfohlen, diese Mechanismen nicht zu verwenden, um vertrauliche Informationen wie Passwörter oder Geheimnisse einzugeben.

Wichtig

Anstatt vertrauliche Informationen direkt in Ihre CloudFormation Vorlagen einzubetten, empfehlen wir Ihnen, dynamische Parameter in der Stack-Vorlage zu verwenden, um auf vertrauliche Informationen zu verweisen, die außerhalb von gespeichert und verwaltet werden CloudFormation, z. B. im AWS Systems Manager Parameterspeicher oder. AWS Secrets Manager

Weitere Informationen finden Sie unter Keine Anmeldeinformationen in Vorlagen einbetten Best Practice.

Angeben bedingter Werte mithilfe von Zuweisungen

Parameter dienen besonders gut dazu, Benutzern die Möglichkeit zu geben, eindeutige oder sensible Werte für die Verwendung in Eigenschaften von Stack-Ressourcen festzulegen. Es gibt jedoch möglicherweise regional abhängige oder etwas komplizierte Einstellungen, die für Benutzer aufgrund anderer Bedingungen oder Abhängigkeiten schwer nachvollziehbar sind. In diesen Fällen sollten Sie logische Ausdrücke in die Vorlage selbst aufnehmen, damit Benutzer einfachere Werte (oder gar keine) festlegen können, um die gewünschten Ergebnisse zu erhalten. In einem früheren Beispiel haben wir die AMI-ID für die ImageId Eigenschaft unserer EC2-Instance hartcodiert. Diese Methode funktioniert für die Region USA Ost, in der es das gewünschte AMI repräsentiert. Wenn der Benutzer jedoch versucht, die den Stack in einer anderen Region bereitzustellen, erhält er das falsche oder gar kein AMI. (AMI-IDs sind einer Region eindeutig zugeordnet, d. h. die gleiche AMI-ID repräsentiert möglicherweise in einer anderen Region kein oder ein völlig anderes AMI.)

Um dieses Problem zu vermeiden, müssen Sie die richtige AMI-ID basierend auf einer bedingten Eingabe festlegen (in diesem Beispiel die Region, in der der Stack erstellt wird). Es gibt zwei Vorlagenfunktionen, die helfen können: den Mappings Abschnitt und den AWS::Region Pseudo-Parameter.

Der AWS::Region Pseudo-Parameter ist ein Wert, der als Region CloudFormation aufgelöst wird, in der der Stapel erstellt wird. Pseudo-Parameter werden aufgelöst, CloudFormation wenn Sie den Stack erstellen. Mit Zuweisungen können Sie einen Eingabewert als Bedingung zur Bestimmung eines anderen Werts verwenden. Ähnlich wie bei der switch-Anweisung verbindet eine Zuweisung einen Satz Werte mit einem anderen Satz Werte. Wenn Sie den AWS::Region-Parameter zusammen mit einer Zuweisung verwenden, können Sie sicherstellen, dass eine für die Region passende AMI-ID festgelegt wird. Die folgende Vorlage enthält einen Mappings Abschnitt mit einer Zuordnung namensRegionMap, die verwendet wird, um eine AMI-ID der entsprechenden Region zuzuordnen.

JSON

{ "Parameters": { "KeyName": { "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type": "String" } }, "Mappings": { "RegionMap": { "us-east-1": { "AMI": "ami-76f0061f" }, "us-west-1": { "AMI": "ami-655a0a20" }, "eu-west-1": { "AMI": "ami-7fd4e10b" }, "ap-southeast-1": { "AMI": "ami-72621c20" }, "ap-northeast-1": { "AMI": "ami-8e08a38f" } } }, "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "AMI" ] }, "UserData": { "Fn::Base64": "80" } } } } }

YAML

Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance Type: String Mappings: RegionMap: us-east-1: AMI: ami-76f0061f us-west-1: AMI: ami-655a0a20 eu-west-1: AMI: ami-7fd4e10b ap-southeast-1: AMI: ami-72621c20 ap-northeast-1: AMI: ami-8e08a38f Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: KeyName: !Ref KeyName ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - AMI UserData: !Base64 '80'

In der RegionMap ist jede Region einem Name-Wert-Paar zugeordnet. Das Name-Wert-Paar ist ein Etikett und der Zuweisungswert. In der RegionMap ist AMI das Label und die AMI-ID ist der Wert. Um einen Wert mithilfe einer Map zurückzugeben, verwenden Sie die FindInMap Funktion Fn:: und übergeben dabei den Namen der Map, den Wert, mit dem der zugeordnete Wert gesucht wurde, und die Bezeichnung des zugewiesenen Werts, den Sie zurückgeben möchten. Im obigen Beispiel Ec2Instance verwendet die ImageId Eigenschaft der Ressource die Fn::FindInMap Funktion, um ihren Wert zu bestimmen, indem sie RegionMap als zu verwendende Map, AWS::Region als Eingabewert für die Zuordnung und AMI als Label zur Identifizierung des Werts angibt, dem zugeordnet werden soll. Wenn diese Vorlage beispielsweise zur Erstellung eines Stacks in der Region USA West (Nordkalifornien) verwendet ImageId würde, wäre sie auf gesetztami-655a0a20.

Tipp

Mit dem AWS::Region-Pseudoparameter können Sie die Region herausfinden, in welcher der Stack erstellt wird. Einige Ressourcen, wieAWS::EC2::Instance, undAWS::AutoScaling::AutoScalingGroup, verfügen über eine EigenschaftAWS::ElasticLoadBalancing::LoadBalancer, die Verfügbarkeitszonen angibt. Sie können die Fn::GetAZs-Funktion verwenden, um die Liste aller Availability Zones in einer Region abzurufen.

Rechnerisch ermittelte Werte und Ausgabewerte

Parameter und Zuweisungen sind eine gute Möglichkeit, um bestimmte Werte zum Zeitpunkt der Stack-Erstellung zu übergeben oder zu bestimmen. Unter Umständen kann es jedoch passieren, dass ein Wert von einem Parameter oder einem anderen Ressourcenattribut nur ein Teil des erforderlichen Wertes ist. Im folgenden WordPress Vorlagenfragment erstellt die Fn::Join Funktion beispielsweise die Target Untereigenschaft der HealthCheck Eigenschaft für die ElasticLoadBalancer Ressource, indem sie den WebServerPort Parameter mit anderen Literalzeichenfolgen verkettet, um den benötigten Wert zu bilden.

JSON

{ "Resources": { "ElasticLoadBalancer": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AvailabilityZones": { "Fn::GetAZs": "" }, "Instances": [ { "Ref": "Ec2Instance1" }, { "Ref": "Ec2Instance2" } ], "Listeners": [ { "LoadBalancerPort": "80", "InstancePort": { "Ref": "WebServerPort" }, "Protocol": "HTTP" } ], "HealthCheck": { "Target": { "Fn::Join": [ "", [ "HTTP:", { "Ref": "WebServerPort" }, "/" ] ] }, "HealthyThreshold": "3", "UnhealthyThreshold": "5", "Interval": "30", "Timeout": "5" } } } } }

YAML

Resources: ElasticLoadBalancer: Type: 'AWS::ElasticLoadBalancing::LoadBalancer' Properties: AvailabilityZones: !GetAZs '' Instances: - !Ref Ec2Instance1 - !Ref Ec2Instance2 Listeners: - LoadBalancerPort: '80' InstancePort: !Ref WebServerPort Protocol: HTTP HealthCheck: Target: !Join - '' - - 'HTTP:' - !Ref WebServerPort - / HealthyThreshold: '3' UnhealthyThreshold: '5' Interval: '30' Timeout: '5'

Die Fn::Join Funktion verwendet zwei Parameter: ein Trennzeichen, das die Werte voneinander trennt, die Sie verketten möchten, und ein Array von Werten in der Reihenfolge, in der sie angezeigt werden sollen. Im obigen Beispiel gibt die Fn::Join Funktion eine leere Zeichenfolge als Trennzeichen und HTTP:, den Wert des WebServerPort Parameters, und ein/-Zeichen als die zu verkettenden Werte an. Bei WebServerPort einem Wert von 8888 würde die Target Eigenschaft auf den folgenden Wert gesetzt:

HTTP:8888/

Weitere Informationen zur Funktion Fn::Join finden Sie unter Fn::Join.

Die Fn::Join Funktion ist auch nützlich, um Ausgabewerte für den Stack zu deklarieren. Der Outputs Abschnitt in der Vorlage enthält Deklarationen für die Werte, die nach der Erstellung des Stacks verfügbar sein sollen. Eine Ausgabe ist eine praktische Möglichkeit zum Erfassen wichtiger Informationen über Ihre Ressourcen oder Eingabeparameter. Beispielsweise könnten wir die folgenden Ausgaben für eine Vorlage deklarieren, die eine WordPress Site erstellt.

JSON

{ "Outputs": { "InstallURL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "ElasticLoadBalancer", "DNSName" ] }, "/wp-admin/install.php" ] ] }, "Description": "Installation URL of the WordPress website" }, "WebsiteURL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "ElasticLoadBalancer", "DNSName" ] } ] ] } } } }

YAML

Outputs: InstallURL: Value: !Join - '' - - 'http://' - !GetAtt - ElasticLoadBalancer - DNSName - /wp-admin/install.php Description: Installation URL of the WordPress website WebsiteURL: Value: !Join - '' - - 'http://' - !GetAtt - ElasticLoadBalancer - DNSName

Jeder Ausgabewert hat einen Namen, ein Value Attribut, das die Deklaration des als Ausgabewert zurückgegebenen Werts enthält, und optional eine Beschreibung des Werts. Im vorherigen Beispiel InstallURL ist die Zeichenfolge, die von einem Fn::Join Funktionsaufruf zurückgegeben wurde, der den DNS-Namen der Ressource ElasticLoadBalancer verkettethttp://, und. /wp-admin/install.php Der Ausgabewert sollte folgendermaßen oder ähnlich aussehen:

http://mywptests-elasticl-1gb51l6sl8y5v-206169572.aws-region.elb.amazonaws.com/wp-admin/install.php

Nachdem wir unseren Stack erstellt haben, können wir diesen Link verwenden, um zur Installationsseite für den WordPress Blog zu gelangen, den wir erstellt haben. CloudFormation generiert die Ausgabewerte, nachdem die Erstellung des Stacks abgeschlossen ist. Sie können Ausgabewerte auf der Outputs Registerkarte der CloudFormation Konsole oder mithilfe des describe-stacks CLI-Befehls anzeigen.

Weitere Informationen

Wir sind die grundlegenden Aspekte einer Vorlage und ihre Verwendung durchgegangen.

Wir haben zwei Abschnitte der obersten Ebene in einer Vorlage nicht behandelt: AWSTemplateFormatVersion undDescription.

AWSTemplateFormatVersionist einfach die Version des Vorlagenformats. Wenn Sie es nicht angeben, CloudFormation wird die neueste Version verwendet. Weitere Informationen finden Sie unter Formatversion.

Das Description ist eine gültige JSON- oder YAML-Zeichenfolge. Diese Beschreibung wird auf der Seite „Parameter angeben“ des Assistenten „Stack erstellen“ angezeigt. Weitere Informationen finden Sie unter Beschreibung.

Natürlich gibt es erweiterte Vorlagen- und Stack-Features. Hier finden Sie eine Liste ein paar der wichtigen Funktionen, die Sie interessieren werden:

  • DependsOn— Verwenden Sie dieses Attribut, um anzugeben, dass eine Ressource nach der anderen erstellt werden muss.

  • DeletionPolicy— Verwenden Sie dieses Attribut, um anzugeben, wie mit dem Löschen einer Ressource umgegangen werden CloudFormation soll.

  • Metadata— Verwenden Sie dieses Attribut, um strukturierte Daten mit einer Ressource anzugeben.