AWS CloudFormation
Benutzerhandbuch (API-Version 2010-05-15)

AWS::CloudFormation::Init

Verwenden Sie den AWS::CloudFormation::Init-Typ, um Metadaten auf einer Amazon EC2-Instance für das Hilfsskript cfn-init einzuschließen. Wenn Ihre Vorlage das cfn-init-Skript aufruft, sucht das Skript nach Ressourcen-Metadaten, die im AWS::CloudFormation::Init-Metadatenschlüssel verankert sind. Weitere Informationen zu cfn-init finden Sie unter cfn-init.

cfn-init unterstützt alle Metadatentypen für Linux-Systeme. Es unterstützt die Metadatentypen für Windows mit Bedingungen, die in den folgenden Abschnitten beschrieben werden.

Ein Beispiel für die Verwendung von AWS::CloudFormation::Init und des Hilfsskripts cfn-init finden Sie unter Bereitstellen von Anwendungen auf Amazon EC2 mit AWS CloudFormation.

Ein Beispiel, das zeigt, wie Sie cfn-init zum Erstellen eines Windows-Stacks verwenden, finden Sie unter Bootstrapping für AWS CloudFormation-Windows-Stacks.

Syntax

Die Konfiguration ist in Abschnitte unterteilt. Der folgende Vorlagenausschnitt zeigt, wie Sie Metadaten für cfn-init an eine Amazon EC2-Instance-Ressource in der Vorlage anhängen können.

Die Metadaten sind in Konfigurationsschlüssel organisiert, die Sie in Konfigurationssätze gruppieren können. Sie können einen Konfigurationssatz angeben, wenn Sie cfn-init in Ihrer Vorlage aufrufen. Wenn Sie keinen Konfigurationssatz angeben, sucht cfn-init nach einem einzelnen Konfigurationsschlüssel mit dem Namen config.

Anmerkung

Das Hilfsskript cfn-init verarbeitet diese Konfigurationsabschnitte in der folgenden Reihenfolge: Pakete, Gruppen, Benutzer, Quellen, Dateien, Befehle und dann Services. Wenn Sie eine andere Reihenfolge wünschen, trennen Sie Ihre Abschnitte in verschiedene Konfigurationsschlüssel. Verwenden Sie anschließend einen Konfigurationssatz, der die Reihenfolge angibt, in der die Konfigurationsschlüssel verarbeitet werden sollen.

JSON

"Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { : }, "groups" : { : }, "users" : { : }, "sources" : { : }, "files" : { : }, "commands" : { : }, "services" : { : } } } }, "Properties": { : } } }

YAML

Resources: MyInstance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: : groups: : users: : sources: : files: : commands: : services: : Properties: :

Konfigurationssätze

Wenn Sie mehr als einen Konfigurationsschlüssel erstellen möchten und cfn-init diesen in einer bestimmten Reihenfolge verarbeiten soll, erstellen Sie einen Konfigurationssatz, welcher die Konfigurationsschlüssel in der gewünschten Reihenfolge enthält.

Einzelner Konfigurationssatz

Der folgende Vorlagenausschnitt erstellt die Konfigurationssätze ascending und descending, die jeweils zwei Konfigurationsschlüssel enthalten.

JSON

"AWS::CloudFormation::Init" : { "configSets" : { "ascending" : [ "config1" , "config2" ], "descending" : [ "config2" , "config1" ] }, "config1" : { "commands" : { "test" : { "command" : "echo \"$CFNTEST\" > test.txt", "env" : { "CFNTEST" : "I come from config1." }, "cwd" : "~" } } }, "config2" : { "commands" : { "test" : { "command" : "echo \"$CFNTEST\" > test.txt", "env" : { "CFNTEST" : "I come from config2" }, "cwd" : "~" } } } }

YAML

AWS::CloudFormation::Init: configSets: ascending: - "config1" - "config2" descending: - "config2" - "config1" config1: commands: test: command: "echo \"$CFNTEST\" > test.txt" env: CFNTEST: "I come from config1." cwd: "~" config2: commands: test: command: "echo \"$CFNTEST\" > test.txt" env: CFNTEST: "I come from config2" cwd: "~"

Verwandte cfn-init-Aufrufe

