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 8: Verwalten von Services
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
Paketen wie z. B. Anwendungsservern ist in der Regel ein Service zugeordnet, der gestartet, gestoppt, neu gestartet usw. werden muss. Beispielsweise müssen Sie den Tomcat-Service nach der Paketinstallation und nach beendetem Instance-Start starten sowie nach jeder Änderung der Konfigurationsdatei neu starten. In diesem Thema werden die Grundlagen für die Verwaltung eines Service auf einer Linux-Instance am Beispiel eines Tomcat-Anwendungsservers dargelegt. Die "service"-Ressource funktioniert auf Windows-Instances auf dieselbe Weise, allerdings gibt es ein paar kleine Unterschiede. Weitere Informationen finden Sie unter service
Anmerkung
Im Beispiel wird eine sehr minimale Tomcat-Installation ausgeführt. Sie reicht aus, um die Grundlagen für die Verwendung einer service
-Ressource zu veranschaulichen. Ein Beispiel für die Rezeptimplementierung auf einem Tomcat-Server mit mehr Funktionen finden Sie unter Erstellen eines benutzerdefinierten Tomcat-Server-Layers.
Themen
Definieren und Starten eines Service
In diesem Abschnitt werden die Grundlagen zum Definieren und Starten eines Service erläutert.
Dies sind Ihre ersten Schritte
-
Erstellen Sie ein Verzeichnis im Verzeichnis
opsworks_cookbooks
namenstomcat
und öffnen Sie es. -
Fügen Sie eine Datei
metadata.rb
zutomcat
mit dem folgenden Inhalt hinzu:name "tomcat" 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
recipes
zutomcat
hinzu.
Verwenden Sie eine service
execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :start end
Vom Rezept werden folgende Schritte ausgeführt:
-
Die
execute
-Ressource führtapt-get update
aus, um aktuelle Systemupdates zu installieren.Für die in diesem Beispiel verwendete Ubuntu-Instanz müssen Sie die Updates installieren, bevor Sie Tomcat installieren. Bei anderen Systemen können die Anforderungen abweichen.
-
Die
package
-Ressource installiert Tomcat 7. -
Das enthaltene
tomcat::service
-Rezept definiert den Service (wird später erläutert). -
Die
service
-Ressource startet den Tomcat-Service.Mit dieser Ressource können Sie auch andere Befehle ausgeben, z. B. den Service stoppen und neu starten.
Im folgenden Beispiel finden Sie das tomcat::service
-Rezept.
service 'tomcat' do service_name "tomcat7" supports :restart => true, :reload => false, :status => true action :nothing end
Mit diesem Rezept wird die Tomcat-Servicedefinition wie folgt erstellt:
-
Der Ressourcenname
tomcat
wird von anderen Rezepten als Referenz auf den Service verwendet.Beispielsweise wird
default.rb
vontomcat
für den Servicestart referenziert. -
Die
service_name
-Ressource gibt den Servicenamen an.Wenn Sie die Services auf der Instance auflisten, wird der Tomcat-Service mit dem Namen "tomcat7" angegeben.
-
supports
gibt an, wie Chef die Befehlerestart
,reload
undstatus
des Service verwaltet.-
Der Wert
true
gibt an, dass Chef das "init"-Skript oder einen anderen Serviceanbieter zum Ausführen des Befehls verwenden kann. -
false
gibt an, dass Chef versuchen muss, den Befehl anderweitig auszuführen.
-
Beachten Sie, dass action
auf :nothing
festgelegt ist. Damit wird die Ressource angewiesen, keine Aktion auszuführen. Die "service"-Ressource unterstützt Aktionen wie start
und restart
. Dieses Rezeptbuch folgt jedoch der Standardvorgehensweise und verwendet eine Servicedefinition, bei der keine Aktion erfolgt. Der Service wird anderweitig gestartet bzw. neu gestartet. Jedes Rezept, über das ein Service gestartet oder neu gestartet wird, muss diesen zunächst definieren. Die einfachste Methode ist daher, die Servicedefinition in einem separaten Rezept zu speichern und dieses bei Bedarf in andere Rezepte einzubinden.
Anmerkung
Der Einfachheit halber wird im Standardrezept dieses Beispiels eine service
-Ressource verwendet, um den Service nach Ausführung der Servicedefinition zu starten. In einer Produktionsimplementierung wird ein Service in der Regel mit notifies
gestartet oder neu gestartet (wird später erläutert).
So führen Sie das Rezept aus
-
Erstellen Sie die Datei
default.rb
, die das Standardrezeptbeispiel enthält, und speichern Sie diese inrecipes
. -
Erstellen Sie die Datei
service.rb
, die das Servicedefinitionsbeispiel enthält, und speichern Sie diese inrecipes
. -
Führen Sie
kitchen converge
aus, melden Sie sich anschließend an der Instance an und führen Sie den folgenden Befehl aus, um zu prüfen, ob der Service ausgeführt wird.sudo service tomcat7 status
Anmerkung
Falls Sie service.rb
getrennt von default.rb
ausführen möchten, müssen Sie .kitchen.yml
ändern und tomcat::service
zur Ausführungsliste hinzufügen. Wenn Sie ein Rezept einbinden, wird dessen Code vor der Rezeptausführung jedoch in das übergeordnete Rezept übernommen. Daher ist service.rb
im Grunde genommen ein Teil von default.rb
und erfordert keinen eigenen Eintrag in der Ausführungsliste.
Verwenden von "notifies" für den Start oder Neustart eines Service
In einer Produktionsimplementierung wird ein Service in der Regel nicht mit service
gestartet oder neu gestartet. Stattdessen wird notifies
zu verschiedenen Ressourcen hinzugefügt. Wenn Sie beispielsweise den Service nach einer Änderung der Konfigurationsdatei neu starten möchten, binden Sie notifies
in die zugehörige template
-Ressource ein. Die Verwendung von notifies
bietet im Vergleich zur service
-Ressource für den expliziten Neustart des Service die folgenden Vorteile.
-
Das
notifies
-Element startet den Service nur dann neu, wenn die zugehörige Konfigurationsdatei geändert wurde. Das Risiko eines unnötigen Serviceneustarts fällt damit weg. -
Chef startet den Service höchstens einmal am Ende jeder Ausführung neu, unabhängig von der
notifies
-Anzahl pro Ausführung.Beispielsweise können in der Chef-Ausführung mehrere "template"-Ressourcen enthalten sein, von denen jede eine andere Konfigurationsdatei ändert und nach der Dateiänderung einen Neustart des Service erfordert. Sie möchten aber in der Regel den Service nur einmal neu starten, und zwar am Ende der Chef-Ausführung. Andernfalls wird möglicherweise ein Service neu gestartet, der nach dem vorherigen Neustart noch nicht wieder betriebsbereit ist, und das könnte zu Fehlern führen.
In diesem Beispiel wird tomcat::default
angepasst, um eine template
-Ressource einzubinden, die den Service mithilfe von notifies
neu startet. Für ein realistisches Beispiel würden Sie eine "template"-Ressource nutzen, die eine benutzerdefinierte Version von einer Tomcat-Konfigurationsdatei erstellt, aber diese sind meist sehr lang und komplex. Der Einfachheit halber wird in diesem Beispiel die "template"-Ressource aus Erstellen einer Datei mithilfe einer Vorlage verwendet. Sie hat keinerlei Verbindung zu Tomcat, bietet aber eine einfache Möglichkeit, die Verwendung von notifies
darzustellen. Ein Beispiel für die Vorlagenverwendung beim Erstellen von Tomcat-Konfigurationsdateien finden Sie unter Einrichtungsrezepte.
So richten Sie das Rezeptbuch ein
-
Fügen Sie ein Unterverzeichnis
templates
zutomcat
und ein Unterverzeichnisdefault
zutemplates
hinzu. -
Kopieren Sie die Vorlage
example_data.json.erb
aus dem Rezeptbuchcreatefile
in das Verzeichnistemplates/default
. -
Fügen Sie ein Unterverzeichnis
attributes
zutomcat
hinzu. -
Kopieren Sie die Attributdatei
default.rb
aus dem Rezeptbuchcreatefile
in das Verzeichnisattributes
.
Im folgenden Rezept wird notifies
für den Neustart des Tomcat-Service verwendet.
execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :enable end 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']} notifies :restart, resources(:service => 'tomcat') end
Im Beispiel wird das Rezept aus Erstellen einer Datei mithilfe einer Vorlage mit dem Rezept aus dem vorherigen Abschnitt zusammengeführt. Dabei gibt es zwei wichtige Änderungen:
-
Die
service
-Ressource ist nach wie vor vorhanden, erfüllt aber nun einen anderen Zweck.Die
:enable
-Aktion aktiviert den Tomcat-Service beim Start. -
In die "template"-Ressource ist
notifies
eingebunden, sodass der Tomcat-Service bei einer Änderung der Dateiexample_data.json
neu gestartet wird.Auf diese Weise wird sichergestellt, dass der Service bei der Tomcat-Installation gestartet und nach jeder Konfigurationsänderung neu gestartet wird.
So führen Sie das Rezept aus
-
Führen Sie
kitchen destroy
aus, damit Sie mit einer neuen Instance beginnen können. -
Ersetzen Sie den Code in
default.rb
durch das vorherige Beispiel. -
Führen Sie
kitchen converge
aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob der Service ausgeführt wird.
Anmerkung
Wenn Sie einen Service neu starten möchten, aber das Rezept keine Ressource wie z. B. template
enthält, die notifies
unterstützt, können Sie stattdessen eine execute
-Dummy-Ressource nutzen. Beispiel
execute 'trigger tomcat service restart' do command 'bin/true' notifies :restart, resources(:service => 'tomcat') end
Die execute
-Ressource muss ein command
-Attribut aufweisen, auch wenn Sie die Ressource nur zur Ausführung von notifies
einsetzen. In diesem Beispiel wird diese Anforderung durch die Ausführung von /bin/true
umgangen. Dieser Shell-Befehl gibt einfach einen Erfolgscode zurück.