Walkthrough: Mit AWS CloudFormation Designer einen Basic Web-Server erstellen - AWS CloudFormation

Walkthrough: Mit AWS CloudFormation Designer einen Basic Web-Server erstellen

AWS CloudFormation Designer stellt Ihre Vorlagen grafisch dar, um Ihnen zu helfen, die Ressourcen der Vorlage sowie deren Verbindung untereinander zu betrachten. Der Integrierter JSON- und YAML-Editor erleichtert Ihnen die Bearbeitung von Vorlagen direkt in der AWS CloudFormation-Konsole. Zur Demonstration, wie sich beide Komponenten verwenden lassen, nutzen wir AWS CloudFormation Designer, um einen Basic Web-Server in einem VPC zu erstellen. Anschließend speichern wir die Vorlage und verwenden sie zum Erstellen eines CloudFormation-Stacks.

Am Ende der schrittweisen Anleitung verfügen Sie über eine Vorlage ähnlich dem folgenden Beispiel: https://console.aws.amazon.com/cloudformation/designer/home?templateUrl=https://s3.amazonaws.com/cloudformation-examples/sample-ec2-vpc.template&region=us-east-1.

In dieser schrittweisen Anleitung werden Sie die folgenden Schritte ausführen:

  1. Ressourcen hinzufügen und verbinden.

    Wenn Sie AWS CloudFormation Designer zum ersten Mal öffnen, beginnen Sie mit einer leeren Vorlage. Wir verwenden AWS CloudFormation Designer, um die Vorlage auszufüllen, indem wir Ressourcen wie eine VPC und eine EC2-Instanz in die Vorlage ziehen. Wir werden auch Links zwischen ihnen erstellen. Beispielsweise verwenden wir AWS CloudFormation Designer zum Erstellen einer Verbindung zwischen dem Internet-Gateway und der VPC.

  2. Vorlagenparameter, Zuordnungen und Outputs hinzufügen.

    Wir verwenden den AWS CloudFormation Designer Integrierter Editor, um weitere Vorlagenkomponenten hinzuzufügen und die Vorlage nützlicher zu gestalten. Beispielsweise werden wir der Vorlage Parameter hinzufügen, sodass Sie beim Erstellen eines Stacks Eingabewerte angeben können. Auf diese Weise müssen Sie Eigenschaftswerte, die Sie öfters ändern, nicht ständig in der Vorlage bearbeiten.

  3. Ressourceneigenschaften angeben.

    Wir verwenden wiederum den Integrierter Editor, um Konfigurationseinstellungen für unsere Ressourcen anzugeben.

  4. Bereitstellen von Ressourcen

    Keine Ihrer Vorlagen-Ressourcen sind aktiv, bis Sie einen Stack erstellen. Wir verwenden die Vorlage, die Sie gerade erstellt haben, um einen CloudFormation-Stapel zu starten, der alle in der Vorlage definierten Ressourcen bereitstellen wird.

    Anmerkung

    CloudFormation ist ein kostenloser Service, allerdings werden Ihnen die AWS-Ressourcen, die Sie in Ihren Stacks verwenden, zu den jeweils aktuellen Tarifen in Rechnung gestellt. Weitere Informationen über AWS-Preise finden Sie auf der Detailseite für jedes Produkt unter http://aws.amazon.com.

Voraussetzungen

In dieser schrittweisen Anleitung wird davon ausgegangen, dass Sie über praktische Erfahrungen mit Amazon Virtual Private Cloud (Amazon VPC), Amazon Elastic Compute Cloud, Amazon EC2 und CloudFormation verfügen. Zur Information gibt jedes Verfahren einige grundlegende Informationen zu jeder Ressource.

Bevor Sie beginnen, stellen Sie zudem sicher, dass Sie über ein Amazon EC2-Schlüsselpaar für die Region, in der Ihr Stack erstellt wird, verfügen. Weitere Informationen finden Sie unter Amazon EC2-Schlüsselpaare im Amazon EC2-Benutzerhandbuch für Linux-Instances.

Schritt 1: Ressourcen hinzufügen und verbinden

Wir verwenden die AWS CloudFormation Designer Drag-and-Drop-Schnittstelle zum Hinzufügen einer Amazon EC2-Instance und von Netzwerk-Ressourcen, wie zum Beispiel VPC, Subnetz, Routing-Tabelle und Internet-Gateway. Nach Hinzufügen aller Ressourcen erstellen wir Verbindungen zwischen ihnen. Beispielsweise verknüpfen wir das Internet-Gateway mit einer VPC.