Die folgenden Beispielaufrufe von cfn-init beziehen sich auf die vorangehenden Beispiel-Konfigurationssätze. Die Beispielaufrufe sind aus Gründen der Übersichtlichkeit abgekürzt. Die vollständige Syntax finden Sie unter cfn-init.

  • Wenn ein Aufruf von cfn-init den ascending-Konfigurationssatz angibt:

    cfn-init -c ascending

    Das Skript verarbeitet config1 und verarbeitet dann config2 und die test.txt-Datei würde den Text I come from config2 enthalten.

  • Wenn ein Aufruf von cfn-init den descending-Konfigurationssatz angibt:

    cfn-init -c descending

    Das Skript verarbeitet config2 und verarbeitet dann config1 und die test.txt-Datei würde den Text I come from config1 enthalten.

Mehrere Konfigurationssätze

Sie können mehrere Configsets erstellen und mehrere davon mithilfe Ihres cfn-init-Skripts aufrufen. Jeder Konfigurationssatz kann eine Liste von Konfigurationsschlüsseln oder Verweisen auf andere Konfigurationssätze enthalten. Der folgende Vorlagenausschnitt erstellt z. B. drei Konfigurationssätze. Der erste Konfigurationssatz test1enthält einen Konfigurationsschlüssel mit dem Namen 1. Der zweite Konfigurationssatz, test2, enthält einen Verweis auf den test1-Konfigurationssatz und einen Konfigurationsschlüssel mit dem Namen 2. Der dritte Konfigurationssatz, „default“, enthält einen Verweis auf den Konfigurationssatz test2.

JSON

"AWS::CloudFormation::Init" : { "configSets" : { "test1" : [ "1" ], "test2" : [ { "ConfigSet" : "test1" }, "2" ], "default" : [ { "ConfigSet" : "test2" } ] }, "1" : { "commands" : { "test" : { "command" : "echo \"$MAGIC\" > test.txt", "env" : { "MAGIC" : "I come from the environment!" }, "cwd" : "~" } } }, "2" : { "commands" : { "test" : { "command" : "echo \"$MAGIC\" >> test.txt", "env" : { "MAGIC" : "I am test 2!" }, "cwd" : "~" } } } }

YAML

AWS::CloudFormation::Init: 1: commands: test: command: "echo \"$MAGIC\" > test.txt" env: MAGIC: "I come from the environment!" cwd: "~" 2: commands: test: command: "echo \"$MAGIC\" >> test.txt" env: MAGIC: "I am test 2!" cwd: "~" configSets: test1: - "1" test2: - ConfigSet: "test1" - "2" default: - ConfigSet: "test2"

Verwandte cfn-init-Aufrufe

Die folgenden Aufrufe von cfn-init beziehen sich auf die im vorhergehenden Vorlagenausschnitt deklarierten Konfigurationssätze. Die Beispielaufrufe sind aus Gründen der Übersichtlichkeit abgekürzt. Die vollständige Syntax finden Sie unter cfn-init.

  • Wenn Sie nur test1 angeben:

    cfn-init -c test1

    cfn-init verarbeitet nur den Konfigurationsschlüssel 1.

  • Wenn Sie nur test2 angeben:

    cfn-init -c test2

    cfn-init verarbeitet den Konfigurationsschlüssel 1 und dann den Konfigurationsschlüssel 2.

  • Wenn Sie den default-Konfigurationssatz angeben (oder überhaupt keine Konfigurationssätze):

    cfn-init -c default

    Sie erhalten dasselbe Verhalten, das Sie erhalten würden, wenn Sie den Konfigurationssatz test2 angeben würden.

Befehle

Sie können den Befehle-Schlüssel verwenden, um Befehle für die EC2-Instance auszuführen. Die Befehle werden in alphabetischer Reihenfolge nach Name verarbeitet.

Schlüssel Beschreibung

command

Erforderlich. Entweder ein Array oder eine Zeichenfolge, das bzw. die den auszuführenden Befehl angibt. Wenn Sie ein Array verwenden, müssen Sie für Leerzeichen keine Escape-Zeichen verwenden oder Befehlsparameter in Anführungszeichen setzen. Verwenden Sie das Array nicht, um mehrere Befehle anzugeben.

env

