Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Utilisation du SDK pour Ruby sur une instance Vagrant - 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.

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 du SDK pour Ruby sur une instance Vagrant

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

Cette rubrique décrit comment une recette exécutée sur une instance Vagrant peut utiliser le AWS SDK pour Rubypour télécharger un fichier depuis Amazon S3. Avant de commencer, vous devez disposer d'un ensemble d' AWS informations d'identification (une clé d'accès et une clé d'accès secrète) qui permettent à la recette d'accéder à Amazon S3.

Important

Nous vous déconseillons vivement d'utiliser les informations d'identification du compte racine dans cette optique. Créez plutôt un utilisateur doté d'une politique appropriée et fournissez ces informations d'identification à la recette.

Veillez à ne pas placer les informations d'identification, même les informations d'identification utilisateur IAM, dans un emplacement accessible au public, par exemple en téléchargeant un fichier contenant les informations d'identification dans un référentiel public ou Bitbucket. GitHub Vous risqueriez d'exposer vos informations d'identification et de compromettre la sécurité de votre compte.

Les recettes exécutées sur une EC2 instance EC2 Amazon peuvent utiliser une approche encore meilleure, un rôle IAM, comme décrit dansUtilisation du SDK pour Ruby sur AWS OpsWorks une instance Stacks Linux.

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 ?).

Si vous n'avez pas encore d'utilisateur approprié, vous pouvez en créer un comme suit. Pour plus d'informations, consultez Qu'est-ce qu'IAM ?

Avertissement

Les utilisateurs IAM disposent d’informations d’identification à long terme, ce qui présente un risque de sécurité. Pour atténuer ce risque, nous vous recommandons de ne fournir à ces utilisateurs que les autorisations dont ils ont besoin pour effectuer la tâche et de supprimer ces autorisations lorsqu’elles ne sont plus nécessaires.

Pour créer un utilisateur IAM
  1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à https://console.aws.amazon.com/iam/l'adresse.

  2. Dans le volet de navigation, sélectionnez Utilisateurs et, si nécessaire, choisissez Ajouter des utilisateurs pour créer un nouvel utilisateur administratif.

  3. Sur la page Définir les autorisations, choisissez Joindre directement les politiques.

  4. Tapez S3 dans le champ de recherche des politiques d'autorisation pour afficher les politiques Amazon S3.

    Choisissez Amazon S3 ReadOnlyAccess. Si vous préférez, vous pouvez définir une politique qui accorde des autorisations plus étendues, comme AmazonS3 FullAccess, mais la pratique standard consiste à n'accorder que les autorisations requises. Dans ce cas, la recette ne fera que télécharger un fichier, un accès en lecture seule est donc suffisant.

  5. Choisissez Suivant.

  6. Choisissez Créer un utilisateur

  7. Créez ensuite des clés d'accès pour votre utilisateur. Pour de plus amples informations sur la création de clés d'accès, veuillez consulter Gestion des clés d'accès pour les utilisateurs IAM dans le Guide de l'utilisateur IAM.

Vous devez ensuite fournir un fichier à télécharger. Cet exemple suppose que vous placiez un fichier nommé myfile.txt dans un compartiment S3 nouvellement créé nommé cookbook_bucket.

Pour fournir un fichier à télécharger
  1. Créez un fichier nommé myfile.txt avec le texte suivant et enregistrez-le dans un emplacement approprié sur votre ordinateur.

    This is the file that you just downloaded from Amazon S3.
  2. Sur la console Amazon S3, créez un compartiment nommé cookbook_bucket dans la région Standard et chargez-le myfile.txt dans le compartiment.

