Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Exemple 8 : Gestion des services
Important
Le AWS OpsWorks Stacks service a atteint sa fin de vie le 26 mai 2024 et a été désactivé pour les nouveaux clients et les clients existants. Nous recommandons vivement aux clients de migrer leurs charges de travail vers d'autres solutions dès que possible. Si vous avez des questions sur la migration, contactez l' AWS Support équipe sur AWS Re:Post
Les packages tels que les serveurs d'application ont généralement un service associé qui doit être démarré, arrêtée, redémarré, etc. Par exemple, vous devez commencer le service Tomcat après avoir installé le package ou une fois que l'instance a terminé le démarrage, puis redémarrer le service chaque fois que vous modifiez le fichier de configuration. Cette rubrique présente les bases de la gestion d'un service sur une instance Linux, à l'aide d'un serveur d'application Tomcat à titre d'exemple. La ressource de service fonctionne de la même manière sur les instances Windows, bien qu'il existe quelques différences dans le détail. Pour de plus amples informations, veuillez consulter service
Note
L'exemple est une installation de Tomcat très minimale, juste suffisante pour montrer les bases de l'utilisation d'une ressource service
. Pour obtenir un exemple de l'implémentation des recettes afin d'obtenir un serveur Tomcat plus fonctionnel, consultez Création d'une couche serveur Tomcat personnalisée.
Rubriques
Définition et démarrage d'un service
Cette section montre les bases de la définition et du démarrage d'un service.
Mise en route
-
Dans le répertoire
opsworks_cookbooks
, créez un répertoire nommétomcat
et accédez à celui-ci. -
Ajoutez un fichier
metadata.rb
àtomcat
avec le contenu suivant.name "tomcat" version "0.1.0"
-
Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packageset supprimez CentOS de la liste
platforms
. -
Ajoutez un sous-répertoire
recipes
àtomcat
.
Vous utilisez une ressource 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
La recette exécute les tâches suivantes :
-
La ressource
execute
exécuteapt-get update
pour installer les mises à jour actuelles du système.Pour l'instance Ubuntu utilisée dans cet exemple, vous devez installer les mises à jour avant d'installer Tomcat. D'autres systèmes peuvent avoir des exigences différentes.
-
La ressource
package
installe Tomcat 7. -
La recette
tomcat::service
incluse définit le service et nous reviendrons sur ce point plus tard. -
La ressource
service
démarre le service Tomcat.Vous pouvez également utiliser cette ressource afin d'émettre d'autres commandes, telles que l'arrêt et le redémarrage du service.
L'exemple suivant montre la recette tomcat::service
.
service 'tomcat' do service_name "tomcat7" supports :restart => true, :reload => false, :status => true action :nothing end
Cette recette crée la définition du service Tomcat comme suit :
-
Le nom de la ressource,
tomcat
, est utilisé par d'autres recettes pour référencer le service.Par exemple,
default.rb
référencetomcat
pour démarrer le service. -
La ressource
service_name
spécifie le nom du service.Lorsque vous listez les services sur l'instance, le service Tomcat est nommé tomcat7.
-
supports
spécifie la façon dont Chef gère les commandesrestart
,reload
etstatus
du service.-
true
indique que Chef peut utiliser le script init ou un autre fournisseur de services pour exécuter la commande. -
false
indique que le Chef doit tenter d'exécuter la commande par d'autres moyens.
-
Notez qu'action
est définie sur :nothing
, une valeur qui indique à la ressource de ne rien faire. La ressource de service prend en charge les actions telles que start
et restart
. Toutefois, ce livre de recettes suit une pratique standard d'utilisation d'une définition de service qui ne réalise aucune action et de démarrage ou de redémarrage du service ailleurs. Chaque recette qui démarre ou redémarre un service doit d'abord le définir, ce qui signifie que l'approche la plus simple consiste à mettre la définition de service dans une recette distincte et à l'inclure dans les autres recettes en fonction des besoins.
Note
A des fins de simplicité, la recette par défaut pour cet exemple utilise une ressource service
pour démarrer le service après l'exécution de la définition de service. Une implémentation de production démarre ou redémarre généralement un service à l'aide de notifies
, comme indiqué plus tard.
Pour exécuter la recette
-
Créez un fichier
default.rb
qui contient l'exemple de recette par défaut et enregistrez-le dansrecipes
. -
Créez un fichier
service.rb
qui contient l'exemple de définition de service et enregistrez-le dansrecipes
. -
Exécutez
kitchen converge
, puis connectez-vous à l'instance et exécutez la commande suivante pour vérifier si le service est en cours d'exécution.sudo service tomcat7 status
Note
Si vous exécutiez service.rb
séparément de default.rb
, vous devrez modifier .kitchen.yml
de façon à ajouter tomcat::service
à la liste d'exécution. Toutefois, lorsque vous incluez une recette, son code est intégré dans la recette parent avant l'exécution de la recette. service.rb
fait donc globalement partie de default.rb
et n'a pas besoin d'une entrée de liste d'exécution distincte.
Utilisation de notifies pour démarrer ou redémarrer un service
En règle générale, l'implémentation de production n'utilise pas service
pour démarrer ou redémarrer un service. En revanche, elle ajoute notifies
à une ressource. Par exemple, si vous souhaitez redémarrer le service après avoir modifié un fichier de configuration, vous incluez notifies
dans la ressource template
associée. L'utilisation de notifies
a les avantages suivants par rapport à l'utilisation d'une ressource service
pour redémarrer explicitement le service.
-
L'élément
notifies
redémarre le service si le fichier de configuration associé a changé, il n'y a donc aucun risque de provoquer un redémarrage inutile du service. -
Chef redémarre le service au plus une fois à la fin de chaque exécution, quel que soit le nombre de
notifies
dans l'exécution.Par exemple, l'exécution de Chef peut inclure plusieurs ressources de modèle, chacune modifiant un fichier de configuration différent et nécessitant un redémarrage du service si le fichier a été modifié. Cependant, vous souhaitez généralement redémarrer le service une seule fois, à la fin de l'exécution de Chef. Sinon, vous pourriez tenter de redémarrer un service qui n'est pas encore entièrement opérationnel et fait partie d'un redémarrage antérieur, ce qui peut entraîner des erreurs.
Cet exemple modifie tomcat::default
de façon à inclure une ressource template
qui utilise notifies
pour redémarrer le service. Un exemple réaliste utiliserait une ressource de modèle qui crée une version personnalisée de l'un des fichiers de configuration Tomcat, mais celles-ci sont assez longues et complexes. A des fins de simplicité, l'exemple utilise uniquement le modèle de ressource de Création d'un fichier à partir d'un modèle. Il n'a rien à voir avec Tomcat, mais il offre un moyen simple de montrer comment utiliser notifies
. Pour obtenir un exemple de l'utilisation des modèles pour créer des fichiers de configuration Tomcat, consultez Recettes Setup.
Pour configurer le livre de recettes
-
Ajoutez un sous-répertoire
templates
àtomcat
et un sous-répertoiredefault
àtemplates
. -
Copiez le modèle
example_data.json.erb
du livre de recettescreatefile
dans le répertoiretemplates/default
. -
Ajoutez un sous-répertoire
attributes
àtomcat
. -
Copiez le fichier d'attribut
default.rb
du livre de recettescreatefile
dans le répertoireattributes
.
La recette suivante utilise notifies
pour redémarrer le service Tomcat.
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
L'exemple fusionne la recette de Création d'un fichier à partir d'un modèle dans la recette de la section précédente, avec deux modifications importantes :
-
La ressource
service
est toujours là, mais elle a désormais une utilité légèrement différente.L'action
:enable
active le service Tomcat au moment du démarrage. -
Le modèle de ressource inclut maintenant
notifies
, qui redémarre le service Tomcat siexample_data.json
a changé.De cette façon, le service est démarré lorsque Tomcat est installé pour la première fois et redémarré après chaque changement de configuration.
Pour exécuter la recette
-
Exécutez
kitchen destroy
pour commencer avec une instance propre. -
Remplacez le code de
default.rb
par l'exemple précédent. -
Exécutez
kitchen converge
, puis connectez-vous à l'instance et vérifiez que le service est en cours d'exécution.
Note
Si vous voulez redémarrer un service, mais que la recette n'inclut pas de ressource telle que template
qui prend en charge notifies
, vous pouvez utiliser une ressource execute
factice à la place. Par exemple
execute 'trigger tomcat service restart' do command 'bin/true' notifies :restart, resources(:service => 'tomcat') end
La ressource execute
doit avoir un attribut command
, même si vous utilisez la ressource uniquement pour exécuter notifies
. Cet exemple contourne cette exigence en exécutant /bin/true
, une commande shell qui retourne simplement un code de réussite.