Um Ressourcen einer Vorlage hinzuzufügen

  1. Öffnen Sie AWS CloudFormation Designer unter https://console.aws.amazon.com/cloudformation/designer.

  2. Klicken Sie im Integrierter Editor im unteren Bereich der Seite auf Bearbeiten ( ).

  3. Ändern Sie den Namen der Vorlage auf BasicWebServerInVPC und drücken Sie anschließend die Eingabetaste.

    Derzeit haben wir eine leere Vorlage, die nicht gültig ist. In den nächsten Schritten fügen wir Ressourcen hinzu, um sie gültig zu machen.

  4. Ziehen Sie im Bereich Ressourcentypen aus der Kategorie EC2 einen VPC-Ressourcentyp in den Bereich Zeichenbereich.

    Die Ressourcen sind nach Ressourcenkategorie geordnet. Alle Ressourcen, die wir hinzufügen, befinden sich in der Kategorie EC2.

    AWS CloudFormation Designer ändert Ihre Vorlage unmittelbar und integriert eine VPC-Ressource; die Ergebnisse ähneln dem folgenden JSON-Snippet.

    "Resources": { "VPC431KO": { "Type": "AWS::EC2::VPC", "Properties": {}, "Metadata": { "AWS::CloudFormation::Designer": { "id": "445730ea-0d11-45ba-b6ac-12345EXAMPLE" } } } }

    Das YAML-Snippet sollte ungefähr folgendermaßen aussehen.

    Resources: VPC431KO: Type: 'AWS::EC2::VPC' Properties: {} Metadata: 'AWS::CloudFormation::Designer': id: 9430b008-7a03-41ed-b63e-12345EXAMPLE

    Beachten Sie, dass wir weiterhin die VPC-Eigenschaften angeben müssen, wie den CIDR-Block der VPC. Dies machen wir später. Dies gilt für alle Ressourcen, die wir hinzufügen.

  5. VPC umbenennen.

    Anmerkung

    Wenn Sie eine Ressource umbenennen, benennen Sie die logische ID um. Dies ist der Name, die in der Vorlage referenziert wird (nicht der Name, der zugewiesen wird, wenn CloudFormation die Ressource erstellt). Weitere Informationen finden Sie unter Ressourcen.

    1. Wählen Sie die VPC-Ressource aus.

    2. Wählen Sie im Integrierter Editor das Symbol Bearbeiten ( ).

    3. Ändern Sie den Namen in VPC und drücken Sie dann die Eingabetaste.

    Als nächstes fügen wir der VPC Ressourcen zu.

  6. Ziehen Sie eine Ecke der VPC-Ressource, um Sie zu erweitern, bis weitere Ressourcen hineinpassen.

    Wir müssen ein Subnetz hinzufügen, da Sie keine EC2-Instanz, die die Webseite hostet, direkt in die VPC hinzufügen können; Instanzen müssen sich in einem Subnetz befinden.

  7. Fügen Sie einen Subnetz-Ressourcentyp in der VPC hinzu und benennen Sie ihn in PublicSubnet um.

    Wir werden das Subnetz verwenden, um der VPC einen IP-Adressbereich zuzuordnen, den Sie anderen AWS-Ressourcen zuweisen können, wie z.B. einer Amazon EC2-Instanz.

    Wenn Sie das Subnetz in die VPC hinzufügen, verknüpft AWS CloudFormation Designer das Subnetz automatisch mit der VPC. Diese Zuordnung ist ein Container-Modell, in dem Ressourcen innerhalb des Container automatisch mit der Container-Ressource verknüpft werden.

  8. Fügen Sie einen Instance-Ressourcentyp in der PublicSubnet-Ressource hinzu und benennen Sie ihn in WebServerInstance um.

    Die Instanz ist eine virtuelle Rechenumgebung, in der Sie eine Basic-Website hosten. Ähnlich wie bei Subnetz und VPC wird die Instanz automatisch mit dem Subnetz verknüpft, wenn sie im Subnetz hinzugefügt wird.

  9. Fügen Sie einen SecurityGroup-Ressourcentyp in der VPC hinzu und benennen Sie ihn in WebServerSecurityGroup um.

    Die Sicherheitsgruppe ist eine virtuelle Firewall zur Steuerung von ein- und ausgehendem Datenverkehr der Web-Server-Instanz. Sie ist auch für Instanzen in einer VPC erforderlich. Wir müssen die Web-Server-Instanz mit dieser Sicherheitsgruppe verknüpfen; dies findet später statt, wenn wir die Eigenschaften der Instanz festlegen.

  10. Fügen Sie einen InternetGateway/Ressourcentyp außerhalb der VPC hinzu und benennen Sie ihn in InternetGateway um.

    Das Internet-Gateway ermöglicht die Kommunikation zwischen der Instance in der VPC und dem Internet. Ohne das Internet-Gateway kann niemand auf Ihre Website zugreifen.

    Obwohl Sie das Internet-Gateway in die VPC ziehen können, wird hierdurch keine Verknüpfung mit der VPC erstellt. Das Internet-Gateway ist kein Container-Modell. Stattdessen müssen Sie eine Verbindung vom Internet-Gateway zur VPC ziehen; dies wird im nächsten Schritt beschrieben.

  11. Eine Verbindung zwischen Ressource InternetGateway und Ressource VPC erstellen.

    1. Bewegen Sie die Maus bei der Ressource InternetGateway über die Internet-Gateway-Verbindung (AWS::EC2::VPCGatewayAttachment).

    2. Ziehen Sie eine Verbindung zur VPC.

      Der Rand gültiger Zielressourcen ändert die Farbe. In diesem Fall ist die VPC die einzige gültige Zielressource. Für diese Verbindung wird eine Verbindungs-Ressource erstellt, die das Internet-Gateway mit der VPC verbindet.

  12. Nun müssen Sie eine Routing-Tabelle und Route hinzufügen, um festzulegen, wie Netzwerk-Traffic aus einem Subnetz weitergeleitet wird. Fügen Sie eine RouteTabele in eine VPC ein und benennen Sie sie in PublicRouteTable um.

    Dies verknüpft eine neue Routingtabelle mit der VPC.

  13. Um eine Routingregel der Routing-Tabelle hinzuzufügen, fügen Sie einen Route-Ressourcentyp in die PublicRouteTable-Ressource ein und benennen ihn in PublicRoute um.

    Wir verwenden die Route, um festzulegen, wohin Traffic geleitet wird.

  14. Bei der öffentlichen Route muss das Internet-Gateway das Ziel sein. Verwenden Sie GatewayId zum Erstellen einer Verbindung von der Ressource PublicRoute zum Internet-Gateway, ähnlich dazu, wie Sie eine Verbindung zwischen Internet-Gateway und VPC angelegt haben.

    CloudFormation kann keine Route mit einem Internet-Gateway verknüpfen, bis Sie das Internet-Gateway mit der VPC verknüpfen. Das bedeutet, dass wir eine explizite Abhängigkeit von der Internet-Gateway-VPC-Verbindung erstellen müssen; dies wird im nächsten Schritt beschrieben. Weitere Informationen finden Sie unter DependsOn-Attribut.

  15. Erstellen einer expliziten Abhängigkeit zwischen Ressource PublicRoute und der Internet-Gateway-VPC-Verbindung.

    1. Schieben Sie den Mauszeiger für die PublicRoute-Ressource über den Punkt DependsOn.

    2. Ziehen Sie eine Verbindung zur Internet-Gateway-VPC-Verbindung (AWS::EC2::VPCGatewayAttachment).

      Bei DependsOn Verbindungen erstellt AWS CloudFormation Designer eine Abhängigkeit (ein DependsOn Attribut), bei der die ursprüngliche Ressource von der Zielressource abhängt. In diesem Fall fügt, AWS CloudFormation Designer ein Attribut DependsOn zur Ressource PublicRoute hinzu und legt die Gateway-VPC-Verbindung als Abhängigkeit fest.

  16. Erstellen Sie eine weitere Abhängigkeit von der WebServerInstance Ressource auf die PublicRoute Ressource.

    Die WebServerInstance Ressource ist hinsichtlich der Weiterleitung von Traffic in das Internet von der öffentlichen Route abhängig. Ohne die öffentliche Route kann die Instance kein Signal senden (mit dem cfn-signal Hilfsskript), um CloudFormation zu benachrichtigen, dass die Instance-Konfiguration und Anwendungs-Bereitstellungen abgeschlossen sind.

  17. Ziehen Sie eine Verbindung von der PublicRouteTable Ressource zur PublicSubnet Ressource, um Routing-Tabelle und Subnetz zu verknüpfen.

    Nun verwendet das öffentliche Subnetz die öffentliche Routing-Tabelle zur Leitung von Traffic.

  18. Speichern Sie in der AWS CloudFormation Designer Toolbar die Vorlage lokal über das Menü Datei (das Dateisymbol).

    AWS CloudFormation Designer speichert Ihre Vorlage auf Ihrer Festplatte. Sie können die Vorlage zu einem späteren Zeitpunkt verwenden, um einen Stack zu erstellen. Wir empfehlen, dass Sie die Vorlage regelmäßig speichern, um zu verhindern, dass Änderungen verloren gehen.

