Étape 3 : Créer et déployer un livre de recettes personnalisé - 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.

Étape 3 : Créer et déployer un livre de recettes personnalisé

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

En l'état, la pile n'est pas encore assez fonctionnelle ; vous devez activer votre application pour accéder au serveur Redis. L'approche la plus souple consiste à placer un fichier YAML avec les informations d'accès dans le sous-dossier config de l'application. L'application peut ensuite obtenir les informations du fichier. A l'aide de cette approche, vous pouvez modifier les informations de connexion sans réécrire et redéployer l'application. Pour cet exemple, le fichier doit être nommé redis.yml et contenir le nom d'hôte et le port du ElastiCache cluster, comme suit :

host: cache-cluster-hostname port: cache-cluster-port

Vous pouvez copier manuellement ce fichier sur vos serveurs, mais une meilleure approche consiste à implémenter une recette Chef pour générer le fichier, et à demander à AWS OpsWorks Stacks d'exécuter la recette sur chaque serveur. Les recettes Chef sont des applications Ruby spécialisées que AWS OpsWorks Stacks utilise pour effectuer des tâches sur des instances telles que l'installation de packages ou la création de fichiers de configuration. Les recettes sont rassemblées dans un livre de recettes, qui peut contenir plusieurs recettes et fichiers apparentés, tels que les modèles des fichiers de configuration. Le livre de recettes est placé dans un référentiel, tel que GitHub, et doit avoir une structure de répertoire standard. Si vous n'avez pas encore un référentiel de livres de recettes personnalisé, consultez Référentiels de livres de recettes pour plus d'informations sur la façon d'en configurer un.

Pour cet exemple, ajoutez un livre de recettes nommé redis-config à votre référentiel de livres de recettes avec le contenu suivant :

my_cookbook_repository redis-config recipes generate.rb templates default redis.yml.erb

Le dossier recipes contient une recette generate.rb, qui génère le fichier de configuration de l'application à partir de redis.yml.erb, comme suit :

node[:deploy].each do |app_name, deploy_config| # determine root folder of new app deployment app_root = "#{deploy_config[:deploy_to]}/current" # use template 'redis.yml.erb' to generate 'config/redis.yml' template "#{app_root}/config/redis.yml" do source "redis.yml.erb" cookbook "redis-config" # set mode, group and owner of generated file mode "0660" group deploy_config[:group] owner deploy_config[:user] # define variable “@redis” to be used in the ERB template variables( :redis => deploy_config[:redis] || {} ) # only generate a file if there is Redis configuration not_if do deploy_config[:redis].blank? end end end

La recette dépend des données issues de la configuration de la pile AWS OpsWorks Stacks et de l'objet JSON de déploiement, qui est installé sur chaque instance et contient des informations détaillées sur la pile et les applications déployées. Le nœud deploy de l'objet a la structure suivante :

{ ... "deploy": { "app1": { "application" : "short_name", ... } "app2": { ... } ... } }

Le nœud Deploy contient un ensemble d'objets JSON intégrés, un pour chaque application déployée et nommé d'après le nom court de l'application. Chaque objet d'application contient un ensemble d'attributs qui définissent la configuration de l'application, tels que la racine du document et le type d'application. Pour obtenir la liste des attributs deploy, consultez Attributs deploy. Les recettes peuvent utiliser la syntaxe d'attribut Chef pour représenter les valeurs JSON de déploiement et de configuration de la pile. Par exemple, [:deploy][:app1][:application] représente le nom court de l'application app1.

Pour chaque application dans [:deploy], la recette exécute le bloc de code associé, où deploy_config représente l'attribut de l'application. La recette définit d'abord app_root sur le répertoire racine de l'application, [:deploy][:app_name][:deploy_to]/current. Elle utilise ensuite une ressource de modèle Chef pour générer un fichier de configuration à partir de redis.yml.erb et le placer dans le fichier app_root/config.

Les fichiers de configuration sont généralement créés à partir de modèles, avec la plupart si ce n'est la totalité des paramètres définis par les attributs Chef. Avec les attributs, vous pouvez modifier les paramètres à l'aide d'un JSON personnalisé, comme décrit ultérieurement, au lieu de réécrire le fichier modèle. Le modèle redis.yml.erb contient les éléments suivants :

host: <%= @redis[:host] %> port: <%= @redis[:port] || 6379 %>

Les éléments <%... %> sont des espaces réservés qui représentent une valeur d'attribut.

  • <%= @redis[:host] %> représente la valeur de redis[:host], qui correspond au nom d'hôte du cluster de cache.

  • <%= @redis[:port] || 6379 %> représente la valeur de l'attribut redis[:port] ou, si cet attribut n'est pas défini, la valeur du port par défaut, 6379.

La ressource template fonctionne comme suit :

  • source et cookbook spécifient respectivement les noms du modèle et du livre de recettes.

  • mode, group et owner donnent au fichier de configuration les mêmes droits d'accès que l'application.

  • La section variables définit la variable @redis utilisée dans le modèle avec la valeur de l'attribut [:redis] de l'application.

    Les valeurs de l'attribut [:redis] sont définies en utilisant un JSON personnalisé, comme décrit plus tard ; ce n'est pas l'un des attributs standard de l'application.

  • La directive not_if garantit que la recette ne génère pas un fichier de configuration s'il en existe déjà un.

Une fois que vous avez créé le livre de recettes, vous devez le déployer sur le cache du livre de recettes de chaque instance. Cette opération n'exécute pas la recette ; elle installe simplement le nouveau livre de recettes sur les instances de la pile. Généralement, vous exécutez une recette en l'affectant à l'un des événements de cycle de vie d'une couche, comme décrit plus tard.

Pour déployer votre livre de recettes personnalisé
  1. Sur la page AWS OpsWorks Stacks Stack, cliquez sur Stack Settings, puis sur Modifier.

  2. Dans la section Gestion de la configuration, définissez Utiliser les livres de recettes Chef personnalisés sur Oui, saisissez les informations du référentiel du livre de recettes et cliquez sur Enregistrer pour mettre à jour la configuration de la pile.

  3. Sur la page Pile, cliquez sur Run Command (Exécuter la commande), sélectionnez la commande de pile Mettre à jour les livres de recettes personnalisées, puis cliquez sur Mettre à jour les livres de recettes personnalisées pour installer le nouveau livre de recettes dans les caches de livre de recettes de l'instance.

Si vous modifiez votre livre de recettes, il suffit d'exécuter à nouveau Mettre à jour les livres de recettes personnalisées pour installer la version mise à jour. Pour plus d'informations sur cette procédure, consultez Installation de livres de recettes personnalisés.