Optional. Legt Umgebungsvariablen für den Befehl fest. Diese Eigenschaft überschreibt die vorhandene Umgebung, anstatt sie anzuhängen.

cwd

Optional. Das Arbeitsverzeichnis

Test

Optional. Ein Testbefehl, der bestimmt, ob cfn-init Befehle ausführt, die im Befehlsschlüssel angegeben sind. Wenn der Test bestanden wird, führt cfn-init die Befehle aus. Das cfn-init-Skript führt den Test in einem Befehlsinterpreter, wie z. B. Bash oder cmd.exe, aus. Ob ein Test bestanden wird, hängt von dem Beendigungscode ab, den der Interpreter zurückgibt.

Bei Linux muss der Testbefehl den Beendigungscode 0 zurückgeben, damit der Test bestanden ist. Bei Windows muss der Testbefehl den %ERRORLEVEL% 0 zurückgeben.

ignoreErrors

Optional. Ein boolescher Wert, der bestimmt, ob cfn-init weiter ausgeführt wird, wenn der im Befehlsschlüssel enthaltene Befehl fehlschlägt (gibt einen Wert ungleich null zurück). Legen Sie den Wert auf true fest, wenn cfn-init weiter ausgeführt werden soll, selbst wenn der Befehl fehlschlägt. Legen Sie den Wert auf false fest, wenn cfn-init angehalten werden soll, wenn der Befehl fehlschlägt. Der Standardwert ist false.

waitAfterCompletion

Optional. Nur für Windows-Systeme. Gibt an, wie lange gewartet werden soll (in Sekunden) nachdem ein Befehl abgeschlossen wurde, falls der Befehl einen Neustart verursacht. Der Standardwert lautet 60 Sekunden und beim Wert „unbegrenzt“ wird cfn-init beendet und fortgesetzt, nachdem der Neustart abgeschlossen wurde. Setzen Sie diesen Wert auf, 0 wenn Sie nicht auf jeden Befehl warten möchten.

Beispiel

Mit dem folgenden Beispiel wird der Echo-Befehl aufgerufen, wenn die ~/test.txt-Datei nicht vorhanden ist.

JSON

"commands" : { "test" : { "command" : "echo \"$MAGIC\" > test.txt", "env" : { "MAGIC" : "I come from the environment!" }, "cwd" : "~", "test" : "test ! -e ~/test.txt", "ignoreErrors" : "false" }, "test2" : { "command" : "echo \"$MAGIC2\" > test2.txt", "env" : { "MAGIC2" : "I come from the environment!" }, "cwd" : "~", "test" : "test ! -e ~/test2.txt", "ignoreErrors" : "false" } }

YAML

commands: test: command: "echo \"$MAGIC\" > test.txt" env: MAGIC: "I come from the environment!" cwd: "~" test: "test ! -e ~/test.txt" ignoreErrors: "false" test2: command: "echo \"$MAGIC2\" > test2.txt" env: MAGIC2: "I come from the environment!" cwd: "~" test: "test ! -e ~/test2.txt" ignoreErrors: "false"

Datei-

Sie können den files-Schlüssel verwenden, um Dateien auf der EC2-Instance zu erstellen. Der Inhalt kann entweder in die Vorlage eingebettet sein oder von einer URL abgerufen werden. Die Dateien werden in lexikalischer Reihenfolge auf den Datenträger geschrieben. In der folgenden Tabelle sind die unterstützten Schlüssel aufgeführt.

Schlüssel Beschreibung

content

Entweder eine Zeichenfolge oder ein ordnungsgemäß formatiertes JSON-Objekt. Wenn Sie ein JSON-Objekt als Ihren Inhalt verwenden, wird es in eine Datei auf dem Datenträger geschrieben. Intrinsische Funktionen wie Fn::GetAtt oder Ref werden ausgewertet, bevor das JSON-Objekt auf den Datenträger geschrieben wird. Wenn Sie einen Symlink erstellen, geben Sie das Symlink-Ziel als Inhalt an.

Anmerkung

Wenn Sie einen Symlink erstellen, ändert das Hilfsprogramm-Skript die Berechtigungen der Zieldatei. Derzeit ist es nicht möglich, einen Symlink zu erstellen, ohne die Berechtigungen der Zieldatei zu ändern.

source