In diesem Schritt haben wir sieben Ressourcen Ihrer Vorlage hinzugefügt und ihre logischen IDs in Anzeigenamen umbenannt. Wir haben außerdem visuelle Verbindungen mit den meisten Ressourcen eingerichtet, um Verknüpfungen und Abhängigkeiten zu erstellen. Bevor wir einen Stack mit dieser Vorlage erstellen können, müssen wir jedoch weitere Verbindungen erstellen (z.B. die Instanz mit der Sicherheitsgruppe verknüpfen) und Eigenschaften für jede Ressource festlegen. Im nächsten Schritt betrachten wir die Änderung anderer Komponenten Ihrer Vorlage, wie z. B. Eingabeparameter, mit dem AWS CloudFormation Designer Integrierter Editor.

Schritt 2: Parameter, Zuweisungen und Outputs hinzufügen

Bevor wir Ressourceneigenschaften festlegen, müssen wir weitere Vorlagenkomponenten hinzufügen, um eine Wiederverwendung der Vorlage in mehreren Umgebungen einfacher zu gestalten. In diesem Schritt verwenden wir den AWS CloudFormation Designer Integrierter Editor zum Hinzufügen von Parametern, Zuordnungen und Outputs. Anschließend können wir auf diese Parameter und Zuordnungen zurückgreifen, wenn wir Ressourcen-Eigenschaften festlegen. Die Anleitung umfasst JSON- und YAML-Beispielcode, den Sie in den Integrierter Editor einfügen können.

Parameter hinzufügen

