

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.

# Recettes
<a name="workingcookbook-installingcustom-components-recipes"></a>

**Important**  
Le AWS OpsWorks Stacks service a atteint sa fin de vie 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 l' AWS Support équipe sur [AWS Re:Post](https://repost.aws/) ou via le [AWS Support](https://aws.amazon.com/support) Premium.

Les recettes sont des applications Ruby qui définissent la configuration d'un système. Elles installent les packages, créent les fichiers de configuration à partir des modèles, exécutent les commandes shell, créent des fichiers et des répertoires, etc. Généralement, OpsWorks Stacks exécute des recettes automatiquement lorsqu'un [événement du cycle](workingcookbook-events.md) de vie se produit sur l'instance, mais vous pouvez également les exécuter explicitement à tout moment à l'aide de la [commande Execute Recipes stack](workingcookbook-executing.md). Pour plus d'informations, consultez [À propos des recettes](http://docs.chef.io/recipes.html).

Généralement, une recette se compose d'une série de *ressources*, chacune représentant l'état souhaité d'un aspect du système. Chaque ressource comprend un ensemble d'attributs qui définissent l'état souhaité et spécifient l'action à entreprendre. Chef associe chaque ressource à un *fournisseur* approprié qui exécute l'action. Pour plus d'informations, consultez [Référence des ressources et fournisseurs](https://docs.chef.io/resource.html).

Une ressource `package` vous permet de gérer les packages logiciels sur les instances Linux. L'exemple suivant installe le package Apache.

```
...
package 'apache2' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    package_name 'httpd'
  when 'debian','ubuntu'
    package_name 'apache2'
  end
  action :install
end
...
```

Chef utilise le fournisseur de packages approprié pour la plateforme. Les attributs de ressource se voient souvent attribuer juste une valeur, mais vous pouvez utiliser les opérations logiques Ruby pour effectuer des assignations conditionnelles. L'exemple utilise un opérateur `case`, qui utilise `node[:platform]` pour identifier le système d'exploitation de l'instance et définit l'attribut `package_name` en conséquence. Vous pouvez insérer des attributs dans une recette en utilisant la syntaxe de nœud Chef standard et Chef remplace l'attribut par la valeur associée. Vous pouvez utiliser n'importe quel attribut de l'objet nœud, pas seulement les attributs de votre livre de recettes.

Après avoir déterminé le nom du package approprié, le segment de code se termine par une action `install`, qui installe le package. D'autres actions pour cette ressource incluent `upgrade` et `remove`. Pour plus d'informations, consultez [package](https://docs.chef.io/chef/resources.html#id150).

Il est souvent utile de décomposer les tâches complexes d'installation et de configuration en une ou plusieurs sous-tâches, chacune implémentée comme une recette distincte, et que votre recette principale les exécute au moment approprié. L'exemple suivant illustre la ligne de code qui suit l'exemple précédent :

```
include_recipe 'apache2::service'
```

Pour qu'une recette exécute une recette enfant, utilisez le mot clé `include_recipe`, suivi du nom de la recette. Les recettes sont identifiées à l'aide de la syntaxe Chef `CookbookName::RecipeName` standard, où `RecipeName` omet l'extension `.rb`.

**Note**  
Une instruction `include_recipe` exécute effectivement la recette à ce stade de la recette principale. Cependant, ce qui se passe réellement est que Chef remplace chaque instruction `include_recipe` par le code de la recette spécifiée avant d'exécuter la recette principale.

Une ressource `directory` représente un répertoire tel que celui qui doit contenir les fichiers d'un package. La ressource `default.rb` suivante crée un répertoire des journaux Linux.

```
directory node[:apache][:log_dir] do
    mode 0755
    action :create
end
```

Le répertoire des journaux est défini dans l'un des fichiers d'attributs du livre de recettes. La ressource spécifie le mode du répertoire comme 0755 et utilise une action `create` pour créer le répertoire. Pour plus d'informations, consultez [directory](https://docs.chef.io/chef/resources.html#directory). Vous pouvez également utiliser cette ressource avec les instances Windows.

La ressource `execute` représente les commandes, telles que les commandes shell ou les scripts. L'exemple suivant génère des fichiers module.load.

```
execute 'generate-module-list' do
  if node[:kernel][:machine] == 'x86_64'
    libdir = 'lib64'
  else
    libdir = 'lib'
  end
  command "/usr/local/bin/apache2_module_conf_generate.pl /usr/#{libdir}/httpd/modules /etc/httpd/mods-available"
  action :run
end
```

La ressource détermine d'abord le type d'UC. `[:kernel][:machine]` est un autre des attributs automatiques que Chef génère pour représenter les différentes propriétés système, le type d'UC dans le cas présent. Ensuite, elle spécifie la commande, un script Perl et utilise une action `run` pour exécuter le script, qui génère les fichiers module.load. Pour plus d'informations, consultez [execute](https://docs.chef.io/chef/resources.html#execute).

Une `template` ressource représente un fichier, généralement un fichier de configuration, qui doit être généré à partir de l'un des fichiers modèles du livre de recettes. L'exemple suivant crée un fichier de configuration `httpd.conf` à partir du modèle `apache2.conf.erb` qui a été présenté dans [Modèles](workingcookbook-installingcustom-components-templates.md).

```
template 'apache2.conf' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    path "#{node[:apache][:dir]}/conf/httpd.conf"
  when 'debian','ubuntu'
    path "#{node[:apache][:dir]}/apache2.conf"
  end
  source 'apache2.conf.erb'
  owner 'root'
  group 'root'
  mode 0644
  notifies :restart, resources(:service => 'apache2')
end
```

La ressource détermine le nom et l'emplacement du fichier généré en fonction du système d'exploitation de l'instance. Elle spécifie ensuite `apache2.conf.erb` en tant que modèle à utiliser pour générer le fichier et définit le propriétaire du fichier, le groupe et le mode. Elle exécute l'action `notify` pour demander à la ressource `service` qui représente le serveur Apache de redémarrer le serveur. Pour plus d'informations, consultez [template](https://docs.chef.io/chef/resources.html#template).