Eine URL, von der die Datei geladen wird. Diese Option kann nicht mit dem Inhaltsschlüssel angegeben werden.

encoding

Das Codierungsformat. Wird nur verwendet, wenn der Inhalt eine Zeichenfolge ist. Codierung wird nicht angewendet, wenn Sie eine Quelle verwenden.

Zulässige Werte: plain | base64

Gruppe

Der Name der besitzenden Gruppe für diese Datei. Wird für Windows-Systeme nicht unterstützt.

owner

Der Name des besitzenden Benutzers für diese Datei. Wird für Windows-Systeme nicht unterstützt.

mode

Ein sechsstelliger Oktalwert, der für den Modus für diese Datei steht. Wird für Windows-Systeme nicht unterstützt. Verwenden Sie die ersten drei Ziffern für Symlinks und die letzten drei Ziffern für das Einrichten von Berechtigungen. Um einen Symlink zu erstellen, geben Sie 120xxx an, wobei xxx die Berechtigungen der Zieldatei definiert. Um Berechtigungen für eine Datei anzugeben, verwenden Sie die letzten drei Ziffern, z. B. 000644.

Authentifizierung

Der Name einer Authentifizierungsmethode, die verwendet werden soll. Dadurch wird jegliche Standardauthentifizierung außer Kraft gesetzt. Mit dieser Eigenschaft können Sie eine Authentifizierungsmethode auswählen, die Sie mit der AWS::CloudFormation::Authentication-Ressource definieren.

context

Gibt einen Kontext für Dateien an, die als Mustache-Vorlagen verarbeitet werden sollen. Um diesen Schlüssel zu verwenden, müssen Sie aws-cfn-bootstrap 1.3-11 oder höher sowie pystache installiert haben.

Beispiele

Der folgende Beispielausschnitt erstellt eine Datei mit dem Namen setup.mysql als Teil einer größeren Installation.

Beispiel JSON

"files" : { "/tmp/setup.mysql" : { "content" : { "Fn::Join" : ["", [ "CREATE DATABASE ", { "Ref" : "DBName" }, ";\n", "CREATE USER '", { "Ref" : "DBUsername" }, "'@'localhost' IDENTIFIED BY '", { "Ref" : "DBPassword" }, "';\n", "GRANT ALL ON ", { "Ref" : "DBName" }, ".* TO '", { "Ref" : "DBUsername" }, "'@'localhost';\n", "FLUSH PRIVILEGES;\n" ]]}, "mode" : "000644", "owner" : "root", "group" : "root" } }

Beispiel YAML

files: /tmp/setup.mysql: content: !Sub | CREATE DATABASE ${DBName}; CREATE USER '${DBUsername}'@'localhost' IDENTIFIED BY '${DBPassword}'; GRANT ALL ON ${DBName}.* TO '${DBUsername}'@'localhost'; FLUSH PRIVILEGES; mode: "000644" owner: "root" group: "root"

Die vollständige Vorlage steht unter folgender Adresse zur Verfügung: https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Single_Instance.template

Mit dem folgenden Beispielausschnitt wird eine Symlink-/tmp/myfile2.txt erstellt, die auf die vorhandene Datei /tmp/myfile1.txt verweist. Die Berechtigungen der Zieldatei /tmp/myfile1.txt werden durch den Moduswert 644 erstellt.

Beispiel JSON

"files" : { "/tmp/myfile2.txt" : { "content" : "/tmp/myfile1.txt", "mode" : "120644" } }

Beispiel YAML

files: /tmp/myfile2.txt: content: "/tmp/myfile1.txt" mode: "120644"

Mustache-Vorlagen werden in erster Linie zum Erstellen von Konfigurationsdateien verwendet. Sie können beispielsweise eine Konfigurationsdatei in einem S3-Bucket speichern und Refs und GetAtts Refs aus der Vorlage interpolieren, anstatt Fn::Join zu verwenden. Der folgende Beispielausschnitt gibt „Content for test9“ an /tmp/test9.txt aus.

Beispiel JSON

"files" : { "/tmp/test9.txt" : { "content" : "Content for {{name}}", "context" : { "name" : "test9" } } }

Beispiel YAML

files: /tmp/test9.txt: content: "Content for {{name}}" context: name: "test9"

