

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.

# Étape 2.3 : Implémenter un livre de recettes personnalisé
<a name="gettingstarted-windows-cookbook"></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.

Même si une pile est essentiellement un conteneur d'instances, vous n'ajoutez pas directement les instances à une pile. Vous ajoutez une ou plusieurs couches, chacune d'elles représentant un groupe d'instances connexes, puis ajoutez les instances aux couches.

Une couche est essentiellement un plan que OpsWorks Stacks utilise pour créer un ensemble d' EC2instances Amazon avec la même configuration. Une instance commence par une version de base du système d'exploitation, puis la couche de l'instance effectue une grande variété de tâches sur l'instance afin d'implémenter cette empreinte :
+ Création de répertoires et de fichiers
+ Gestion des utilisateurs
+ Installation et configuration de logiciels
+ Arrêt ou démarrage de serveurs
+ Déploiement du code d'application et des fichiers associés.

Une couche exécute des tâches sur des instances en exécutant des [recettes Chef](https://docs.chef.io/recipes.html), c'est-à-dire des recettes en abrégé. Une recette est une application Ruby qui utilise le langage spécifique à un domaine (DSL) de Chef pour décrire l'état final de l'instance. Avec OpsWorks Stacks, chaque recette est généralement affectée à l'un des [événements du cycle de vie](workingcookbook-events.md) de la couche : installation, configuration, déploiement, dédéploiement et arrêt. Lorsqu'un événement du cycle de vie se produit sur une instance, OpsWorks Stacks exécute les recettes de l'événement pour effectuer les tâches appropriées. Par exemple, l'événement Setup se produit une fois le démarrage d'une instance terminé. OpsWorks Stacks exécute ensuite les recettes d'installation, qui exécutent généralement des tâches telles que l'installation et la configuration du logiciel serveur et le démarrage des services associés.

OpsWorks Stacks fournit à chaque couche un ensemble de recettes intégrées qui exécutent des tâches standard. Vous pouvez étendre les fonctionnalités d'une couche en implémentant les recettes personnalisées pour exécuter des tâches supplémentaires et en les attribuant aux événements de cycle de vie de la couche. Les piles Windows prennent en charge les [couches personnalisées](workinglayers-custom.md), qui ont un ensemble minimal de recettes n'effectuant que quelques tâches de base. Pour ajouter des fonctionnalités à vos instances Windows, vous devez implémenter des recettes personnalisées pour pouvoir installer un logiciel, déployer des applications, etc. Cette rubrique décrit comment créer une simple couche personnalisée pour prendre en charge les instances IIS.

**Topics**
+ [Rapide présentation des livres de recettes et des recettes](#gettingstarted-windows-layer-recipes)
+ [Implémenter une recette pour installer et démarrer IIS](#gettingstarted-windows-layer-recipe-iis)
+ [Activer le livre de recettes personnalisé](#gettingstarted-windows-layer-enable-cookbook)

## Rapide présentation des livres de recettes et des recettes
<a name="gettingstarted-windows-layer-recipes"></a>

Une recette définit un ou plusieurs aspects de l'état attendu d'une instance : les répertoires qu'elle doit avoir, les packages logiciels qui doivent être installés, les applications qui doivent être déployées, etc. Les recettes sont regroupées dans un *livre de recettes*, qui contient généralement une ou plus recettes connexes, plus les fichiers associés tels que les modèles pour la création des fichiers de configuration.

Ce sujet est une introduction très élémentaire aux recettes, juste destinée à vous montrer comment implémenter un livre de recettes pour prendre en charge une couche IIS personnalisée simple. Pour une introduction plus générale aux livres de recettes, consultez [Livres de recettes et recettes](workingcookbook.md). Pour une introduction détaillée du didacticiel à l'implémentation des livres de recettes, y compris certaines rubriques spécifiques à Windows, consultez [Les bases des livres de recettes](cookbooks-101.md).

Les recettes Chef sont techniquement des applications Ruby, mais la plus grande partie du code, si ce n'est la totalité, est écrit en DSL Chef. Le DSL se compose pour l'essentiel d'un ensemble de *ressources*, qui vous permettent de spécifier par déclaration un aspect de l'état des instances. Par exemple, une [`directory` ressource](https://docs.chef.io/chef/resources.html#directory) définit un répertoire à ajouter au système. L'exemple suivant définit un répertoire `C:\data` avec les droits de contrôle total qui appartient à l'utilisateur spécifié et n'hérite pas les droits du répertoire parent.

```
directory 'C:\data' do
  rights :full_control, 'WORKGROUP\username'
  inherits false
  action :create
end
```

Lorsque Chef exécute une recette, il exécute chaque ressource en transmettant les données à un *fournisseur* associé, objet Ruby qui gère les détails de la modification de l'état de l'instance. Dans ce cas, le fournisseur crée un nouveau répertoire avec la configuration spécifiée.

Le livre de recettes personnalisé de la couche IIS personnalisée doit effectuer les tâches suivantes :
+ Installer la fonctionnalité IIS et démarrer le service.

  Généralement, vous effectuez cette tâche lors de l'installation, juste après que l'instance a fini de démarrer.
+ Déployer une application sur l'instance, une simple page HTML dans cet exemple.

  Généralement, vous effectuez cette tâche lors de l'installation. Cependant, comme, en règle générale, les applications doivent être mises à jour régulièrement, vous devez également déployer les mises à jour pendant que l'instance est en ligne.

Vous pouvez n'avoir qu'une seule recette pour effectuer toutes ces tâches. Cependant, l'approche privilégiée consiste à avoir des recettes distinctes pour les tâches d'installation et de déploiement. De cette façon, vous pouvez déployer les mises à jour de l'application à tout moment sans exécuter aussi le code d'installation. La procédure suivante explique comment configurer un livre de recettes pour prendre en charge une couche IIS personnalisée. Les rubriques suivantes montrent comment implémenter les recettes.

**Mise en route**

1. Créez un répertoire nommé `iis-cookbook` sur un emplacement approprié de votre ordinateur.

1. Ajoutez un fichier `metadata.rb` avec le contenu suivant à `iis-cookbook`.

   ```
   name "iis-cookbook"
   version "0.1.0"
   ```

   Cet exemple utilise un fichier `metadata.rb` minimal. Pour plus d'informations sur l'utilisation de ce fichier, consultez [metadata.rb](https://docs.chef.io/config_rb_metadata.html).

1. Ajoutez un répertoire `recipes` à `iis-cookbook`.

   Ce répertoire, qui doit s'appeler `recipes`, contient les recettes du livre de recettes.

En général, les livres de recettes peuvent contenir une grande variété d'autres répertoires. Par exemple, si une recette utilise un modèle pour créer un fichier de configuration, le modèle se trouve généralement dans le répertoire `templates\default`. Comme le livre de recettes de cet exemple se compose entièrement de recettes, il n'a besoin d'aucun autre répertoire. En outre, cet exemple utilise un seul livre de recettes, mais vous pouvez en utiliser autant que nécessaire ; plusieurs livres de recettes sont souvent préférables pour les projets complexes. Par exemple, vous pouvez avoir des livres de recettes distincts pour les tâches d'installation et de déploiement. Pour obtenir plus d'exemples de livres de recettes, consultez [Livres de recettes et recettes](workingcookbook.md).

## Implémenter une recette pour installer et démarrer IIS
<a name="gettingstarted-windows-layer-recipe-iis"></a>

 IIS est une *fonctionnalité* Windows, un ensemble de composants système facultatifs que vous pouvez installer sur Windows Server. Vous pouvez faire en sorte qu'une recette installe IIS à l'aide de l'une des solutions suivantes :
+ En utilisant une ressource [https://docs.chef.io/chef/resources.html#powershell-script](https://docs.chef.io/chef/resources.html#powershell-script) pour exécuter l'applet de commande [https://docs.microsoft.com/en-us/powershell/module/servermanager/install-windowsfeature?view=winserver2012-ps](https://docs.microsoft.com/en-us/powershell/module/servermanager/install-windowsfeature?view=winserver2012-ps).
+ En utilisant la ressource Chef [du livre de recettes de Windows](https://github.com/opscode-cookbooks/windows) `windows_feature`.

  Le livre de recettes de `windows` contient un ensemble de ressources dont les fournisseurs utilisent [Gestion et maintenance des images de déploiement](https://technet.microsoft.com/en-us/library/dd744256%28v=ws.10%29.aspx) (DISM) pour effectuer une grande variété de tâches sur les instances Windows, y compris l'installation de fonctionnalités.

**Note**  
`powershell_script` figure parmi les ressources les plus utiles des recettes Windows. Vous pouvez l'utiliser pour effectuer diverses tâches sur une instance en exécutant un PowerShell script ou une applet de commande. Il est particulièrement utile pour les tâches qui ne sont pas prises en charge par une ressource Chef.

Cet exemple exécute un PowerShell script pour installer et démarrer le serveur Web (IIS). Le livre de recettes `windows` est décrit plus loin. Pour obtenir un exemple d'utilisation de `windows_feature` pour installer IIS, consultez [Installation d'une fonctionnalité de Windows : IIS](cookbooks-101-opsworks-install-software-feature.md).

Ajoutez une recette nommée `install.rb` avec le contenu suivant au répertoire `recipes` du live de recettes.

```
powershell_script 'Install IIS' do
  code 'Install-WindowsFeature Web-Server'
  not_if "(Get-WindowsFeature -Name Web-Server).Installed"
end

service 'w3svc' do
  action [:start, :enable]
end
```

La recette contient deux ressources.

**powershell\$1script**  
`powershell_script`exécute le PowerShell script ou l'applet de commande spécifié. L'exemple a les paramètres d'attribut suivants :  
+ `code`— Les PowerShell applets de commande à exécuter.

  Cet exemple exécute une applet de commande `Install-WindowsFeature`, laquelle installe le serveur Web (IIS). En général, comme l'attribut `code` peut avoir un nombre quelconque de lignes, vous pouvez exécuter autant d'applets de commande que nécessaire.
+ `not-if`— Un [https://docs.chef.io/chef/resources.html#guards](https://docs.chef.io/chef/resources.html#guards) de protection qui garantit que la recette installe IIS uniquement s'il n'a pas encore été installé.

  Comme vous voulez généralement que les recettes soient *idempotentes*, elles ne perdent pas de temps à exécuter la même tâche plusieurs fois.
Chaque ressource possède une action, qui spécifie l'action que le fournisseur doit prendre. Il n'y a aucune action explicite pour cet exemple. Le fournisseur exécute donc l'`:run`action par défaut, qui exécute le PowerShell script spécifié. Pour de plus amples informations, veuillez consulter [Exécution d'un PowerShell script Windows](cookbooks-101-opsworks-opsworks-powershell.md).

**web**  
Un [https://docs.chef.io/chef/resources.html#service](https://docs.chef.io/chef/resources.html#service) gère un service, le service serveur Web IIS (W3SVC) dans le cas présent. L'exemple utilise les attributs par défaut et spécifie deux actions, `:start` et `:enable`, qui démarrent et activent IIS.

**Note**  
Si vous souhaitez installer un logiciel qui utilise un programme d'installation de packages, tel que MSI, vous pouvez utiliser une ressource `windows_package`. Pour de plus amples informations, veuillez consulter [Installation d'un package](cookbooks-101-opsworks-install-software-package.md).

## Activer le livre de recettes personnalisé
<a name="gettingstarted-windows-layer-enable-cookbook"></a>

OpsWorks Stacks exécute des recettes à partir d'un cache local sur chaque instance. Pour exécuter vos recettes personnalisées, vous devez effectuer les opérations suivantes :
+ Archivez le livre de recettes dans un référentiel distant.

  OpsWorks Stacks télécharge les livres de recettes de ce référentiel vers le cache local de chaque instance.
+ Modifier la pile pour activer les livres de recettes personnalisés.

  Comme les livres de recettes personnalisés sont désactivés par défaut, vous devez activer les livres de recettes personnalisés pour la pile, ainsi que fournir l'URL du référentiel et les informations associées.

OpsWorks Stacks prend en charge les archives S3 et les référentiels Git pour les livres de recettes personnalisés ; cet exemple utilise une archive S3. Pour de plus amples informations, veuillez consulter [Référentiels de livres de recettes](workingcookbook-installingcustom-repo.md).

**Pour utiliser une archive S3**

1. Créez une archive `.zip` du répertoire `iis-cookbook`.

   OpsWorks Stacks prend également en charge les archives `.tgz` (tar compressé au format gzip) pour les piles Windows.

1. Téléchargez l'archive dans un compartiment S3 dans la région de l'ouest des États-Unis (Californie du Nord) et rendez le fichier public. Vous pouvez également utiliser des archives privées S3, mais les archives publiques sont suffisantes pour cet exemple et un peu plus simples à utiliser. 

   1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Si vous n'avez pas encore de compartiment`us-west-1`, choisissez **Create Bucket** et créez un bucket dans la région USA Ouest (Californie du Nord).

   1. Dans la liste des compartiments, choisissez le nom du compartiment sur lequel vous souhaitez charger le fichier, puis choisissez **Upload (Charger)**. 

   1. Choisissez **Add Files (Ajouter des fichiers)**.

   1. Sélectionnez le fichier d'archive à charger, puis choisissez **Open (Ouvrir)**.

   1. En bas de la boîte de dialogue **Upload - Select Files and Folders (Charger - Sélectionner les fichiers et dossiers)**, choisissez **Set Details (Définir les détails)**.

   1. En bas de la boîte de dialogue **Set Details (Définir les détails)**, choisissez **Set Permissions (Définir les autorisations)**.

   1. Dans la boîte de dialogue **Set Permissions (Définir les autorisations)**, choisissez **Make everything public (Rendre tout public)**.

   1. En bas de la boîte de dialogue **Set Permissions (Définir les autorisations)**, choisissez **Start Upload (Commencer le chargement)**. Lorsque le chargement est terminé, le fichier `iis-cookbook.zip` s'affiche dans votre compartiment.

   1. Choisissez le compartiment, puis choisissez l'onglet **Properties (Propriétés)** du compartiment. En regard de **Link (Lien)**, enregistrez l'URL du fichier d'archives en vue d'une utilisation ultérieure.

   Pour plus d'informations sur le chargement de fichiers dans un compartiment Amazon S3, consultez [Comment télécharger des fichiers et des dossiers dans un compartiment S3](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html) ? dans le *guide de l'utilisateur de la console Amazon S3*.

**Important**  
Jusque-là, la procédure pas à pas ne vous a pris que peu de temps ; le service OpsWorks Stacks lui-même est gratuit. Cependant, vous devez payer pour toutes les ressources AWS que vous utilisez, telles que le stockage Amazon S3. Dès que vous chargez l'archive, vous commencez à être facturé. Pour plus d’informations, consultez [Tarification AWS](https://aws.amazon.com/pricing/).

**Pour activer les livres de recettes personnalisés pour la pile**

1. Dans la console OpsWorks Stacks, choisissez **Stack** dans le volet de navigation, puis sélectionnez **Stack Settings** en haut à droite.

1. Dans le coin supérieur droit de la page **Settings (Paramètres)**, choisissez **Edit (Modifier)**.

1. Sur la page **Settings (Paramètres)**, définissez **Use custom Chef cookbooks (Utiliser les livres de recettes Chef personnalisés)** avec la valeur **Yes (Oui)** et entrez les informations suivantes :
   + Type de référentiel : **archive S3**.
   + URL du référentiel : URL S3 du fichier d'archive du livre de recettes que vous avez enregistré précédemment.

1. Choisissez **Save (Enregistrer)** pour mettre à jour la configuration de la pile.

OpsWorks Stacks installe votre livre de recettes personnalisé sur toutes les nouvelles instances. Notez qu' OpsWorks Stacks n'installe pas ou ne met pas à jour automatiquement les livres de recettes personnalisés sur les instances en ligne. Vous pouvez le faire manuellement, comme indiqué plus tard.