Parameter sind Eingabewerte, die Sie bei Erstellung eines Stacks festlegen. Sie sind nützlich, um Werte zu übergeben, sodass keine hartcodierten Werte in Vorlagen erforderlich sind. Beispielsweise müssen Sie den Instanztyp Ihres Webservers in der Vorlage nicht hart codieren; Sie können stattdessen einen Parameter verwenden, um den Instanztyp festzulegen, wenn Sie einen Stack erstellen. Auf diese Weise können Sie mit derselben Vorlage mehrere Web-Server mit verschiedenen Instanztypen erstellen. Weitere Informationen finden Sie unter Parameter.

  1. Klicken Sie auf einen offenen Bereich auf der AWS CloudFormation Designer-Leinwand.

    Je nachdem, was Sie ausgewählt haben, zeigt der Integrierter Editor Komponenten, die Sie bearbeiten können, entweder auf Vorlagenebene oder Ressourcenebene an. Auf Vorlagenebene können Sie alle anderen Abschnitte einer Vorlage bearbeiten, darunter Vorlagenparameter, Zuordnungen und Outputs, mit Ausnahme des Ressourcen-Abschnitts. Auf Ressourcenebene können Sie Ressourceneigenschaften und Attribute bearbeiten.

    Klicken Sie auf einen offenen Bereich auf der Leinwand, um Komponenten auf Vorlagenebene zu bearbeiten. Wählen Sie eine Ressource aus, um Komponenten auf Ressourcenebene zu bearbeiten.

  2. Wählen Sie im Fenster Integrierter Editor die Registerkarte Parameter in der Ansicht Komponenten aus.

  3. Kopieren Sie den Parameter im folgenden Snippet und fügen Sie sie in den Integrierter Editor ein.

    Das folgende JSON-Snippet umfasst Paramater zur Angabe des Webserver-Instanztyps, einen Amazon EC2 Schlüsselpaar-Name für SSH-Webserverzugang, und den IP-Adressbereich, mit dem sich über SSH auf den Webserver zugreifen lässt.

    { "Parameters": { "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge" ], "ConstraintDescription" : "must be a valid EC2 instance type." }, "KeyName": { "Description": "Name of an EC2 KeyPair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription": "must be the name of an existing EC2 KeyPair." }, "SSHLocation": { "Description": " The IP address range that can be used to access the web server using SSH.", "Type": "String", "MinLength": "9", "MaxLength": "18", "Default": "0.0.0.0/0", "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." } } }

    Hier finden Sie den gleichen Snippet in YAML.

    Parameters: InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.small AllowedValues: - t1.micro - t2.nano - t2.micro - t2.small - t2.medium - t2.large - m1.small - m1.medium - m1.large - m1.xlarge - m2.xlarge - m2.2xlarge - m2.4xlarge - m3.medium - m3.large - m3.xlarge - m3.2xlarge - m4.large - m4.xlarge - m4.2xlarge - m4.4xlarge - m4.10xlarge - c1.medium - c1.xlarge - c3.large - c3.xlarge - c3.2xlarge - c3.4xlarge - c3.8xlarge - c4.large - c4.xlarge - c4.2xlarge - c4.4xlarge - c4.8xlarge - g2.2xlarge - g2.8xlarge - r3.large - r3.xlarge - r3.2xlarge - r3.4xlarge - r3.8xlarge - i2.xlarge - i2.2xlarge - i2.4xlarge - i2.8xlarge - d2.xlarge - d2.2xlarge - d2.4xlarge - d2.8xlarge - hi1.4xlarge - hs1.8xlarge - cr1.8xlarge - cc2.8xlarge - cg1.4xlarge ConstraintDescription: must be a valid EC2 instance type. KeyName: Description: Name of an EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' ConstraintDescription: must be the name of an existing EC2 KeyPair. SSHLocation: Description: ' The IP address range that can be used to access the web server using SSH.' Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.

Zuordnungen hinzufügen

