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
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.
Themen
Installieren einer Datei mithilfe eines Rezeptbuchs
Die einfachste Möglichkeit zum Installieren einer Datei auf einer Instance bietet eine cookbook_file/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
-
Erstellen Sie ein Verzeichnis in
opsworks_cookbooksnamenscreatefileund öffnen Sie es. -
Fügen Sie eine Datei
metadata.rbzucreatefilemit dem folgenden Inhalt hinzu:name "createfile" version "0.1.0" -
Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben und entfernen Sie CentOS aus der Liste
platforms. -
Fügen Sie ein Unterverzeichnis
recipeszucreatefilehinzu.
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
-
Fügen Sie ein Unterverzeichnis
fileszucreatefileund ein Unterverzeichnisdefaultzufileshinzu. Alle Dateien, die Sie mitcookbook_fileinstallieren, müssen in einem Unterverzeichnis vonfilessein – in diesem Beispiel infiles/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 dercookbook_file-Ressource wird dann die geeignete systemspezifische Datei kopiert, sofern vorhanden. Andernfalls wird die Dateidefaultverwendet. Weitere Informationen finden Sie unter cookbook_file. -
Erstellen Sie eine Datei
example_data.jsonmit dem JSON-Objekt aus dem vorigen Beispiel und fügen Sie sie zu Verzeichnisfiles/defaulthinzu.
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
-
Führen Sie
kitchen destroyaus, damit Sie mit einer neuen Instance beginnen können. -
Erstellen Sie die Datei
default.rb, die das vorherige Rezept enthält, und speichern Sie diese inrecipes. -
Führen Sie
kitchen convergeaus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei/srv/www/sharedinexample_data.jsonvorhanden 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
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
-
Löschen Sie das Verzeichnis
createfileund dessen Inhalte aus dem Rezeptbuchfiles. -
Fügen Sie das Unterverzeichnis
attributeszucreatefilehinzu. Fügen Sie außerdem die Dateidefault.rbmit den vorherigen Attributdefinitionen zuattributeshinzu.
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
-
Fügen Sie ein Unterverzeichnis
templateszu dem Rezeptbuchcreatefileund ein Unterverzeichnisdefaultzutemplateshinzu.Anmerkung
Das Verzeichnis
templatesfunktioniert auf die gleiche Weise wie das Verzeichnisfiles. Sie können systemspezifische Vorlagen in einem Unterverzeichnis, das z. B. wieubuntunach dem jeweiligen System benannt ist, speichern. Von dertemplate-Ressource wird dann die geeignete systemspezifische Datei genutzt, sofern vorhanden. Andernfalls wird die Vorlagedefaultverwendet. -
Erstellen Sie eine Datei namens
example_data.json.erbund legen Sie sie in das Verzeichnistemplates/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.jsongibt 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_varunda_string_var.Wenn die Datei
example_data.jsonvon 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 Werttruegesetzt ist.
So führen Sie das Rezept aus
-
Führen Sie
kitchen destroyaus, damit Sie mit einer neuen Instance beginnen können. -
Ersetzen Sie den Code in
recipes/default.rbdurch das vorherige Beispiel. -
Führen Sie
kitchen convergeaus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in/srv/www/sharedmit 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.