Exécution d'une recette sur une AWS OpsWorks instance Stacks Linux - 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.

Exécution d'une recette sur une AWS OpsWorks instance Stacks Linux

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 ou via le AWS Support Premium.

Test Kitchen et Vagrant fournissent un moyen simple et efficace d'implémenter des livres de recettes, mais pour vérifier que les recettes d'un livre de recettes fonctionneront correctement en production, vous devez les exécuter sur une AWS OpsWorks instance Stacks. Cette rubrique décrit comment installer un livre de recettes personnalisé sur une instance Linux AWS OpsWorks Stacks et exécuter une recette simple. Elle propose également des conseils pour corriger efficacement les bogues de la recette.

Pour une description de l'exécution des recettes sur des instances Windows, consultez Exécution d'une recette sur une instance Windows.

Création et exécution de la recette

Tout d'abord, vous devez créer une pile. Voici un bref résumé de la création d'une pile pour cet exemple. Pour plus d’informations, consultez Créer une pile.

Pour créer une pile
  1. Ouvrez la console AWS OpsWorks Stacks et cliquez sur Add Stack (Ajouter une pile).

  2. 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 — OpsTest

    • Clé SSH par défaut : une paire de clés Amazon EC2

    Si vous devez créer une paire de clés Amazon EC2, consultez la section Paires de clés Amazon EC2. 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.

  3. Cliquez sur Add a layer (Ajouter une couche) et ajoutez une couche personnalisée à la pile avec les paramètres suivants.

    • Nom — OpsTest

    • Nom abrégé — opstest

    N'importe quel type de couche peut être utilisé pour les piles Linux, mais l'exemple n'a pas besoin des packages installés par les autres types de couches, c'est pourquoi une couche personnalisée constitue l'approche la plus simple.

  4. Ajoutez une instance 24/7 avec les paramètres par défaut de la couche et démarrez-la.

Pendant le démarrage de l'instance (cela prend généralement plusieurs minutes), vous pouvez créer le livre de recettes. Cet exemple utilise une version légèrement modifiée de la recette de Logique conditionnelle, qui crée un répertoire de données dont le nom dépend de la plateforme.

Pour configurer le livre de recettes
  1. Créez un répertoire dans opsworks_cookbooks, nommé opstest et accédez à celui-ci.

  2. Créez un fichier metadata.rb avec le contenu suivant et enregistrez-le sur opstest.

    name "opstest" version "0.1.0"
  3. Créez un répertoire recipes dans opstest.

  4. Créez un fichier default.rb avec la recette suivante et enregistrez-le dans le répertoire recipes.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) directory data_dir do mode 0755 owner 'root' group 'root' recursive true action :create end

    Notez que la recette consigne un message, mais en appelant Chef::Log.info. Vous n'utilisez pas Test Kitchen pour cet exemple, la log méthode n'est donc pas très utile. Chef::Log.infoplace le message dans le journal Chef, que vous pouvez lire une fois l'exécution de Chef terminée. AWS OpsWorks Stacks fournit un moyen facile de consulter ces journaux, comme décrit plus loin.

    Note

    Les journaux de Chef contiennent généralement beaucoup d'informations courantes et peu intéressantes. Les caractères « * » qui entourent le texte du message permettent de le repérer facilement.

  5. Créez une archive .zip de opsworks_cookbooks. Pour installer votre livre de recettes sur une instance AWS OpsWorks Stacks, vous devez le stocker dans un référentiel et fournir à AWS OpsWorks Stacks les informations nécessaires pour télécharger le livre de recettes sur l'instance. Vous pouvez stocker vos livres de recettes sur plusieurs types de référentiels pris en charge. Cet exemple stocke un fichier d'archive contenant les livres de recettes dans un compartiment Amazon S3. Pour plus d'informations sur les référentiels de livre de recettes, consultez Référentiels de livres de recettes.

    Note

    Pour plus de simplicité, cet exemple archive simplement l'ensemble du répertoire opsworks_cookbooks. Cependant, cela signifie que AWS OpsWorks Stacks téléchargera tous les livres de recettes dans opsworks_cookbooks l'instance, même si vous n'utiliserez qu'un seul d'entre eux. Pour installer uniquement l'exemple de livre de recettes, créez un autre répertoire parent et transférez opstest dans ce répertoire. Créez ensuite une archive .zip du répertoire parent et utilisez-la au lieu d'opsworks_cookbooks.zip.

    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? (Comment puis-je vider un compartiment S3 ?) ou How Do I Delete an S3 Bucket? (Comment supprimer un compartiment S3 ?).

  6. Téléchargez l'archive dans un compartiment Amazon S3, rendez-la publique et enregistrez l'URL de l'archive.

