Exemple 6 : Création de fichiers - 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.

Exemple 6 : Création de fichiers

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.

Une fois que vous avez créé des répertoires, vous devez souvent le remplir avec les fichiers de configuration, les fichiers de données, etc. Cette rubrique présente deux façons d'installer les fichiers sur une instance.

Installation d'un fichier à partir d'un livre de recettes

La façon la plus simple d'installer un fichier sur une instance est d'utiliser une ressource cookbook_file qui copie un fichier du livre de recettes dans un emplacement spécifié sur l'instance pour les systèmes Linux et Windows. Cet exemple étend la recette de Exemple 3 : Création de répertoires pour ajouter un fichier de données à /srv/www/shared après la création du répertoire. A titre de référence, voici la recette d'origine.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
Pour configurer le livre de recettes
  1. Dans le répertoire opsworks_cookbooks, créez un répertoire nommé createfile et accédez à celui-ci.

  2. Ajoutez un fichier metadata.rb à createfile avec le contenu suivant.

    name "createfile" version "0.1.0"
  3. Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packageset supprimez CentOS de la liste platforms.

  4. Ajoutez un sous-répertoire recipes à createfile.

Le fichier à installer contient les données JSON suivantes.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }
Pour configurer le fichier de données
  1. Ajoutez un sous-répertoire files à createfile et un sous-répertoire default à files. N'importe quel fichier installé avec cookbook_file doit être dans un sous-répertoire de files, par exemple files/default dans cet exemple.

    Note

    Si vous souhaitez spécifier des fichiers différents pour différents systèmes, vous pouvez mettre chaque fichier propre au système dans un sous-dossier nommé pour le système, par exemple files/ubuntu. La ressource cookbook_file copie le fichier propre au système approprié, s'il existe, et utilise le fichier default dans le cas contraire. Pour plus d'informations, consultez cookbook_file.

  2. Créez un fichier nommé example_data.json avec le JSON de l'exemple précédent et ajoutez-le dans files/default.

La recette suivante copie example_data.json dans un emplacement spécifié.

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

Une fois que la ressource du répertoire a créé /srv/www/shared, la ressource cookbook_file copie example_data.json dans ce répertoire et définit également l'utilisateur, le groupe et le mode du fichier.

Note

La ressource cookbook_file présente une nouvelle action : create_if_missing. Vous pouvez également utiliser une action create, mais elle remplace un fichier existant. Si vous ne souhaitez pas remplacer quoi que ce soit, utilisez create_if_missing, qui installe example_data.json uniquement s'il n'existe pas déjà.

Pour exécuter la recette
  1. Exécutez kitchen destroy pour commencer avec une instance propre.

  2. Créez un fichier default.rb qui contient la recette précédente et enregistrez-le dans recipes.

  3. Exécutez kitchen converge, puis connectez-vous à l'instance pour vérifier que /srv/www/shared contient le fichier example_data.json.

Création d'un fichier à partir d'un modèle

La ressource cookbook_file est utile dans certains cas, mais elle installe simplement les fichiers qui se trouvent dans le livre de recettes. Une ressource template offre un moyen plus souple d'installer un fichier sur une instance Windows ou Linux en le créant dynamiquement à partir d'un modèle. Vous pouvez ensuite déterminer les détails du contenu du fichier lors de l'exécution et les modifier en fonction des besoins. Par exemple, vous pouvez faire en sorte qu'un fichier de configuration ait un paramètre spécifique lorsque vous démarrez l'instance, puis modifier ce paramètre plus tard lorsque vous ajoutez des instances à la pile.

Cet exemple modifie le livre de recettes createfile de façon à utiliser une ressource template pour installer une version légèrement modifiée de example_data.json.

Voici à quoi ressemblera le fichier installé.

{ "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true, "a_string" : "some string", "platform" : "ubuntu" }

Les ressources de modèle sont généralement utilisés conjointement aux fichiers d'attributs, c'est pourquoi l'exemple en utilise un pour définir les valeurs suivantes.

default['createfile']['my_name'] = 'myname' default['createfile']['your_name'] = 'yourname' default['createfile']['install_file'] = true
Pour configurer le livre de recettes
  1. Supprimez le répertoire createfile du livre de recettes files et son contenu.

  2. Ajoutez un sous-répertoire attributes à createfile et ajoutez un fichier default.rb à attributes avec les définitions d'attributs précédentes.

Un modèle est un fichier .erb qui est globalement une copie du fichier final, avec une partie du contenu représenté par les espaces réservés. Lorsque la ressource template crée le fichier, elle copie le contenu du modèle dans le fichier spécifié et remplace les espaces réservés par leurs valeurs attribuées. Voici le modèle pour example_data.json.

{ "my_name" : "<%= node['createfile']['my_name'] %>", "your_name" : "<%= node['createfile']['your_name'] %>", "a_number" : 42, "a_boolean" : <%= @a_boolean_var %>, "a_string" : "<%= @a_string_var %>", "platform" : "<%= node['platform'] %>" }

Les valeurs <%=...%> sont des espaces réservés.

  • <%=node[...]%> représente une valeur d'attribut de nœud.

    Pour cet exemple, la valeur « your_name » est un espace réservé qui représente une des valeurs d'attributs du fichier d'attribut du livre de recettes.

  • <%=@...%> représente la valeur d'une variable qui est définie dans le modèle de ressource, comme nous le verrons bientôt.

Pour créer le modèle de fichier
  1. Ajoutez un sous-répertoire templates au livre de recettes createfile et un sous-répertoire default à templates.

    Note

    Le répertoire templates fonctionne globalement comme le répertoire files. Vous pouvez mettre des modèles propres au système dans un sous-répertoire comme ubuntu qui est nommé pour le système. La ressource template utilise le modèle propre au système approprié s'il existe et elle utilise le modèle default s'il n'existe pas.

  2. Créez un fichier appelé example_data.json.erb et placez-le dans le répertoire templates/default. Le nom du modèle est arbitraire, mais vous le créez généralement en ajoutant .erb au nom du fichier, avec les extensions.

La recette suivante utilise une ressource template pour créer /srv/www/shared/example_data.json.

directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} end

La ressource template crée example_data.json à partir d'un modèle et l'installe dans /srv/www/shared.

  • Le nom du modèle, /srv/www/shared/example_data.json, spécifie le chemin et le nom du fichier installé.

  • L'attribut source spécifie le modèle utilisé pour créer le fichier.

  • L'attribut mode spécifie le mode du fichier installé.

  • La ressource définit deux variables, a_boolean_var et a_string_var.

    Lorsque la ressource crée example_data.json, elle remplace les espaces réservés des variables du modèle par les valeurs correspondantes issues de la ressource.

  • L'attribut only_if de protection demande à la ressource de créer le fichier uniquement si ['createfile']['install_file'] est défini sur true.

Pour exécuter la recette
  1. Exécutez kitchen destroy pour commencer avec une instance propre.

  2. Remplacez le code de recipes/default.rb par l'exemple précédent.

  3. Exécutez kitchen converge, puis connectez-vous à l'instance pour vérifier que le fichier se trouve dans /srv/www/shared et a le contenu correct.

Lorsque vous avez terminé, exécutez kitchen destroy pour arrêter l'instance. La section suivante utilise un nouveau livre de recettes.