Configurez le livre de recettes comme suit.

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

  2. Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packages.

  3. Remplacez le texte dans .kitchen.yml par ce qui suit.

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-14.04 suites: - name: s3bucket provisioner: solo_rb: environment: test run_list: - recipe[s3bucket::default] attributes:
  4. Ajoutez deux répertoires à s3bucket : recipes et environments.

  5. Créez un fichier d'environnement nommé test.json dans la default_attributes section suivante, en remplaçant les secret_key valeurs access_key et par les clés correspondantes pour votre utilisateur. Enregistrez le fichier dans le dossier environments du livre de recettes.

    { "default_attributes" : { "cookbooks_101" : { "access_key": "AKIAIOSFODNN7EXAMPLE", "secret_key" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

Vous pouvez saisir vos informations d'identification de plusieurs façons pour une recette exécutée sur une instance. Le plus important est de limiter les risques d'exposition accidentelle des clés et de compromission de la sécurité de votre compte. C'est pourquoi il n'est pas recommandé d'utiliser des valeurs de clé explicites dans votre code. Dans le cas présent, nous mettons les valeurs de clé dans l'objet de nœud, ce qui permet à la recette de les référencer en utilisant la syntaxe du nœud au lieu d'exposer les valeurs littérales. Vous devez disposer de privilèges racine pour accéder à l'objet de nœud, ce qui limite les risques d'exposition des clés. Pour plus d'informations, consultez Bonnes pratiques en matière de gestion des clés d'accès AWS.

Note

Notez que l'exemple utilise les attributs imbriqués, avec cookbooks_101 comme premier élément. Cette pratique limite les risques de conflit de noms s'il y a d'autres attributs access_key ou secret_key dans l'objet de nœud.

La recette suivante télécharge myfile.text à partir du compartiment cookbook_bucket.

gem_package "aws-sdk ~> 3" do action :install end ruby_block "download-object" do block do require 'aws-sdk' s3 = Aws::S3::Client.new( :access_key_id => "#{node['cookbooks_101']['access_key']}", :secret_access_key => "#{node['cookbooks_101']['secret_key']}") myfile = s3.bucket['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.write(myfile.read) f.close end end action :run end

La première partie de la recette installe le SDK pour Ruby, qui est un package gem. La ressource gem_package installe des gems qui seront utilisées par les recettes ou par d'autres applications.

Note

Votre instance a généralement deux instances Ruby correspondant la plupart du temps à des versions différentes. La première est une instance dédiée qui est utilisée par le client Chef. La deuxième est utilisée par les applications et les recettes exécutées sur l'instance. Il est important de comprendre cette distinction lors de l'installation des packages de gems, car deux ressources permettent d'installer des gems, gem_package et chef_gem. Si des applications ou des recettes utilisent le package gem, installez-le avec gem_package ; chef_gem est uniquement destiné aux packages GEM utilisés par le client Chef.

Le reste de la recette est une ressource ruby_block qui contient le code Ruby destiné à télécharger le fichier. Vous pourriez penser que dans la mesure où une recette est une application Ruby, vous pouvez placer le code dans la recette directement. Toutefois, une exécution de Chef compile tout ce code avant l'exécution de n'importe quelle ressource. Si vous mettez l'exemple de code directement dans la recette, Ruby tente de résoudre l'instruction require 'aws-sdk' avant d'exécuter la ressource gem_package. Le SDK pour Ruby n'étant pas encore installé, la compilation échouera.

Le code d'une ressource ruby_block n'est pas compilé tant que cette ressource n'a pas été exécutée. Dans cet exemple, la ruby_block ressource est exécutée une fois qu'elle a fini d'installer le SDK pour Ruby, de sorte que le code s'exécute correctement. gem_package

Le code du ruby_block fonctionne comme suit.

  1. Crée un nouvel objet Aws::S3, qui fournit l'interface de service.

    Les clés d'accès et secrètes sont spécifiées en référençant les valeurs stockées dans l'objet de nœud.

  2. Appelle l’association bucket.objects de l’objet S3, qui retourne un objet Aws::S3::Object nommé myfile qui représente myfile.txt.

  3. Utilise Dir.chdir pour définir le répertoire de travail sur /tmp.

  4. Ouvre un fichier nommé myfile.txt, écrit le contenu de myfile dans le fichier, puis ferme le fichier.

Pour exécuter la recette
  1. Créez un fichier nommé default.rb avec l'exemple de recette et enregistrez-le dans le répertoire recipes.

  2. Exécutez kitchen converge.

  3. Exécutez kitchen login, puis connectez-vous à l'instance et exécutez ls /tmp. Vous devriez voir myfile.txt, ainsi que plusieurs répertoires et fichiers Test Kitchen.

    vagrant@s3bucket-ubuntu-1204:~$ ls /tmp install.sh kitchen myfile.txt stderr

    Vous pouvez également exécuter cat /tmp/myfile.txt afin de vérifier que le contenu du fichier est correct.

Une fois que vous avez terminé, exécutez kitchen destroy pour résilier l'instance.

ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.