Beispiel 7: Ausführen von Befehlen und Skripts - 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 7: Ausführen von Befehlen und Skripts

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.

Chef-Ressourcen können zahlreiche Aufgaben auf Instances ausführen, aber gelegentlich ist es sinnvoller, einen Shell-Befehl oder ein Skript zu verwenden. Das ist beispielsweise der Fall, wenn Sie bereits Skripts für bestimmte Aufgaben einsetzen. Dann ist es einfacher, diese weiterzuverwenden, anstatt neuen Code zu implementieren. In diesem Abschnitt erfahren Sie, wie Befehle oder Skripts auf einer Instance ausgeführt werden.

Ausführen von Befehlen

Die script-Ressource kann einen oder mehrere Befehle ausführen. Sie unterstützt die Befehlsinterpreter csh, bash, Perl, Python und Ruby, sodass sie sowohl auf Linux- als auch auf Windows-Systemen eingesetzt werden kann (sofern die entsprechenden Befehlsinterpreter installiert sind). In diesem Thema wird gezeigt, wie ein einfacher bash-Befehl auf einer Linux-Instance ausgeführt wird. Chef unterstützt zudem powershell_script und batch-Ressourcen für die Skriptausführung auf Windows. Weitere Informationen finden Sie unter Ein PowerShell Windows-Skript ausführen.

Dies sind Ihre ersten Schritte
  1. Erstellen Sie ein Verzeichnis in opsworks_cookbooks namens script und öffnen Sie es.

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

    name "script" 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. Erstellen Sie in script ein Verzeichnis namens recipes.

Sie können Befehle direkt mit der script-Ressource ausführen, aber Chef unterstützt auch eine Reihe von Ressourcenversionen, die auf bestimmte Befehlsinterpreter ausgerichtet und nach diesen benannt sind. Im folgenden Rezept wird ein einfaches bash-Skript mithilfe einer bash-Ressource ausgeführt.

bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end

Die bash-Ressource ist wie folgt konfiguriert.

  • Sie verwendet die run-Standardaktion zur Ausführung der Befehle im code-Block.

    In diesem Beispiel ist nur ein einziger Befehl (touch somefile) vorhanden, aber ein code-Block kann mehrere Befehle enthalten.

  • Das user-Attribut gibt den Benutzer an, der den Befehl ausführt.

  • Das cwd-Attribut gibt das Arbeitsverzeichnis an.

    In diesem Beispiel wird von touch eine Datei im Verzeichnis /tmp erstellt.

  • Das not_if-Wächterattribut weist die Ressource an, keine Aktion auszuführen, wenn die Datei bereits vorhanden ist.

So führen Sie das Rezept aus
  1. Erstellen Sie die Datei default.rb, die den vorherigen Beispiel-Code enthält, und speichern Sie diese in recipes.

  2. Führen Sie kitchen converge aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in /tmp vorhanden ist.

Ausführen von Skripts

Die script-Ressource ist sehr praktisch, insbesondere, wenn Sie nur einen oder zwei Befehle ausführen möchten. In vielen Fällen ist es jedoch sinnvoller, das Skript in einer Datei zu speichern und diese auszuführen. Mit der execute-Ressource wird eine angegebene ausführbare Datei, einschließlich Skriptdateien, auf Linux- oder Windows-Systemen ausgeführt. In diesem Thema wird das Rezeptbuch script aus dem vorherigen Beispiel angepasst, um mithilfe von execute ein einfaches Shell-Skript auszuführen. Sie können das Beispiel problemlos für komplexere Skripte oder andere ausführbare Dateitypen erweitern.

So richten Sie die Skriptdatei ein
  1. Fügen Sie ein Unterverzeichnis files zu script und ein Unterverzeichnis default zu files hinzu.

  2. Erstellen Sie eine Datei namens touchfile, die Folgendes enthält, und fügen Sie sie zu files/default hinzu. In diesem Beispiel wird ein gängiger bash-Interpreter genutzt, aber Sie können bei Bedarf auch einen Interpreter wählen, der für Ihre Shell-Umgebung geeignet ist.

    #!/usr/bin/env bash touch somefile

    Die Skriptdatei kann beliebig viele Befehle enthalten. In diesem Beispielskript ist aus Gründen der Übersichtlichkeit nur ein touch-Befehl enthalten.

Mit dem folgenden Rezept wird das Skript ausgeführt.

cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end

Von der Ressource cookbook_file wird die Skriptdatei in /tmp kopiert, zudem wird der Modus festgelegt, damit die Datei ausführbar ist. Die execute-Ressource führt dann die Datei wie folgt aus:

  • Das user-Attribut gibt den Benutzer des Befehls an (in diesem Beispiel root).

  • Das Attribut cwd gibt das Arbeitsverzeichnis an (in diesem Beispiel /tmp).

  • Das command-Attribut gibt das auszuführende Skript an (in diesem Beispiel touchfile), das im Arbeitsverzeichnis gespeichert ist.

So führen Sie das Rezept aus
  1. Ersetzen Sie den Code in recipes/default.rb durch das vorherige Beispiel.

  2. Führen Sie kitchen converge aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob /tmp nun die Skriptdatei, den Modus 0755 und somefile enthält.

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.