Beachten Sie beim Arbeiten mit Mustache-Vorlagen Folgendes:

  • Der Kontextschlüssel muss für die zu verarbeitenden Dateien vorhanden sein.

  • Der Kontextschlüssel muss eine Schlüssel-Wert-Zuweisung sein, kann jedoch verschachtelt sein.

  • Sie können Dateien mit Inlineinhalt mithilfe des Inhaltsschlüssels und Remote-Dateien mithilfe des Quellschlüssels verarbeiten.

  • Mustache-Unterstützung hängt von der pystache-Version ab. Version 0.5.2 unterstützt die Mustache 1.1.2-Spezifikation.

Gruppen

Sie können die Gruppenschlüssel verwenden, um Linux-/UNIX-Gruppen zu erstellen und Gruppen-IDs zuzuweisen. Der Gruppenschlüssel wird für Windows-Systeme nicht unterstützt.

Um eine Gruppe zu erstellen, fügen Sie ein neues Schlüssel-Wert-Paar hinzu, das einer optionalen Gruppen-ID einen neuen Gruppennamen zuordnet. Der Gruppenschlüssel kann einen oder mehrere Gruppennamen enthalten. In der folgenden Tabelle werden die verfügbaren Schlüssel aufgeführt.

Schlüssel Beschreibung

gid

Eine Gruppen-ID-Nummer.

Wenn eine Gruppen-ID angegeben ist und die Gruppe nach Name bereits vorhanden ist, schlägt die Gruppenerstellung fehl. Wenn eine andere Gruppe die angegebene Gruppen-ID aufweist, lehnt das Betriebssystem die Gruppenerstellung möglicherweise ab.

Beispiel: { "gid" : "23" }

Beispielausschnitt

Der folgende Codeausschnitt gibt eine Gruppe mit dem Namen groupOne an, ohne eine Gruppen-ID zuzuweisen, und eine Gruppe mit dem Namen groupTwo, die den Gruppen-ID-Wert 45 angegeben hat.

JSON

"groups" : { "groupOne" : {}, "groupTwo" : { "gid" : "45" } }

YAML

groups: groupOne: {} groupTwo: gid: "45"

Pakete

Sie können den Paketeschlüssel verwenden, um vorkonfigurierte Anwendungen und Komponenten herunterzuladen und zu installieren. Auf Windows-Systemen unterstützt der Paketeschlüssel nur das MSI-Installationsprogramm.

Unterstützte Paketformate

Das cfn-init-Skript unterstützt derzeit die folgenden Paketformate: apt, msi, python, rpm, rubygems und yum. Pakete werden in der folgenden Reihenfolge verarbeitet: rpm, yum/apt und dann rubygems und python. Bei rubygems und python gibt es keine Reihenfolge und es ist nicht gewährleistet, dass Pakete innerhalb jedes Paketmanagers in einer Reihenfolge installiert werden.

Angeben von Versionen

Innerhalb jedes Paketmanagers ist jedes Paket als ein Paketname und eine Liste der Versionen angegeben. Die Version kann eine Zeichenfolge, eine Liste von Versionen oder eine leere Zeichenfolge oder Liste sein. Eine leere Zeichenfolge oder Liste gibt an, dass Sie die neueste Version verwenden möchten. Bei RPM-Manager wird die Version als ein Pfad zu einer Datei auf einem Datenträger oder eine URL angegeben.

Wenn Sie eine Version eines Pakets angeben, versucht cfn-init, diese Version zu installieren, auch wenn auf der Instance bereits eine neuere Version des Pakets installiert ist. Einige Paketmanager unterstützen mehrere Versionen, andere wiederum nicht. In der Dokumentation zu Ihrem Paketmanager finden Sie weitere Informationen. Wenn Sie keine Version angeben und bereits eine Version des Pakets installiert ist, installiert das cfn-init-Skript keine neue Version—Es wird angenommen, dass Sie die bestehende Version behalten und verwenden möchten.

Beispielausschnitte

rpm, yum und Rubygems

Der folgende Codeausschnitt gibt eine Versions-URL für RPM an, fordert die neuesten Versionen von yum und Version 0.10.2 von chef von rubygems an:

