Beispiel 3: Erstellen von Verzeichnissen - 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 3: Erstellen von Verzeichnissen

Wichtig

Der AWS OpsWorks Stacks Service 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.

Wenn Sie ein Paket auf einer Instance installieren, müssen Sie häufig einige Konfigurationsdateien erstellen und sie in den entsprechenden Verzeichnissen platzieren. Doch diese Verzeichnisse sind möglicherweise noch nicht vorhanden. Zudem müssen ggf. auch Verzeichnisse für Daten, Protokolldateien usw. erstellt werden. Beispielsweise booten Sie zuerst das Ubuntu-System, das Sie für die meisten Beispiele verwenden. Das /srv Verzeichnis hat keine Unterverzeichnisse. Wenn Sie einen Anwendungsserver installieren, benötigen Sie das Verzeichnis /srv/www/ und vermutlich auch einige Unterverzeichnisse für Datendateien, Protokolle und so weiter. Mit dem folgenden Rezept wird /srv/www/ auf einer Instance erstellt.

directory "/srv/www/" do mode 0755 owner 'root' group 'root' action :create end

Mithilfe einer directory-Ressource erstellen und konfigurieren Sie Verzeichnisse auf Linux- und Windows-Systemen, wobei einige Attribute unterschiedlich verwendet werden. Der Ressourcenname ist der Standardwert für das path-Attribut der Ressource, daher wird im Beispiel das Verzeichnis /srv/www/ mit den Eigenschaften mode, owner und group erstellt.

So führen Sie das Rezept aus
  1. Erstellen Sie ein Verzeichnis in opsworks_cookbooks namens createdir und öffnen Sie es.

  2. Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben und fügen Sie das Verzeichnis recipes zu createdir hinzu.

  3. Fügen Sie die Datei default.rb mit dem Rezeptcode zum Rezeptbuch-Unterverzeichnis recipes hinzu.

  4. Führen Sie kitchen converge aus, um das Rezept auszuführen.

  5. Führen Sie kitchen login aus und öffnen Sie /srv, um zu prüfen, ob das Unterverzeichnis www vorhanden ist.

  6. Führen Sie exit aus, um zur Workstation zurückzukehren, und lassen Sie die Instance aktiv.

Anmerkung

Um auf der Instance ein Verzeichnis ähnlich dem Stammverzeichnis zu erstellen, bilden Sie das Stammverzeichnis mit #{ENV['HOME']} ab. Beispielsweise wird wie folgt das Verzeichnis ~/shared erstellt.

directory "#{ENV['HOME']}/shared" do ... end

Angenommen, Sie möchten ein tiefer geschachteltes Verzeichnis wie /srv/www/shared erstellen. Dann modifizieren Sie das vorherige Rezept wie folgt.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' action :create end
So führen Sie das Rezept aus
  1. Ersetzen Sie den Code in default.rb durch das vorherige Rezept.

  2. Führen Sie kitchen converge im Verzeichnis createdir aus.

  3. Überprüfen Sie, ob das Verzeichnis erstellt wurde. Führen Sie dazu kitchen login aus und öffnen Sie /srv/www, um zu prüfen, ob das Unterverzeichnis shared vorhanden ist.

  4. Führen Sie kitchen destroy aus, um die Instance herunterzufahren.

Wie Sie sehen können, wurde der Befehl kitchen converge viel schneller ausgeführt. Das liegt daran, dass die Instance bereits ausgeführt wird, daher ist es nicht nötig, die Instance zu starten, Chef zu installieren usw. Test Kitchen kopiert einfach das aktualisierte Rezeptbuch auf die Instance und startet Chef.

Führen Sie nun kitchen converge noch einmal aus, damit das Rezept auf einer neuen Instance ausgeführt wird. Das Ergebnis sieht folgendermaßen aus.

Chef Client failed. 0 resources updated in 1.908125788 seconds [2014-06-20T20:54:26+00:00] ERROR: directory[/srv/www/shared] (createdir::default line 1) had an error: Chef::Exceptions::EnclosingDirectoryDoesNotExist: Parent directory /srv/www does not exist, cannot create /srv/www/shared [2014-06-20T20:54:26+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) >>>>>> Converge failed on instance <default-ubuntu-1204>. >>>>>> Please see .kitchen/logs/default-ubuntu-1204.log for more details >>>>>> ------Exception------- >>>>>> Class: Kitchen::ActionFailed >>>>>> Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json --log_level info] >>>>>> ----------------------

Was ist passiert? Das Problem ist, dass mit einer directory-Ressource standardmäßig nur ein Verzeichnis – und nicht mehrere – erstellt werden kann. Das Rezept konnte zuvor erfolgreich ausgeführt werden, weil das zuerst auf der Instance ausgeführte Rezept das Verzeichnis /srv/www bereits erstellt hatte, folglich wurde mit /srv/www/shared nur ein Unterverzeichnis erstellt.

Anmerkung

Achten Sie beim Ausführen von kitchen converge darauf, ob Sie die Rezepte auf einer neuen oder einer vorhandenen Instance ausführen. Die Ergebnisse könnten unterschiedlich ausfallen.

Um mehrere Unterverzeichnisse zu erstellen, fügen Sie zu recursive das directory-Attribut mit dem Wert true hinzu. Mit dem folgenden Rezept wird /srv/www/shared direkt auf einer neuen Instance erstellt.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end