

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.

# Utilisation d'un livre de recettes externe sur une instance Linux : Berkshelf
<a name="cookbooks-101-opsworks-berkshelf"></a>

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

**Note**  
Berkshelf est disponible uniquement pour les piles Linux de Chef 11.10.

Avant de commencer à implémenter un livre de recettes, consultez [Livres de recettes de la communauté Chef](https://github.com/opscode-cookbooks), qui contient les livres de recettes qui ont été créés par les membres de la communauté Chef pour un large éventail d'objectifs. Beaucoup de ces livres de recettes peuvent être utilisés avec OpsWorks Stacks sans modification. Vous pourrez donc peut-être en tirer parti pour certaines de vos tâches au lieu d'implémenter tout le code vous-même.

Pour utiliser un livre de recettes externe sur une instance, vous avez besoin de l'installer et de gérer toutes les dépendances. L'approche la plus judicieuse consiste à implémenter un livre de recettes qui prend en charge un gestionnaire de dépendances nommé Berkshelf. Berkshelf fonctionne sur les EC2 instances Amazon, y compris les instances OpsWorks Stacks, mais il est également conçu pour fonctionner avec Test Kitchen et Vagrant. Cependant, l'utilisation sur Vagrant est un peu différente de celle de OpsWorks Stacks. Cette rubrique inclut donc des exemples pour les deux plateformes. Pour plus d'informations sur l'utilisation de Berkshelf, consultez [Berkshelf](http://berkshelf.com/).

**Topics**
+ [Utilisation de Berkshelf avec Test Kitchen et Vagrant](#cookbooks-101-opsworks-berkshelf-vagrant)
+ [Utiliser Berkshelf avec Stacks OpsWorks](#opsworks-berkshelf-opsworks)

## Utilisation de Berkshelf avec Test Kitchen et Vagrant
<a name="cookbooks-101-opsworks-berkshelf-vagrant"></a>

 Cet exemple montre comment utiliser Berkshelf pour installer le livre de recettes de mise en route de la communauté et exécuter ses recettes, ce qui installe un fichier texte concis dans votre répertoire de base sur l'instance.

**Pour installer Berkshelf et initialiser un livre de recettes**

1. Sur votre poste de travail, installez le GEM Berkshelf comme suit.

   ```
   gem install berkshelf
   ```

   En fonction de votre poste de travail, cette commande peut avoir besoin de `sudo`, ou vous pouvez également utiliser un gestionnaire de l'environnement Ruby comme [RVM](https://rvm.io/). Pour vérifier que Berkshelf a été installé avec succès, exécutez `berks --version`.

1. Le livre de recettes de cette rubrique est nommé external\$1cookbook. Vous pouvez utiliser Berkshelf pour créer un livre de recettes initialisé au lieu de l'approche manuelle adoptées pour les rubriques précédentes. Pour cela, accédez au répertoire `opsworks_cookbooks` et exécutez la commande suivante.

   ```
   berks cookbook external_cookbook
   ```

   La commande crée le répertoire `external_cookbook` et plusieurs sous-répertoires Chef et Test Kitchen standard, dont `recipes` et `test`. La commande crée également des versions par défaut d'un certain nombre de fichiers standard, y compris les éléments suivants :
   + `metadata.rb`
   + Fichiers de configuration pour Vagrant, Test Kitchen et Berkshelf
   + Une recette `default.rb` vide dans le répertoire `recipes`
**Note**  
Vous n'avez pas besoin d'exécuter `kitchen init` ; la commande `berks cookbook` gère ces tâches.

1. Exécutez `kitchen converge`. Le livre de recettes nouvellement créé ne fait rien d'intéressant pour l'instant, mais il converge.

**Note**  
Vous pouvez également utiliser `berks init` pour initialiser un livre de recettes existant afin d'utiliser Berkshelf.

Pour utiliser Berkshelf afin de gérer les dépendances externes d'un livre de recettes, le répertoire racine de ce dernier doit comporter un fichier `Berksfile`, c'est-à-dire un fichier de configuration qui spécifie comment Berkshelf doit gérer les dépendances. Lorsque vous avez utilisé `berks cookbook` pour créer le livre de recettes `external_cookbook`, il a créé un fichier `Berksfile` avec le contenu suivant.

```
source "https://supermarket.chef.io"
metadata
```

Ce fichier a les déclarations suivantes :
+ `source`— L'URL d'une source de livre de recettes.

  Un Berksfile peut comporter n'importe quel nombre de déclarations `source`, chacune spécifiant une source par défaut pour les livres de recettes dépendants. Si vous ne spécifiez pas explicitement la source d'un livre de recettes, Berkshelf recherche dans les référentiels par défaut un livre de recettes portant le même nom. Le Berksfile par défaut comprend un seul attribut `source` qui spécifie le référentiel du livre de recettes de la communauté. Ce référentiel contient le livre de recettes de mise en route, c'est pourquoi vous pouvez laisser la ligne telle quelle.
+ `metadata`— Demande à Berkshelf d'inclure les dépendances du livre de recettes déclarées dans le fichier du livre de recettes. `metadata.rb`

  Vous pouvez également déclarer un livre de recettes dépendant dans le Berksfile en incluant un attribut `cookbook`, comme indiqué plus tard.

Il existe deux façons de déclarer une dépendance de livre de recettes :
+ En incluant une déclaration `cookbook` dans le Berksfile.

  C'est l'approche utilisée par OpsWorks Stacks. Par exemple, pour spécifier le livre de recettes de mise en route utilisé dans cet exemple, ajoutez `cookbook "getting-started"` dans le Berksfile. Berkshelf recherchera ensuite dans les référentiels par défaut un livre de recettes portant ce nom. Vous pouvez également utiliser `cookbook` afin de spécifier explicitement une livre de recettes source, voire une version particulière. Pour plus d'informations, consultez [Berkshelf](http://berkshelf.com/).
+ En intégrant une déclaration `metadata` dans le Berksfile et en déclarant la dépendance dans `metadata.rb`.

  Cette déclaration fait en sorte que Berkshelf intègre les dépendances de livre de recettes qui sont déclarées dans `metadata.rb`. Par exemple, pour déclarer une dépendance de mise en route, ajoutez une déclaration `depends 'getting-started'` dans le fichier `metadata.rb` du livre de recettes.

Cet exemple utilise la première approche, par souci de cohérence avec OpsWorks Stacks.

**Pour installer le livre de recettes de mise en route**

1. Modifiez le Berksfile par défaut pour remplacer la déclaration `metadata` par une déclaration `cookbook` pour `getting-started`. Le contenu doit ressembler à ce qui suit.

   ```
   source "https://supermarket.chef.io"
   
   cookbook 'getting-started'
   ```

1. Exécutez `berks install` qui télécharge le livre de recettes de mise en route à partir du référentiel du livre de recettes de la communauté et le copie fans le répertoire Berkshelf de votre station de travail, généralement `~/.berkshelf`. Ce répertoire est souvent simplement nommé *le Berkshelf*. Recherchez dans le répertoire `cookbooks` le répertoire du livre de recettes de mise en route, dont le nom devrait être similaire à `getting-started-0.4.0`.

1. Remplacez `external_cookbook::default` dans la liste d'exécution `.kitchen.yml` par `getting-started::default`. Cet exemple n'exécute aucune recette d'external\$1cookbook, il utilise simplement le livre de recettes de mise en route. Le fichier `.kitchen.yml` devrait ressembler à ce qui suit.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: default
       run_list:
         - recipe[getting-started::default]
       attributes:
   ```

1. Exécutez `kitchen converge`, puis utilisez `kitchen login` pour vous connecter à l'instance. Le répertoire de connexion doit contenir un fichier nommé `chef-getting-started.txt` avec des éléments similaires à ce qui suit :

   ```
   Welcome to Chef!
   
   This is Chef version 11.12.8.
   Running on ubuntu.
   Version 12.04.
   ```

   Test Kitchen installe les livres de recettes dans le répertoire `/tmp/kitchen/cookbooks` de l'instance. Si vous répertoriez le contenu de ce répertoire, vous verrez deux livres de recettes : external\$1cookbook et getting-started.

1. Exécutez `kitchen destroy` pour arrêter l'instance. L'exemple suivant utilise une instance OpsWorks Stacks.

## Utiliser Berkshelf avec Stacks OpsWorks
<a name="opsworks-berkshelf-opsworks"></a>

OpsWorks Stacks prend en charge en option les stacks Berkshelf for Chef 11.10. Pour utiliser Berkshelf avec votre pile, vous devez effectuer les opérations suivantes.
+ Activer Berkshelf pour la pile.

  OpsWorks Stacks gère ensuite les détails de l'installation de Berkshelf sur les instances de la pile.
+ Ajouter un Berksfile au répertoire racine du référentiel de livre de recettes.

  Le Berksfile doit contenir les déclarations `source` et `cookbook` pour tous les livres de recettes dépendants.

Lorsque OpsWorks Stacks installe votre référentiel de livres de recettes personnalisé sur une instance, il utilise Berkshelf pour installer les livres de recettes dépendants déclarés dans le Berksfile du référentiel. Pour de plus amples informations, veuillez consulter [Utilisation de Berkshelf](workingcookbook-chef11-10.md#workingcookbook-chef11-10-berkshelf).

Cet exemple montre comment utiliser Berkshelf pour installer le livre de recettes communautaire Getting-Started sur une instance Stacks. OpsWorks Il installe également une version du livre de recettes personnalisé createfile, qui crée un fichier dans un répertoire spécifié. Pour plus d'informations sur le fonctionnement de createfile, consultez [Installation d'un fichier à partir d'un livre de recettes](cookbooks-101-basics-files.md#cookbooks-101-basics-files-cookbook_file).

**Note**  
Si c'est la première fois que vous installez un livre de recettes personnalisé sur une pile OpsWorks Stacks, vous devez d'abord suivre l'[Exécution d'une recette sur une instance Linux](cookbooks-101-opsworks-opsworks-instance.md)exemple.

Commencez par créer une pile, comme résumé ci-après. Pour de plus amples informations, veuillez consulter [Créer une pile](workingstacks-creating.md).

**Création d’une pile**

1. Ouvrez la [console OpsWorks Stacks](https://console.aws.amazon.com/opsworks/) et cliquez sur **Add Stack (Ajouter une pile)**.

1. Spécifiez les paramètres suivants, acceptez les valeurs par défaut pour les autres paramètres et cliquez sur **Add Stack (Ajouter une pile)**.
   + **Nom** — BerksTest
   + **Clé SSH par défaut** : une paire de EC2 clés Amazon

   Si vous devez créer une paire de EC2 clés Amazon, consultez [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Notez que la paire de clés doit appartenir à la même région AWS que l'instance. L'exemple utilise la région USA Ouest (Oregon) par défaut.

1. Cliquez sur **Add a layer (Ajouter une couche)** et [ajoutez une couche personnalisée](workinglayers-custom.md) à la pile avec les paramètres suivants.
   + **Nom** — BerksTest
   + **Nom abrégé** — berkstest

   Vous pouvez en fait utiliser n'importe quel type de couche pour cet exemple. Toutefois, l'exemple n'a pas besoin d'un des packages qui sont installés par les autres couches, une couche personnalisée est donc l'approche la plus simple.

1. [Ajoutez une instance 24 h/24](workinginstances-add.md) et 7 j/7 à la BerksTest couche avec les paramètres par défaut, mais ne la démarrez pas encore.

Avec OpsWorks Stacks, les livres de recettes doivent se trouver dans un dépôt distant avec une structure de répertoire standard. Vous fournissez ensuite les informations de téléchargement à OpsWorks Stacks, qui télécharge automatiquement le référentiel sur chacune des instances de la pile au démarrage. Pour des raisons de simplicité, le dépôt de cet exemple est une archive publique Amazon S3, mais OpsWorks Stacks prend également en charge les archives HTTP, les référentiels Git et les référentiels Subversion. Pour de plus amples informations, veuillez consulter [Référentiels de livres de recettes](workingcookbook-installingcustom-repo.md).

Le contenu livré aux compartiments Amazon S3 peut contenir du contenu client. Pour plus d'informations sur la suppression de données sensibles, consultez [How Do I Empty an S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) (Comment puis-je vider un compartiment S3 ?) ou [How Do I Delete an S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) (Comment supprimer un compartiment S3 ?).

**Pour créer le référentiel des livres de recettes**

1. Dans votre répertoire `opsworks_cookbooks`, créez un répertoire nommé `berkstest_cookbooks`. Si vous le souhaitez, vous pouvez aussi créer ce répertoire dans tout emplacement qui vous convient puisque vous le chargerez dans un référentiel.

1. Ajoutez un fichier nommé Berksfile à `berkstest_cookbooks` avec le contenu suivant. 

   ```
   source "https://supermarket.chef.io"
   
   cookbook 'getting-started'
   ```

   Ce fichier déclare la dépendance du livre de recettes de mise en route et fait en sorte que Berkshelf le télécharge à partir du site de livres de recettes de la communauté.

1. Ajoutez un répertoire `createfile` à `berkstest_cookbooks` qui contient les éléments suivants.
   + Un fichier `metadata.rb` avec le contenu suivant.

     ```
     name "createfile"
     version "0.1.0"
     ```
   + Un répertoire `files/default` qui contient un fichier `example_data.json` avec le contenu suivant.

     ```
     {
       "my_name" : "myname",
       "your_name" : "yourname",
       "a_number" : 42,
       "a_boolean" : true
     }
     ```

     Le nom et le contenu du fichier sont arbitraires. La recette copie simplement le fichier dans l'emplacement spécifié.
   + Un répertoire `recipes` qui contient un fichier `default.rb` avec le code de recette suivant.

     ```
     directory "/srv/www/shared" do
       mode 0755
       owner 'root'
       group 'root'
       recursive true
       action :create
     end
     
     cookbook_file "/srv/www/shared/example_data.json" do
       source "example_data.json"
       mode 0644
       action :create_if_missing
     end
     ```

     Cette recette crée un répertoire `/srv/www/shared` et copie `example_data.json` dans ce répertoire à partir du répertoire `files` du livre de recettes.

1. Créez une `.zip` archive de`berkstest_cookbooks`, [téléchargez-la dans un compartiment Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html), [rendez-la publique](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) et enregistrez l'URL de l'archive.

Vous pouvez maintenant installer les livres de recettes et exécuter la recette.

**Pour installer les livre de recettes et exécuter les recettes**

1. [Modifiez la pile pour activer les livres personnalisés](workingcookbook-installingcustom-enable.md) et spécifiez les paramètres suivants.
   + **Type de référentiel** — **Http Archive**
   + **URL du référentiel : URL** de l'archive du livre de recettes que vous avez enregistrée précédemment
   + ****Gérer Berkshelf — Oui****

   Les deux premiers paramètres fournissent à OpsWorks Stacks les informations dont il a besoin pour télécharger le référentiel de livres de recettes sur vos instances. Le dernier paramètre permet la prise en charge de Berkshelf, qui télécharge le livre de recettes de mise en route dans l'instance. Acceptez les valeurs par défaut pour les autres paramètres, puis cliquez sur **Save (Enregistrer)** pour mettre à jour la configuration de la pile. 

1. Modifiez la BerksTest couche pour [ajouter les recettes suivantes à l'événement du cycle de vie de configuration de la couche](workingcookbook-assigningcustom.md).
   + `getting-started::default`
   + `createfile::default`

1. [Démarrez](workinginstances-starting.md) l’instance. L'événement Setup se produit une fois le démarrage de l'instance terminé. OpsWorks Stacks installe ensuite le référentiel de livres de recettes, utilise Berkshelf pour télécharger le livre de recettes de démarrage et exécute les recettes de configuration et de déploiement de la couche, y compris et. `getting-started::default` `createfile::default`

1. Une fois que l'instance est en ligne, [utilisez SSH pour vous connecter](workinginstances-ssh.md). Vous devez voir ce qui suit :
   + `/srv/www/shared` doit contenir `example_data.json`.
   + `/root` doit contenir `chef-getting-started.txt`.

     OpsWorks Stacks exécute les recettes en tant que root. Getting-Started installe donc le fichier dans le `/root` répertoire plutôt que dans votre répertoire personnel.