JSON
"rpm" : { "epel" : "http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm" }, "yum" : { "httpd" : [], "php" : [], "wordpress" : [] }, "rubygems" : { "chef" : [ "0.10.2" ] }
YAML
rpm: epel: "http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm" yum: httpd: [] php: [] wordpress: [] rubygems: chef: - "0.10.2"

MSI-Paket

Der folgende Codeausschnitt gibt eine URL für ein MSI-Paket an:

JSON
"msi" : { "awscli" : "https://s3.amazonaws.com/aws-cli/AWSCLI64.msi" }
YAML
msi: awscli: "https://s3.amazonaws.com/aws-cli/AWSCLI64.msi"

Services

Sie können den Services-Schlüssel verwenden, um zu definieren, welche Services aktiviert oder deaktiviert werden sollen, wenn die Instance gestartet wird. Auf Linux-Systemen wird dieser Schlüssel mithilfe von sysvinit unterstützt. Auf Windows-Systemen wird er mithilfe des Windows Service Manager unterstützt.

Mit dem Services-Schlüssel können Sie auch Abhängigkeiten von Quellen, Paketen und Dateien angeben, sodass cfn-init den Neustart des Services ausführt, wenn dieser erforderlich ist, weil Dateien installiert werden. Wenn Sie beispielsweise das Apache-HTTP-Server-Paket herunterladen, startet die Paketinstallation während der Stack-Erstellung automatisch den Apache-HTTP-Server. Wenn die Konfiguration des Apache-HTTP Servers allerdings später im Stack-Erstellungsprozess aktualisiert wird, wird die Aktualisierung erst wirksam, wenn der Apache-Server neu gestartet wird. Sie können mithilfe des Services-Schlüssels sicherstellen, dass der Apache-HTTP-Service neu gestartet wird.

In der folgenden Tabelle sind die unterstützten Schlüssel aufgeführt.

Schlüssel Beschreibung

ensureRunning

Legen Sie den Wert auf „true“ fest, um sicherzustellen, dass der Service ausgeführt wird, nachdem cfn-init abgeschlossen wurde.

Legen Sie den Wert auf „false“ fest, um sicherzustellen, dass der Service nicht ausgeführt wird, nachdem cfn-init abgeschlossen wurde.

Lassen Sie diesen Schlüssel aus, um keine Änderungen am Servicestatus vorzunehmen.

aktiviert

Legen Sie den Wert auf „true“ fest, um sicherzustellen, dass der Service beim Systemstart automatisch gestartet wird.

Legen Sie den Wert auf „false“ fest, um sicherzustellen, dass der Service beim Systemstart nicht automatisch gestartet wird.

Lassen Sie diesen Schlüssel aus, um keine Änderungen an dieser Eigenschaft vorzunehmen.

files

Eine Liste von Dateien. Wenn cfn-init eine direkt über den Dateienblock ändert, wird dieser Service neu gestartet

Quellen

Eine Liste von Verzeichnissen. Wenn cfn-init ein Archiv in eines dieser Verzeichnisse erweitert, wird dieser Service neu gestartet.

Pakete

Eine Zuordnung von Paketmanager zu einer Liste von Paketnamen. Wenn cfn-init eines dieser Pakete installiert oder aktualisiert, wird dieser Dienst neu gestartet.

commands

Eine Liste von Befehlsnamen. Wenn cfn-init den angegebenen Befehl ausführt, wird dieser Dienst neu gestartet.

Beispiele

Linux

Der folgende Linux-Ausschnitt konfiguriert die Services wie folgt:

  • Der nginx-Service wird neu gestartet, wenn /etc/nginx/nginx.conf oder /var/www/html von cfn-init verändert werden.

  • Der php-fastcgi-Service wird neu gestartet, wenn cfn-init php oder spawn-fcgi mit yum installiert oder aktualisiert.

  • Der sendmail-Service wird angehalten und deaktiviert.

JSON
"services" : { "sysvinit" : { "nginx" : { "enabled" : "true", "ensureRunning" : "true", "files" : ["/etc/nginx/nginx.conf"], "sources" : ["/var/www/html"] }, "php-fastcgi" : { "enabled" : "true", "ensureRunning" : "true", "packages" : { "yum" : ["php", "spawn-fcgi"] } }, "sendmail" : { "enabled" : "false", "ensureRunning" : "false" } } }
YAML
services: sysvinit: nginx: enabled: "true" ensureRunning: "true" files: - "/etc/nginx/nginx.conf" sources: - "/var/www/html" php-fastcgi: enabled: "true" ensureRunning: "true" packages: yum: - "php" - "spawn-fcgi" sendmail: enabled: "false" ensureRunning: "false"

