Structure de la recette - AWS OpsWorks

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.

Structure de la recette

Important

Le AWS OpsWorks Stacks le service a pris fin le 26 mai 2024 et a été désactivé tant pour les nouveaux clients que pour 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 le AWS Support L'équipe sur AWS Re:post ou via AWS Support premium.

Un livre de recettes est principalement constitué d'un ensemble de recettes qui peuvent effectuer diverses tâches sur une instance. Pour clarifier l'implémentation des recettes, il est utile d'examiner un exemple simple. La recette de configuration de la HAProxycouche intégrée est la suivante. Concentrez-vous simplement sur la structure globale à ce stade et ne vous inquiétez pas trop des détails ; ils seront couverts dans les exemples suivants.

package 'haproxy' do action :install end if platform?('debian','ubuntu') template '/etc/default/haproxy' do source 'haproxy-default.erb' owner 'root' group 'root' mode 0644 end end include_recipe 'haproxy::service' service 'haproxy' do action [:enable, :start] end template '/etc/haproxy/haproxy.cfg' do source 'haproxy.cfg.erb' owner 'root' group 'root' mode 0644 notifies :restart, "service[haproxy]" end
Note

Pour cet exemple et pour d'autres exemples de recettes de travail et de fichiers connexes, consultez le AWS OpsWorks Empile les recettes intégrées.

L'exemple met en évidence les éléments principaux de la recette, qui sont décrits dans les sections suivantes.

Ressources

Les recettes se composent en grande partie d'un ensemble de ressources Chef. Chacun spécifie un aspect particulier de l'état final de l'instance, par exemple un package à installer ou un service à démarrer. L'exemple a quatre ressources :

  • Une package ressource, qui représente un package installé, un HAProxyserveur pour cet exemple.

  • Une service ressource, qui représente un service, le HAProxy service dans cet exemple.

  • Deux template ressources, qui représentent des fichiers à créer à partir d'un modèle spécifié, deux fichiers HAProxy de configuration pour cet exemple.

Les ressources permettent de spécifier l'état de l'instance de façon déclarative. En arrière-plan, chaque ressource a un fournisseur associé qui effectue les tâches requises, telles que l'installation des packages, la création et la configuration des répertoires, le démarrage des services, etc. Si les détails de la tâche dépendent du système d'exploitation, la ressource a plusieurs fournisseurs et utilise celui qui est approprié pour le système. Par exemple, sur un système Red Hat Linux, le fournisseur package utilise yum pour installer les packages. Sur un système Ubuntu Linux, le fournisseur package utilise apt-get.

Vous implémentez une ressource comme un bloc de code Ruby avec le format général suivant.

resource_type "resource_name" do attribute1 'value1' attribute2 'value2' ... action :action_name notifies : action 'resource' end

Les éléments sont les suivants :

Type de ressource

(Obligatoire) L'exemple inclut trois types de ressource, package, service et template.

Nom de la ressource

(Obligatoire) Le nom identifie la ressource particulière et est parfois utilisé comme valeur par défaut pour l'un des attributs. Dans l'exemple, package représente une ressource de package nommée haproxy et la première ressource template représente un fichier de configuration nommé /etc/default/haproxy.

Attributs

(Facultatif) les attributs spécifient la configuration des ressources et varient en fonction du type de ressource et de la façon dont vous souhaitez configurer la ressource.

  • Les ressources template de l'exemple définissent explicitement un ensemble d'attributs qui spécifient la source, le propriétaire, le groupe et le mode du fichier créé.

  • Les ressources package et service de l'exemple ne définissent pas explicitement les attributs.

    Le nom de la ressource est généralement la valeur par défaut pour un attribut obligatoire et il arrive que rien d'autre ne soit nécessaire. Par exemple, le nom de la ressource est la valeur par défaut pour la ressource package dont le seul attribut obligatoire est package_name.