Vous pouvez maintenant installer le livre de recettes et exécuter la recette.

Pour exécuter la recette
  1. Modifiez la pile pour activer les livres personnalisés et spécifiez les paramètres suivants.

    • Type de référentielS3 Archive

    • URL du référentiel : URL de l'archive du livre de recettes que vous avez enregistrée précédemment

    Utilisez les valeurs par défaut pour les autres paramètres, puis cliquez sur Save (Enregistrer) pour mettre à jour la configuration de la pile.

  2. Exécutez la commande de pile de mise à jour des livres de recettes personnalisés, qui installe la version actuelle de vos livres de recettes personnalisés sur les instances de la pile. Si une version antérieure de vos livres de recettes est présente, cette commande la remplace.

  3. Exécutez la recette à l'aide de la commande de pile Execute Recipes (Exécuter les recettes) après avoir défini Recipes to execute (Recettes à exécuter) sur opstest::default. Cette commande lance une exécution de Chef, avec une liste d'exécution composée de opstest::default.

Une fois que la recette a été exécutée correctement, vous pouvez la vérifier.

Pour vérifier opstest
  1. La première étape consiste à examiner le journal de Chef. Cliquez sur show (afficher) dans la colonne Log (Journal) de l'instance opstest1. Faites défiler vers le bas pour afficher votre message de journal proche de la fin.

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. Utilisez SSH pour vous connecter à l'instance et affichez la liste du contenu de /srv/www/.

Si vous avez suivi toutes les étapes, vous verrez /srv/www/config plutôt que le répertoire /srv/www/shared auquel vous vous attendiez. La section suivante propose des conseils pour corriger rapidement ce type de bogue.

Exécution de la recette automatiquement

La commande Execute Recipes (Exécuter les recettes) permet de tester aisément des recettes personnalisées. Elle est utilisée à cet effet dans la plupart de ces exemples. Toutefois, dans la pratique, vous exécutez généralement des recettes à des étapes standard du cycle de vie d'une instance, par exemple une fois le démarrage de l'instance terminé ou lorsque vous déployez une application. AWS OpsWorks Stacks simplifie l'exécution de recettes sur votre instance en prenant en charge un ensemble d'événements du cycle de vie pour chaque couche : installation, configuration, déploiement, dédéploiement et arrêt. Vous pouvez demander à AWS OpsWorks Stacks d'exécuter automatiquement une recette sur les instances d'une couche en affectant la recette à l'événement du cycle de vie approprié.

Vous devez généralement créer des répertoires dès qu'une instance a fini son démarrage, ce qui correspond à l'événement Setup. Voici comment exécuter l'exemple de recette lors de la configuration, à l'aide de la même pile que celle créée plus tôt dans l'exemple. Vous pouvez utiliser la même procédure pour les autres événements.

Pour exécuter automatiquement une recette lors de la configuration
  1. Choisissez Layers dans le volet de navigation, puis cliquez sur l'icône en forme de crayon à côté du lien Recipes de la OpsTest couche.

  2. Ajoutez opstest::default aux recettes Setup de la couche, cliquez sur + pour l'ajouter à la couche, puis choisissez Save (Enregistrer) pour enregistrer la configuration.

  3. Choisissez Instances, ajoutez une autre instance à la couche et démarrez-la.

    L'instance doit être nommée opstest2. Une fois le démarrage terminé, AWS OpsWorks Stacks s'exécutera. opstest::default

  4. Une fois l'instance opstest2 en ligne, vérifiez que /srv/www/shared est présent.

Note