Windows

Der folgende Windows-Ausschnitt startet den cfn-hup-Service, legt ihn auf automatisch fest und startet den Service neu, wenn cfn-init die angegebenen Konfigurationsdateien ändert:

JSON
"services" : { "windows" : { "cfn-hup" : { "enabled" : "true", "ensureRunning" : "true", "files" : ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"] } } }
YAML
services: windows: cfn-hup: enabled: "true" ensureRunning: "true" files: - "c:\\cfn\\cfn-hup.conf" - "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"

Quellen

Sie können den Quellenschlüssel verwenden, um eine Archivdatei herunterzuladen und sie auf der EC2-Instance in einem Zielverzeichnis zu entpacken. Dieser Schlüssel wird sowohl für Linux- als auch Windows-Systeme vollständig unterstützt.

Unterstützte Formate

Unterstützte Formate sind tar, tar+gzip, tar+bz2 und zip.

Beispiele

GitHub

Wenn Sie als Quellcodeverwaltungssystem GitHub verwenden, können Sie mit cfn-init und dem Quellen-Paket-Mechanismus eine bestimmte Version Ihrer Anwendung abrufen. GitHub ermöglicht Ihnen wie folgt, über eine URL eine ZIP- oder TAR-Datei aus einer bestimmten Version zu erstellen:

https://github.com/<your directory>/(zipball|tarball)/<version>

Der folgende Codeausschnitt ruft Versions-Master als .tar-Datei ab.

JSON
"sources" : { "/etc/puppet" : "https://github.com/user1/cfn-demo/tarball/master" }
YAML
sources: /etc/puppet: "https://github.com/user1/cfn-demo/tarball/master"

S3 Bucket

Das folgende Beispiel lädt eine ZIP-Datei aus einem Amazon S3-Bucket herunter und entpackt sie in /etc/myapp:

Anmerkung

Sie können Authentifizierungs-Anmeldeinformationen für eine Quelle verwenden. Sie können jedoch keinen Authentifizierungsschlüssel in den Quellen-Block einfügen. Schließen Sie stattdessen einen Buckets-Schlüssel in Ihren S3AccessCreds-Block ein. Ein Beispiel finden Sie in der Beispielvorlage. Weitere Informationen zu Amazon S3-Authentifizierungs-Anmeldeinformationen finden Sie unter AWS::CloudFormation::Authentication.

JSON
"sources" : { "/etc/myapp" : "https://s3.amazonaws.com/mybucket/myapp.tar.gz" }
YAML
sources: /etc/myapp: "https://s3.amazonaws.com/mybucket/myapp.tar.gz"

Benutzer

Sie können den Benutzerschlüssel verwenden, um auf der EC2-Instance Linux-/UNIX-Benutzer zu erstellen. Der Benutzerschlüssel wird für Windows-Systeme nicht unterstützt.

In der folgenden Tabelle sind die unterstützten Schlüssel aufgeführt.

Schlüssel Beschreibung

Benutzerkennung

Eine Benutzer-ID. Der Erstellungsprozess ist nicht erfolgreich, wenn der Benutzername mit einer anderen Benutzer-ID vorhanden ist. Wenn die Benutzer-ID bereits einem vorhandenen Benutzer zugewiesen ist, lehnt das Betriebssystem die Erstellungsanforderung möglicherweise ab.

Gruppen

Eine Liste von Gruppennamen. Der Benutzer wird jeder Gruppe in der Liste hinzugefügt.

homeDir

Das Stammverzeichnis des Benutzers.

Beispiel

Benutzer werden als nicht interaktive Systembenutzer mit der Shell /sbin/nologin erstellt. Dies ist beabsichtigt und kann nicht geändert werden.

JSON

"users" : { "myUser" : { "groups" : ["groupOne", "groupTwo"], "uid" : "50", "homeDir" : "/tmp" } }

YAML

users: myUser: groups: - "groupOne" - "groupTwo" uid: "50" homeDir: "/tmp"