Il existe également des attributs spécialisés nommés attributs de protection, qui spécifient lorsque le fournisseur de la ressource va intervenir. Par exemple, l'attribut only_if indique au fournisseur de ressources d'agir uniquement si une condition spécifiée est remplie. La HAProxy recette n'utilise pas d'attributs de garde, mais ils sont utilisés dans plusieurs des exemples suivants.

Actions et notifications

(Facultatif) Les actions et les notifications spécifient les tâches qui seront effectuées par le fournisseur.

  • action indique au fournisseur d'effectuer une action spécifiée, telle que l'installation ou la création.

    Chaque ressource dispose d'un ensemble d'actions qui dépendent de la ressource particulière, dont l'action par défaut. Dans l'exemple, l'action de la ressource package action de la ressource est install, qui demande au fournisseur d'installer le package. La première ressource template n'a pas d'élément action, c'est pourquoi le fournisseur prend l'action create par défaut.

  • notifies indique au fournisseur de la ressource d'effectuer une action, mais uniquement si l'état de la ressource a été modifié.

    notifies est généralement utilisé avec des ressources telles que template et file pour exécuter des tâches telles que le redémarrage d'un service après la modification d'un fichier de configuration. Les ressources n'ont pas de notifications par défaut. Si vous souhaitez une notification, la ressource doit avoir un élément notifies explicite. Dans la HAProxy recette, la deuxième template ressource demande à la service ressource haproxy de redémarrer le HAProxy service si le fichier de configuration associé a changé.

Les ressources dépendent parfois du système d'exploitation.

  • Certaines ressources peuvent être utilisées uniquement sur les systèmes Linux ou Windows.

    Par exemple, package installe les packages sur les systèmes Linux et windows_package installe les packages sur les systèmes Windows.

  • Certaines ressources peuvent être utilisées avec n'importe quel système d'exploitation, mais ont des attributs qui sont propres à un système particulier.

    Par exemple, la ressource file peut être utilisée sur les systèmes Linux ou Windows, mais possède des ensembles distincts d'attributs pour configurer des autorisations.

Pour les descriptions de ressources standard, y compris les attributs, les actions et les notifications disponibles pour chaque ressource, consultez À propos des ressources et des fournisseurs.

Contrôle de flux

Dans la mesure où les recettes sont des applications Ruby, vous pouvez utiliser les structures de contrôle Ruby pour intégrer le contrôle de flux dans une recette. Par exemple, vous pouvez utiliser une logique conditionnelle Ruby pour que la recette se comporte différemment selon les systèmes. La HAProxy recette inclut un if bloc qui utilise une template ressource pour créer un fichier de configuration, mais uniquement si la recette est exécutée sur un système Debian ou Ubuntu.

Un autre scénario courant consiste à utiliser une boucle pour exécuter une ressource plusieurs fois avec différents paramètres d'attribut. Par exemple, vous pouvez créer un ensemble de répertoires en utilisant une boucle pour exécuter une ressource directory plusieurs fois avec différents noms de répertoires.

Note

Si vous ne maîtrisez pas bien Ruby, consultez la section Juste assez de Ruby pour Chef, qui couvre ce que vous devez savoir pour la plupart des recettes.

Recettes incluses

include_recipe inclut d'autres recettes dans votre code, ce qui vous permet d'organiser os recettes par modules et de réutiliser le même code dans plusieurs recettes. Lorsque vous exécutez la recette de l'hôte, Chef remplace chaque élément include_recipe par le code de la recette spécifiée avant d'exécuter la recette de l'hôte. Vous identifiez une recette incluse à l'aide de la syntaxe standard de Chef cookbook_name::recipe_name, avec recipe_name qui omet l'extension .rb. L'exemple inclut une recette qui représente le HAProxy service. haproxy::service

Note

Si vous utilisez include_recipe dans les recettes qui exécutent Chef 11.10 et des versions ultérieures pour inclure une recette d'un autre livre de recettes, vous devez utiliser une instruction depends pour déclarer la dépendance dans le fichier metadata.rb du livre de recettes. Pour de plus amples informations, veuillez consulter Mise en œuvre des recettes : Chef 11.10.