Beispiel 6: Erstellen von Dateien - AWS OpsWorks

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.

Beispiel 6: Erstellen von Dateien

Wichtig

Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden deaktiviert. Wir empfehlen Kunden dringend, ihre Workloads so bald wie möglich auf andere Lösungen zu migrieren. Wenn Sie Fragen zur Migration haben, wenden Sie sich an das AWS Support Team auf AWS re:POST oder über den AWS Premium-Support.

Nachdem Sie Verzeichnisse erstellt haben, müssen diese meist mit Konfigurationsdateien, Datendateien usw. gefüllt werden. In diesem Thema werden zwei Möglichkeiten vorgestellt, mit denen Sie Dateien auf einer Instance installieren können.

Installieren einer Datei mithilfe eines Rezeptbuchs

Die einfachste Möglichkeit zum Installieren einer Datei auf einer Instance bietet eine cookbook_file-Ressource, mit der eine Datei aus dem Rezeptbuch kopiert und am angegebenen Speicherort auf der Instance eingefügt wird (dies gilt für Linux- und Windows-Systeme). In diesem Beispiel wird das in Beispiel 3: Erstellen von Verzeichnissen verwendete Rezept erweitert, um nach der Verzeichniserstellung eine Datendatei /srv/www/shared hinzuzufügen. Hier ist zu Referenzzwecken das ursprüngliche Rezept.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
So richten Sie das Rezeptbuch ein
  1. Erstellen Sie ein Verzeichnis in opsworks_cookbooks namens createfile und öffnen Sie es.

  2. Fügen Sie eine Datei metadata.rb zu createfile mit dem folgenden Inhalt hinzu:

    name "createfile" version "0.1.0"
  3. Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben und entfernen Sie CentOS aus der Liste platforms.

  4. Fügen Sie ein Unterverzeichnis recipes zu createfile hinzu.

Die zu installierende Datei enthält folgende JSON-Daten.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
So richten Sie die Datendatei ein
  1. Fügen Sie ein Unterverzeichnis files zu createfile und ein Unterverzeichnis default zu files hinzu. Alle Dateien, die Sie mit cookbook_file installieren, müssen in einem Unterverzeichnis von files sein – in diesem Beispiel in files/default.

    Anmerkung

    Falls Sie unterschiedliche Dateien für verschiedene Systeme angeben möchten, können Sie die einzelnen systemspezifischen Dateien in einem Unterordner platzieren, der nach dem jeweiligen System benannt ist (z. B. files/ubuntu). Von der cookbook_file-Ressource wird dann die geeignete systemspezifische Datei kopiert, sofern vorhanden. Andernfalls wird die Datei default verwendet. Weitere Informationen finden Sie unter cookbook_file.

  2. Erstellen Sie eine Datei example_data.json mit dem JSON-Objekt aus dem vorigen Beispiel und fügen Sie sie zu Verzeichnis files/default hinzu.

Mit folgendem Rezept wird example_data.json an einen angegebenen Speicherort kopiert.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

Nachdem von der Verzeichnisressource das Verzeichnis /srv/www/shared erstellt wurde, kopiert die Ressource cookbook_file die Datei example_data.json in das Verzeichnis und legt zudem den Benutzer, die Gruppe und den Modus für die Datei fest.

Anmerkung

Mit der cookbook_file-Ressource wird eine neue Aktion eingeführt: create_if_missing. Sie könnten auch eine create-Aktion verwenden, aber diese würde eine vorhandene Datei überschreiben. Falls nichts überschrieben werden soll, verwenden Sie create_if_missing. Damit wird die Datei example_data.json nur installiert, wenn sie nicht bereits vorhanden ist.

So führen Sie das Rezept aus
  1. Führen Sie kitchen destroy aus, damit Sie mit einer neuen Instance beginnen können.

  2. Erstellen Sie die Datei default.rb, die das vorherige Rezept enthält, und speichern Sie diese in recipes.

  3. Führen Sie kitchen converge aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei /srv/www/shared in example_data.json vorhanden ist.

Erstellen einer Datei mithilfe einer Vorlage