Zuordnungen sind eine Reihe von Schlüsseln, die mit einem Satz von Namen-Wert-Paaren verknüpft sind. Sie eignen sich zur Angabe von Werten auf Grundlage eines Eingangs-Parameterwerts. Bei dieser schrittweisen Anleitung verwenden wir eine Zuordnung, um eine AMI ID für eine EC2-Instanz festzulegen, basierend auf dem Instanztyp und der Region, in der der Stack erstellt wird. Weitere Informationen finden Sie unter Mappings.

  1. Wählen Sie im Integrierter Editor-Bereich die Registerkarte Mappings aus.

  2. Kopieren Sie die JSON-Zuordnungen und fügen Sie sie in den Integrierter Editor ein.

    { "Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "HVM64" }, "t2.nano" : { "Arch" : "HVM64" }, "t2.micro" : { "Arch" : "HVM64" }, "t2.small" : { "Arch" : "HVM64" }, "t2.medium" : { "Arch" : "HVM64" }, "t2.large" : { "Arch" : "HVM64" }, "m1.small" : { "Arch" : "HVM64" }, "m1.medium" : { "Arch" : "HVM64" }, "m1.large" : { "Arch" : "HVM64" }, "m1.xlarge" : { "Arch" : "HVM64" }, "m2.xlarge" : { "Arch" : "HVM64" }, "m2.2xlarge" : { "Arch" : "HVM64" }, "m2.4xlarge" : { "Arch" : "HVM64" }, "m3.medium" : { "Arch" : "HVM64" }, "m3.large" : { "Arch" : "HVM64" }, "m3.xlarge" : { "Arch" : "HVM64" }, "m3.2xlarge" : { "Arch" : "HVM64" }, "m4.large" : { "Arch" : "HVM64" }, "m4.xlarge" : { "Arch" : "HVM64" }, "m4.2xlarge" : { "Arch" : "HVM64" }, "m4.4xlarge" : { "Arch" : "HVM64" }, "m4.10xlarge" : { "Arch" : "HVM64" }, "c1.medium" : { "Arch" : "HVM64" }, "c1.xlarge" : { "Arch" : "HVM64" }, "c3.large" : { "Arch" : "HVM64" }, "c3.xlarge" : { "Arch" : "HVM64" }, "c3.2xlarge" : { "Arch" : "HVM64" }, "c3.4xlarge" : { "Arch" : "HVM64" }, "c3.8xlarge" : { "Arch" : "HVM64" }, "c4.large" : { "Arch" : "HVM64" }, "c4.xlarge" : { "Arch" : "HVM64" }, "c4.2xlarge" : { "Arch" : "HVM64" }, "c4.4xlarge" : { "Arch" : "HVM64" }, "c4.8xlarge" : { "Arch" : "HVM64" }, "g2.2xlarge" : { "Arch" : "HVMG2" }, "g2.8xlarge" : { "Arch" : "HVMG2" }, "r3.large" : { "Arch" : "HVM64" }, "r3.xlarge" : { "Arch" : "HVM64" }, "r3.2xlarge" : { "Arch" : "HVM64" }, "r3.4xlarge" : { "Arch" : "HVM64" }, "r3.8xlarge" : { "Arch" : "HVM64" }, "i2.xlarge" : { "Arch" : "HVM64" }, "i2.2xlarge" : { "Arch" : "HVM64" }, "i2.4xlarge" : { "Arch" : "HVM64" }, "i2.8xlarge" : { "Arch" : "HVM64" }, "d2.xlarge" : { "Arch" : "HVM64" }, "d2.2xlarge" : { "Arch" : "HVM64" }, "d2.4xlarge" : { "Arch" : "HVM64" }, "d2.8xlarge" : { "Arch" : "HVM64" }, "hi1.4xlarge" : { "Arch" : "HVM64" }, "hs1.8xlarge" : { "Arch" : "HVM64" }, "cr1.8xlarge" : { "Arch" : "HVM64" }, "cc2.8xlarge" : { "Arch" : "HVM64" } }, "AWSRegionArch2AMI" : { "us-east-1" : {"HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c"}, "us-west-2" : {"HVM64" : "ami-a0cfeed8", "HVMG2" : "ami-0e09505bc235aa82d"}, "us-west-1" : {"HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435"}, "eu-west-2" : {"HVM64" : "ami-f976839e", "HVMG2" : "NOT_SUPPORTED"}, "eu-west-3" : {"HVM64" : "ami-0ebc281c20e89ba4b", "HVMG2" : "NOT_SUPPORTED"}, "eu-central-1" : {"HVM64" : "ami-0233214e13e500f77", "HVMG2" : "ami-06223d46a6d0661c7"}, "ap-northeast-1" : {"HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d"}, "ap-northeast-2" : {"HVM64" : "ami-0a10b2721688ce9d2", "HVMG2" : "NOT_SUPPORTED"}, "ap-northeast-3" : {"HVM64" : "ami-0d98120a9fb693f07", "HVMG2" : "NOT_SUPPORTED"}, "ap-southeast-1" : {"HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309"}, "ap-southeast-2" : {"HVM64" : "ami-09b42976632b27e9b", "HVMG2" : "ami-0a9ce9fecc3d1daf8"}, "ap-south-1" : {"HVM64" : "ami-0912f71e06545ad88", "HVMG2" : "ami-097b15e89dbdcfcf4"}, "us-east-2" : {"HVM64" : "ami-0b59bfac6be064b78", "HVMG2" : "NOT_SUPPORTED"}, "ca-central-1" : {"HVM64" : "ami-0b18956f", "HVMG2" : "NOT_SUPPORTED"}, "sa-east-1" : {"HVM64" : "ami-07b14488da8ea02a0", "HVMG2" : "NOT_SUPPORTED"}, "cn-north-1" : {"HVM64" : "ami-0a4eaf6c4454eda75", "HVMG2" : "NOT_SUPPORTED"}, "cn-northwest-1" : {"HVM64" : "ami-6b6a7d09", "HVMG2" : "NOT_SUPPORTED"} } } }

    Hier finden Sie die gleichen Zuordnungen in YAML.

    Mappings: AWSInstanceType2Arch: t1.micro: Arch: HVM64 t2.nano: Arch: HVM64 t2.micro: Arch: HVM64 t2.small: Arch: HVM64 t2.medium: Arch: HVM64 t2.large: Arch: HVM64 m1.small: Arch: HVM64 m1.medium: Arch: HVM64 m1.large: Arch: HVM64 m1.xlarge: Arch: HVM64 m2.xlarge: Arch: HVM64 m2.2xlarge: Arch: HVM64 m2.4xlarge: Arch: HVM64 m3.medium: Arch: HVM64 m3.large: Arch: HVM64 m3.xlarge: Arch: HVM64 m3.2xlarge: Arch: HVM64 m4.large: Arch: HVM64 m4.xlarge: Arch: HVM64 m4.2xlarge: Arch: HVM64 m4.4xlarge: Arch: HVM64 m4.10xlarge: Arch: HVM64 c1.medium: Arch: HVM64 c1.xlarge: Arch: HVM64 c3.large: Arch: HVM64 c3.xlarge: Arch: HVM64 c3.2xlarge: Arch: HVM64 c3.4xlarge: Arch: HVM64 c3.8xlarge: Arch: HVM64 c4.large: Arch: HVM64 c4.xlarge: Arch: HVM64 c4.2xlarge: Arch: HVM64 c4.4xlarge: Arch: HVM64 c4.8xlarge: Arch: HVM64 g2.2xlarge: Arch: HVMG2 g2.8xlarge: Arch: HVMG2 r3.large: Arch: HVM64 r3.xlarge: Arch: HVM64 r3.2xlarge: Arch: HVM64 r3.4xlarge: Arch: HVM64 r3.8xlarge: Arch: HVM64 i2.xlarge: Arch: HVM64 i2.2xlarge: Arch: HVM64 i2.4xlarge: Arch: HVM64 i2.8xlarge: Arch: HVM64 d2.xlarge: Arch: HVM64 d2.2xlarge: Arch: HVM64 d2.4xlarge: Arch: HVM64 d2.8xlarge: Arch: HVM64 hi1.4xlarge: Arch: HVM64 hs1.8xlarge: Arch: HVM64 cr1.8xlarge: Arch: HVM64 cc2.8xlarge: Arch: HVM64 AWSRegionArch2AMI: us-east-1: HVM64: ami-0ff8a91507f77f867 HVMG2: ami-0a584ac55a7631c0c us-west-2: HVM64: ami-a0cfeed8 HVMG2: ami-0e09505bc235aa82d us-west-1: HVM64: ami-0bdb828fd58c52235 HVMG2: ami-066ee5fd4a9ef77f1 eu-west-1: HVM64: ami-047bb4163c506cd98 HVMG2: ami-0a7c483d527806435 eu-west-2: HVM64: ami-f976839e HVMG2: NOT_SUPPORTED eu-west-3: HVM64: ami-0ebc281c20e89ba4b HVMG2: NOT_SUPPORTED eu-central-1: HVM64: ami-0233214e13e500f77 HVMG2: ami-06223d46a6d0661c7 ap-northeast-1: HVM64: ami-06cd52961ce9f0d85 HVMG2: ami-053cdd503598e4a9d ap-northeast-2: HVM64: ami-0a10b2721688ce9d2 HVMG2: NOT_SUPPORTED ap-northeast-3: HVM64: ami-0d98120a9fb693f07 HVMG2: NOT_SUPPORTED ap-southeast-1: HVM64: ami-08569b978cc4dfa10 HVMG2: ami-0be9df32ae9f92309 ap-southeast-2: HVM64: ami-09b42976632b27e9b HVMG2: ami-0a9ce9fecc3d1daf8 ap-south-1: HVM64: ami-0912f71e06545ad88 HVMG2: ami-097b15e89dbdcfcf4 us-east-2: HVM64: ami-0b59bfac6be064b78 HVMG2: NOT_SUPPORTED ca-central-1: HVM64: ami-0b18956f HVMG2: NOT_SUPPORTED sa-east-1: HVM64: ami-07b14488da8ea02a0 HVMG2: NOT_SUPPORTED cn-north-1: HVM64: ami-0a4eaf6c4454eda75 HVMG2: NOT_SUPPORTED cn-northwest-1: HVM64: ami-6b6a7d09 HVMG2: NOT_SUPPORTED

Outputs hinzufügen

Outputs deklarieren Werte, die für einen describe stacks API-Aufruf oder über die Registerkarte Outputs im CloudFormation Konsolen-Stack verfügbar sein sollen. Bei dieser schrittweisen Anleitung werden wir die Website-URL ausgeben, sodass Sie Webseite nach der Erstellung einfach betrachten können. Weitere Informationen finden Sie unter Ausgaben.

  1. Wählen Sie im Integrierter Editor-Bereich die Registerkarte Outputs aus.

  2. Kopieren Sie den folgenden JSON-Output und fügen Sie ihn in den Integrierter Editor ein.

    Die Ausgabe verwendet eine Fn::GetAtt intrinsische Funktion, um die öffentliche IP der Web-Server-Instance abzurufen.

    { "Outputs": { "URL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "WebServerInstance", "PublicIp" ] } ] ] }, "Description": "Newly created application URL" } } }

    Hier finden Sie den gleichen Output in YAML.

    Outputs: URL: Value: !Join - '' - - 'http://' - !GetAtt - WebServerInstance - PublicIp Description: Newly created application URL
  3. Speichern Sie Ihre Vorlage erneut, sodass die Änderungen nicht verloren gehen. Sie können Ihre Änderungen sicher in derselben Datei speichern, die Sie im vorhergehenden Abschnitt erstellt haben.

Jetzt, da Vorlagenparameter, Zuordnungen und Outputs vorhanden sind, können wir Ressourceneigenschaften festlegen.

Schritt 3: Ressourceneigenschaften festlegen

Viele Ressourcen haben erforderliche Eigenschaften, die ihre Konfigurationen oder Einstellungen festlegen, darunter, welcher Instanztyp für den Webserver verwendet werden soll. Ähnlich zu unserem Vorgehen im letzten Schritt verwenden wir den AWS CloudFormation Designer Integrierter Editor, um Ressourcen-Eigenschaften festzulegen. Die Anleitung umfasst JSON- und YAML-Beispielcode, den Sie in den Integrierter Editor einfügen können.

Ressourceneigenschaften angeben

  1. Wählen Sie auf der AWS CloudFormation Designer-Leinwand die VPC-Ressource.

    The Integrierter Editor zeigt die Komponenten auf Ressourcenebene an, die Sie bearbeiten können, wie die Ressourceneigenschaften und die Attribute.

  2. Wählen Sie im Integrierter Editor-Bereich die Registerkarte Eigenschaften aus.

  3. Kopieren Sie den folgenden JSON-Snippet und fügen Sie ihn in den Integrierter Editor zwischen den Eigenschaften-Klammern ({}) ein.

    Dieses Snippt legt die DNS-Einstellungen und den CIDR-Block der VPC fest.

    "EnableDnsSupport": "true", "EnableDnsHostnames": "true", "CidrBlock": "10.0.0.0/16"

    Geben Sie bei YAML eine neue Zeile nach Properties: ein und fügen Sie das folgende Snippet ein.

    EnableDnsSupport: 'true' EnableDnsHostnames: 'true' CidrBlock: 10.0.0.0/16
    Anmerkung

    Zum Komfort umfast die Anleitung JSON- und YAML-Snippets, die Sie kopieren und einfügen können. Beachten Sie jedoch, dass der Editor über eine automatische Vervollständigung verfügt, mit der Sie jede Eigenschaft manuell festlegen können. Weitere Informationen finden Sie unter Integrierter JSON- und YAML-Editor.

  4. Wiederholen Sie diesen Prozess mit den folgenden Ressourcen:

    PublicSubnet

    Fügen Sie die folgende CIDR-Block-Eigenschaft nach der VPC-ID-Eigenschaft hinzu. AWS CloudFormation Designer hat automatisch die Eigenschaft VPC ID hinzugefügt, wenn Sie das Subnetz in den VPC gezogen haben.

    Anmerkung

    Sie sehen hier einige weiteren Verknüpfungen, die AWS CloudFormation Designer automatisch für Sie erstellt hat. Fügen Sie nur die neuen Eigenschaften, die fettgedruckt dargestellt sind, hinzu.

    JSON

    "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/24"

    YAML

    VpcId: !Ref VPC CidrBlock: 10.0.0.0/24
    PublicRoute

    Fügen Sie die folgende Ziel-CIDR-Block-Eigenschaft hinzu, die den gesamten Datenverkehr zum Internet-Gateway leitet:

    JSON

    "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "PublicRouteTable" }, "GatewayId": { "Ref": "InternetGateway" }

    YAML

    DestinationCidrBlock: 0.0.0.0/0 RouteTableId: !Ref PublicRouteTable GatewayId: !Ref InternetGateway
    WebServerSecurityGroup

    Fügen sie die folgenden Regeln für eingehenden Datenverkehr hinzu, die festlegen, welcher Traffic die Web-Server-Instanz erreichen kann. Die Regel erlaubt allen HTTP-Traffic und bestimmten SSH-Traffic, den Sie beim Erstellen eines Stacks als Parameterwert angeben können.

    JSON

    "VpcId": { "Ref": "VPC" }, "GroupDescription" : "Allow access from HTTP and SSH traffic", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" }, { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": { "Ref": "SSHLocation" } } ]

    YAML

    VpcId: !Ref VPC GroupDescription: Allow access from HTTP and SSH traffic SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation
    WebServerInstance

    Sie müssen eine Reihe von Eigenschaften für die Web-Server-Instanz festlegen; wir werden einige dieser Eigenschaften zu Demonstrationszwecken besprechen. Die Eigenschaften InstanceType und ImageId verwenden die Parameter- und Zuweisungswerte, die wir im letzten Abschnitt festgelegt haben. Bei der Erstellung eines Stack legen Sie den Instance-Typ als Parameterwert fest. Der ImageId-Wert ist eine Zuweisung, die auf der Region Ihres Stack und dem von Ihnen festgelegten Instance-Typ basiert.

    Die NetworkInterfaces Eigenschaft legt Netzwerkeinstellungen für die Web-Server-Instance fest. Diese Eigenschaft ermöglicht es uns, die Sicherheitsgruppe und das Subnetz mit der Instance zu verknüpfen. Obwohl AWS CloudFormation Designer die Eigenschaft SubnetId zur Verknüpfung der Instance mit dem Subnetz verwendet, müssen wir die Eigenschaft NetworkInterfaces verwenden, da dies der einzige Weg ist, dem Web-Server eine öffentliche IP zuzuweisen. Und wenn Sie die Eigenschaft NetworkInterfaces angegeben, müssen Sie das Subnetz und die Sicherheitsgruppe in der Eigenschaft angeben.

    In der UserData Eigenschaft legen wir Konfigurationsskripts fest, die ausgeführt werden, nachdem die Instance gestartet wurde. Alle Konfigurationsinformationen sind in den Metadaten der Instance definiert, die wir im nächsten Schritt hinzufügen.

    Ersetzen Sie alle Eigenschaften durch das folgende Snippet:

    Wichtig

    Hängen Sie dieses Snippet keinen bestehenden Eigenschaften an.

    JSON

    "InstanceType": { "Ref": "InstanceType" }, "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "NetworkInterfaces": [ { "GroupSet": [ { "Ref": "WebServerSecurityGroup" } ], "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "DeleteOnTermination": "true", "SubnetId": { "Ref": "PublicSubnet" } } ], "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --configsets All ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } }

    YAML

    InstanceType: !Ref InstanceType ImageId: !FindInMap - AWSRegionArch2AMI - !Ref 'AWS::Region' - !FindInMap - AWSInstanceType2Arch - !Ref InstanceType - Arch KeyName: !Ref KeyName NetworkInterfaces: - GroupSet: - !Ref WebServerSecurityGroup AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: !Ref PublicSubnet UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - | yum install -y aws-cfn-bootstrap - | # Install the files and packages from the metadata - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --configsets All ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --region ' - !Ref 'AWS::Region' - |+
  5. Fügen Sie die Webserver-Konfigurations-Metadaten der Ressource WebServerInstance hinzu.

    1. Wählen Sie die WebServerInstance-Ressource aus, und wählen Sie dann die Metadaten-Registerkarte im Fenster Integrierter Editor aus.

    2. Wenn Sie Ihre Vorlage in JSON erstellen: Fügen Sie zwischen den Metadata-Klammern ({}) und hinter der schließenden AWS::CloudFormation::Designer Klammer ein Komma (,) ein.

    3. Fügen Sie nach der AWS::CloudFormation::Designer-Eigenschaft den folgenden Auszug hinzu, der das Hilfsskript „cfn-init” anweist, den Webserver zu starten und eine Basic Web Page zu erstellen.

      JSON

      "AWS::CloudFormation::Init" : { "configSets" : { "All" : [ "ConfigureSampleApp" ] }, "ConfigureSampleApp" : { "packages" : { "yum" : { "httpd" : [] } }, "files" : { "/var/www/html/index.html" : { "content" : { "Fn::Join" : ["\n", [ "<h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1>" ]]}, "mode" : "000644", "owner" : "root", "group" : "root" } }, "services" : { "sysvinit" : { "httpd" : { "enabled" : "true", "ensureRunning" : "true" } } } } }

      YAML

      'AWS::CloudFormation::Init': configSets: All: - ConfigureSampleApp ConfigureSampleApp: packages: yum: httpd: [] files: /var/www/html/index.html: content: !Join - |+ - - >- <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> mode: '000644' owner: root group: root services: sysvinit: httpd: enabled: 'true' ensureRunning: 'true'
  6. Wählen Sie in der AWS CloudFormation Designer-Symbolleiste die Option Validate template ( ), um nach Syntaxfehlern in Ihrer Vorlage zu suchen.

    Sehen Sie sich die Fehler im Messages-Bereich an und beheben Sie diese. Validieren Sie die Vorlage anschließend erneut. Wenn Sie keine Fehler sehen, ist Ihre Vorlage syntaktisch gültig.

  7. Speichern Sie Ihre abgeschlossene Vorlage, um alle Änderungen beizubehalten.

