

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
<a name="cookbooks-101-basics-directories"></a>

**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](https://repost.aws/) oder über den [AWS Premium-Support](https://aws.amazon.com/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](https://docs.chef.io/chef/resources.html#directory) 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.

1. Initialisieren und konfigurieren Sie Test Kitchen wie unter [Beispiel 1: Installieren von Paketen](cookbooks-101-basics-packages.md) beschrieben und fügen Sie das Verzeichnis `recipes` zu `createdir` hinzu.

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

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

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

1. 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. 

1. Führen Sie `kitchen converge` im Verzeichnis `createdir` aus.

1. Ü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. 

1. 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
```