Die cookbook_file-Ressource ist für einige Zwecke sehr gut geeignet, jedoch werden von ihr alle im Rezeptbuch vorhandenen Dateien installiert. Eine template-Ressource bietet eine flexiblere Methode, um eine Datei auf einem Windows- oder Linux-System zu installieren, da die Datei dynamisch aus einer Vorlage erstellt wird. Somit können Sie die Inhalte der Datei zur Laufzeit bestimmen und bei Bedarf ändern. Beispielsweise können Sie beim Start einer Instance eine bestimmte Einstellung in der Konfigurationsdatei vorgeben und diese später ändern, wenn Sie weitere Instances zum Stack hinzufügen.

Im Beispiel wird das Rezeptbuch createfile so angepasst, dass mit einer template-Ressource eine leicht abgewandelte Version von example_data.json installiert wird.

So sieht die installierte Datei aus.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }

"template"-Ressourcen werden in der Regel in Verbindung mit Attributdateien verwendet, daher wird auch in diesem Beispiel eine zur Definition der folgenden Werte genutzt.

default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
So richten Sie das Rezeptbuch ein
  1. Löschen Sie das Verzeichnis createfile und dessen Inhalte aus dem Rezeptbuch files.

  2. Fügen Sie das Unterverzeichnis attributes zu createfile hinzu. Fügen Sie außerdem die Datei default.rb mit den vorherigen Attributdefinitionen zu attributes hinzu.

Bei einer Vorlage handelt es sich um eine .erb-Datei, die im Grunde genommen eine Kopie der letzten Datei ist, in der einige Inhalte durch Platzhalter dargestellt werden. Bei der Dateierstellung mithilfe der template-Ressource werden die Vorlageninhalte in die angegebene Datei kopiert und die Platzhalter mit den zugewiesenen Werten überschrieben. Hier ist die Vorlage für example_data.json.

{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }

Die Werte <%=...%> sind die Platzhalter.

  • <%=node[...]%> stellt den Wert eines Knotenattributs dar.

    In diesem Beispiel ist der Wert "your_name" ein Platzhalter für einen Attributwert aus der Attributdatei des Rezeptbuchs.

  • <%=@...%> stellt den Wert einer Variable dar, die in der "template"-Ressource definiert ist (wird später erläutert).

So erstellen Sie die Vorlagendatei
  1. Fügen Sie ein Unterverzeichnis templates zu dem Rezeptbuch createfile und ein Unterverzeichnis default zu templates hinzu.

    Anmerkung

    Das Verzeichnis templates funktioniert auf die gleiche Weise wie das Verzeichnis files. Sie können systemspezifische Vorlagen in einem Unterverzeichnis, das z. B. wie ubuntu nach dem jeweiligen System benannt ist, speichern. Von der template-Ressource wird dann die geeignete systemspezifische Datei genutzt, sofern vorhanden. Andernfalls wird die Vorlage default verwendet.

  2. Erstellen Sie eine Datei namens example_data.json.erb und legen Sie sie in das Verzeichnis templates/default. Der Vorlagenname ist beliebig wählbar, wird aber durch die Dateinamenerweiterung .erb (einschließlich anderer Erweiterungen) gekennzeichnet.

Das folgende Rezept verwendet eine template-Ressource, um /srv/www/shared/example_data.json zu erstellen.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} end

Von der template-Ressource wird mithilfe einer Vorlage die Datei example_data.json erstellt und in /srv/www/shared installiert.

  • Der Vorlagenname /srv/www/shared/example_data.json gibt den Pfad und den Namen der installierten Datei an.

  • Das source-Attribut gibt die Vorlage an, mit der die Datei erstellt wurde.

  • Das mode-Attribut gibt den Modus der installierten Datei an.

  • Die Ressource definiert die beiden Variablen a_boolean_var und a_string_var.

    Wenn die Datei example_data.json von der Ressource erstellt wird, werden die Variablenplatzhalter in der Vorlage mit den entsprechenden Werten aus der Ressource überschrieben.

  • Mit dem only_if -Wächterattribut wird die Ressource angewiesen, die Datei nur zu erstellen, sofern ['createfile']['install_file'] auf den Wert true gesetzt ist.

So führen Sie das Rezept aus
  1. Führen Sie kitchen destroy aus, damit Sie mit einer neuen Instance beginnen können.

  2. Ersetzen Sie den Code in recipes/default.rb durch das vorherige Beispiel.

  3. Führen Sie kitchen converge aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in /srv/www/shared mit dem korrekten Inhalt vorhanden ist.

Wenn Sie fertig sind, führen Sie kitchen destroy aus und fahren damit die Instance herunter. Im nächsten Abschnitt wird ein neues Rezeptbuch verwendet.