Transmission de données aux applications - 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.

Transmission de données aux applications

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.

Il est souvent utile de transmettre des données telles que les paires clé-valeur à une application sur le serveur. Pour ce faire, utilisez JSON personnalisé pour ajouter les données à la pile. AWS OpsWorks Stacks ajoute les données à l'objet nœud de chaque instance pour chaque événement du cycle de vie.

Cependant, notez que, même si les recettes peuvent obtenir le JSON personnalisé à partir de l'objet de nœud à l'aide des attributs Chef, les applications ne le peuvent pas. Une approche pour obtenir les données JSON personnalisées d'une ou de plusieurs applications consiste à mettre en place une recette personnalisée qui extrait les données à partir de l'objet node et les écrit dans un fichier que l'application peut lire. L'exemple dans cette rubrique montre comment écrire les données dans un fichier YAML, mais vous pouvez utiliser la même approche de base pour d'autres formats, tels que JSON ou XML.

Pour passer les données clé-valeur aux instances de la pile, ajoutez le JSON personnalisé comme suit à la pile. Pour plus d'informations sur l'ajout du JSON personnalisé à une pile, consultez Utilisation du JSON personnalisé.

{ "my_app_data": { "app1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "app2": { "key1": "value1", "key2": "value2", "key3": "value3" } } }

L'exemple suppose que vous ayez deux applications dont les noms courts sont app1 et app2, chacune ayant trois valeurs de données. La recette d'accompagnement présume que vous utilisiez les noms courts des applications pour identifier les données associées ; les autres noms sont arbitraires. Pour plus d'informations sur les noms courts d'application, consultez Paramètres.

La recette de l'exemple suivant montre comment extraire les données de chaque application à partir des attributs deploy et les placer dans un fichier .yml. La recette part du principe que votre JSON personnalisé contient les données de chaque application.

node[:deploy].each do |app, deploy| file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do content YAML.dump(node[:my_app_data][app].to_hash) end end

Les attributs deploy contiennent un attribut pour chaque application, nommé d'après le nom court de l'application. Chaque attribut d'application contient un ensemble d'attributs qui représentent différentes informations sur l'application. Cet exemple utilise le répertoire de déploiement de l'application, représenté par l'attribut [:deploy][:app_short_name][:deploy_to]. Pour plus d'informations sur [:deploy], consultez Attributs deploy.

Pour chaque application de deploy, la recette effectue les opérations suivantes :

  1. Crée un fichier nommé app_data.yml dans le sous-répertoire shared/config du répertoire [:deploy_to] de l'application.

    Pour plus d'informations sur la façon dont AWS OpsWorks Stacks installe les applications, consultez. Recettes Deploy

  2. Convertit les valeurs JSON personnalisées de l'application en YAML et écrit les données mises en forme sur app_data.yml.

Pour transmettre les données à une application
  1. Ajoutez une application à la pile et notez son nom court. Pour plus d’informations, consultez Ajout d'applications.

  2. Ajoutez le JSON personnalisé avec les données de l'application aux attributs deploy, comme indiqué plus tôt. Pour plus d'informations sur l'ajout du JSON personnalisé à une pile, consultez Utilisation du JSON personnalisé.

  3. Créez un livre de recettes et ajoutez une recette avec le code basé sur l'exemple précédent, modifié en fonction des besoins pour les noms d'attributs que vous avez utilisés dans le JSON personnalisé. Pour plus d'informations sur la création de livres de recettes et de recettes, consultez Livres de recettes et recettes. Si vous avez déjà des livres personnalisés pour cette pile, vous pouvez aussi ajouter la recette à un livre de recettes existant, ou même ajouter le code à une recette Deploy existante.

  4. Installez le livre de recettes sur votre pile. Pour plus d’informations, consultez Installation de livres de recettes personnalisés.

  5. Attribuez la recette à l'événement Deploy Lifecycle de la couche du serveur d'applications. AWS OpsWorks Stacks exécutera ensuite la recette sur chaque nouvelle instance, après son démarrage. Pour plus d’informations, consultez Exécution des recettes.

  6. Déployez l'application, qui installe également les attributs de configuration et de déploiement de pile, lesquels contiennent désormais vos données.

Note

Si les fichiers de données doivent être en place avant le déploiement de l'application, vous pouvez également assigner la recette à l'événement du cycle Setup de la couche, qui se produit une fois, juste après la fin du démarrage de l'instance. Cependant, AWS OpsWorks Stacks n'aura pas encore créé les répertoires de déploiement. Votre recette doit donc créer les répertoires requis de manière explicite avant de créer le fichier de données. L'exemple suivant crée explicitement le répertoire /shared/config de l'application, puis crée un fichier de données dans ce répertoire.

node[:deploy].each do |app, deploy| directory "#{deploy[:deploy_to]}/shared/config" do owner "deploy" group "www-data" mode 0774 recursive true action :create end file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do content YAML.dump(node[:my_app_data][app].to_hash) end end

Pour charger les données, vous pouvez utiliser, par exemple, le code Sinatra suivant :

#!/usr/bin/env ruby # encoding: UTF-8 require 'sinatra' require 'yaml' get '/' do YAML.load(File.read(File.join('..', '..', 'shared', 'config', 'app_data.yml'))) End

Vous pouvez mettre à jour les valeurs des données de l'application à tout moment en modifiant le JSON personnalisé, comme suit.

Pour mettre à jour les données de l'application
  1. Modifiez le JSON personnalisé pour mettre à jour les valeurs des données.

  2. Déployez à nouveau l'application, qui indique à AWS OpsWorks Stacks d'exécuter les recettes de déploiement sur les instances de la pile. Comme les recettes utilisent les attributs extraits des attributs de configuration et de déploiement mis à jour de la pile, votre recette personnalisée met à jour les fichiers de données avec les valeurs actuelles.