Si vous avez attribué des recettes aux événements Setup, Configure ou Deploy, vous les exécutez aussi manuellement en utilisant une commande de pile (Setup ou Configure) ou une commande de déploiement (Deploy) pour déclencher l'événement. Notez que si vous avez plusieurs recettes attribuées à un événement, ces commandes les exécutent toutes.

Dépannage et réparation des recettes

Si vous n'obtenez pas les résultats attendus ou si l'exécution de vos recettes échoue, commencez par examiner le journal de Chef pour chercher d'où vient le problème. Il contient une description détaillée de l'exécution et inclut des messages de journal en ligne de vos recettes. Les journaux sont particulièrement utiles si votre recette a simplement échoué. Lorsque cela se produit, Chef enregistre l'erreur, y compris une trace de la pile.

Si la recette a réussi, comme dans le cas de cet exemple, le journal de Chef ne vous sera pas très utile. Vous pouvez alors trouver d'où vient le problème en observant simplement la recette, et plus particulièrement les premières lignes :

Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

CentOS est une alternative intéressante pour Amazon Linux lorsque vous testez des recettes sur Vagrant, mais vous exécutez actuellement les recettes sur une véritable instance Amazon Linux. La valeur de la plateforme pour Amazon Linux est amazon, qui n'est pas incluse dans l'appel value_for_platform, c'est pourquoi la recette crée /srv/www/config par défaut. Pour plus d'informations sur le dépannage, consultez Guide de débogage et dépannage.

Maintenant que vous avez identifié le problème, vous devez mettre à jour de la recette et vérifier le correctif. Vous pouvez revenir aux fichiers source d'origine, les mettre à jourdefault.rb, télécharger une nouvelle archive sur Amazon S3, etc. Toutefois, ce processus peut être légèrement fastidieux et long. Voici une approche nettement plus rapide qui est particulièrement utile pour les bogues de recettes simples comme celui de l'exemple : modifier la recette sur l'instance.

Pour modifier une recette sur une instance
  1. Utilisez SSH pour vous connecter à l'instance, puis exécutez sudo su pour élever vos privilèges. Vous avez besoin de privilèges racine pour accéder aux répertoires de livres de recettes.

  2. AWS OpsWorks Stacks stocke votre livre de recettes/opt/aws/opsworks/current/site-cookbooks, alors naviguez vers. /opt/aws/opsworks/current/site-cookbooks/opstest/recipes

    Note

    AWS OpsWorks Stacks stocke également une copie de vos livres de cuisine dans. /opt/aws/opsworks/current/merged-cookbooks Ne modifiez pas ce livre de recettes. Lorsque vous exécutez la recette, AWS OpsWorks Stacks copie le livre de recettes de .../site-cookbooks à.../merged-cookbooks, de sorte que toutes les modifications que vous apportez .../merged-cookbooks seront annulées.

  3. Utilisez un éditeur de texte sur l'instance pour modifier default.rb et remplacez centos par amazon. Votre recette doit maintenant avoir l'aspect suivant.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "amazon" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

Pour vérifier le correctif, exécutez la recette à l'aide de la commande de pile Execute Recipe (Exécuter la recette). L'instance doit maintenant avoir un répertoire /srv/www/shared. Si vous avez besoin d'apporter des modifications supplémentaires à la recette, vous pouvez exécuter la commande Execute Recipe (Exécuter la recette) aussi souvent que vous le souhaitez. Vous n'avez pas besoin d'arrêter et redémarrer l'instance chaque fois que vous exécutez cette commande. Une fois que la recette fonctionne correctement, n'oubliez pas de mettre à jour le code dans votre livre de recettes source.

Note

Si vous avez assigné votre recette à un événement du cycle de vie afin que AWS OpsWorks Stacks l'exécute automatiquement, vous pouvez toujours utiliser Execute Recipe pour réexécuter la recette. Vous pouvez également réexécuter la recette autant de fois que vous le souhaitez sans redémarrer l'instance en utilisant la console AWS OpsWorks Stacks pour déclencher manuellement l'événement approprié. Cependant, cette approche exécute toutes les recettes de l'événement. Voici un rappel :