Sie verfügen jetzt über eine vollständige CloudFormation-Vorlage, die Sie verwenden können, um einen Basic-Webserver in einer VPC zu erstellen. Um die Vorlage zu erstellen, haben wir zuerst über die AWS CloudFormation Designer-Leinwand Vorlagenressourcen hinzugefügt und verbunden. Daraufhin haben wir mit dem Integrierter Editor weitere Vorlagenkomponenten hinzugefügt und Ressourceneigenschaften festgelegt. Im nächsten Schritt verwenden wir diese Vorlage, um einen Stack zu erstellen.

Schritt 4: Bereitstellen von Ressourcen

Um einen Stack zu erstellen, können Sie den CloudFormationAssistenten „Create Stack“ über den AWS CloudFormation Designer starten. Wir verwenden die Vorlage, die wir in den vorherigen Schritten erstellt haben, um einen CloudFormation-Stack zu erstellen. Nachdem CloudFormation alle Ressourcen bereitgestellt hat, ist eine einfache Website funktionsfähig.

So erstellen Sie den Stack

  1. Wählen Sie in der AWS CloudFormation Designer-Symbolleiste Create Stack aus (das Cloud-Symbol).

    AWS CloudFormation Designer speichert die geöffnete Vorlage in einem S3-Buckets und startet dann den CloudFormation Create Stack Wizard. CloudFormation verwendet den gleichen S3-Bucket, den es erstellt, wenn Sie Vorlagen hochladen.

  2. CloudFormation trägt die URL der Vorlage automatisch ein; wählen Sie Weiter aus.

  3. Geben Sie im Abschnitt Details eingeben einen Stack-Namen in das Feld Stack-Name ein. Wählen Sie BasicWebServerStack für dieses Beispiel.

  4. Geben Sie in Abschnitt Parametes für das Feld KeyName den Namen eines gültigen Amazon EC2-Schlüsselpaars derselben Region ein, in der Sie den Stack erstellen.

  5. Behalten Sie die weiteren Standardparameterwerte bei und wählen Sie Weiter aus.

  6. Für diese Anleitung müssen Sie keine Tags hinzufügen oder erweiterte Einstellungen angeben, wählen Sie daher Weiter aus.

  7. Stellen Sie sicher, dass Stackname und Amazon EC2-Schlüsselpaar-Name korrekt sind und wählen Sie daraufhin Erstellen aus.

Es kann einige Minuten dauern, bis AWS CloudFormation Ihren Stack erstellt hat. Betrachten Sie die Stack-Ereignisse, um den Fortschritt zu überwachen. Weitere Informationen zum Anzeigen von Stack-Ereignissen finden Sie unter Anzeigen Ihrer AWS CloudFormation-Stack-Daten und Ressourcen auf der AWS Management Console. Nachdem der Stack erstellt wurde, betrachten Sie den Stack-Output und rufen Sie die Sample-Webseiten-URL auf, um zu prüfen, dass die Webseite läuft. Weitere Informationen finden Sie unter Anzeigen Ihrer AWS CloudFormation-Stack-Daten und Ressourcen auf der AWS Management Console.

Nachdem Sie nun eine Vorlage erfolgreich erstellt und einen Stack mit AWS CloudFormation Designer gestartet haben, können Sie den Stack in der folgenden Anleitung nutzen: Walkthrough: Verwenden Sie zum Ändern der Vorlage eines Stacks AWS CloudFormation Designer; hier wird die Vorlage modifiziert, um einen skalierbaren Webserver zu erstellen.