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
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
Connectez-vous à la console IAM AWS Management Console et ouvrez-la à https://console.aws.amazon.com/iam/
l'adresse. -
Dans le volet de navigation, sélectionnez Utilisateurs et, si nécessaire, choisissez Ajouter des utilisateurs pour créer un nouvel utilisateur administratif.
-
Sur la page Définir les autorisations, choisissez Joindre directement les politiques.
-
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.
-
Choisissez Suivant.
-
Choisissez Créer un utilisateur
-
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
-
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.
-
Sur la console Amazon S3
, créez un compartiment nommé cookbook_bucket
dans la région Standard et chargez-lemyfile.txt
dans le compartiment.
Configurez le livre de recettes comme suit.
Pour configurer le livre de recettes
-
Créez un répertoire dans
opsworks_cookbooks
, nommés3bucket
et accédez à celui-ci. -
Initialisez et configurez Test Kitchen, comme décrit dans Exemple 1 : Installation des packages.
-
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:
-
Ajoutez deux répertoires à
s3bucket
:recipes
etenvironments
. -
Créez un fichier d'environnement nommé
test.json
dans ladefault_attributes
section suivante, en remplaçant lessecret_key
valeursaccess_key
et par les clés correspondantes pour votre utilisateur. Enregistrez le fichier dans le dossierenvironments
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
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_packagegem_package
; chef_gem
est uniquement destiné aux packages GEM utilisés par le client Chef.
Le reste de la recette est une ressource ruby_blockrequire '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.
-
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.
-
Appelle l’association
bucket.objects
de l’objetS3
, qui retourne un objetAws::S3::Object
nommémyfile
qui représentemyfile.txt
. -
Utilise
Dir.chdir
pour définir le répertoire de travail sur/tmp
. -
Ouvre un fichier nommé
myfile.txt
, écrit le contenu demyfile
dans le fichier, puis ferme le fichier.
Pour exécuter la recette
-
Créez un fichier nommé
default.rb
avec l'exemple de recette et enregistrez-le dans le répertoirerecipes
. -
Exécutez
kitchen converge
. -
Exécutez
kitchen login
, puis connectez-vous à l'instance et exécutezls /tmp
. Vous devriez voirmyfile.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.