

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 OpsWorks une instance Stacks Linux
<a name="cookbooks-101-opsworks-s3-opsworks"></a>

**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](https://repost.aws/) ou via le [AWS Support](https://aws.amazon.com/support) Premium.

Cette rubrique décrit comment utiliser le SDK pour Ruby sur OpsWorks une instance Stacks Linux pour télécharger un fichier depuis un compartiment Amazon S3. OpsWorks Stacks installe automatiquement le SDK pour Ruby sur chaque instance Linux. Toutefois, lorsque vous créez l'objet client d'un service, vous devez fournir un ensemble approprié d'informations d'identification AWS `AWS::S3.new` ou l'équivalent pour d'autres services.

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?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) (Comment puis-je vider un compartiment S3 ?) ou [How Do I Delete an S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) (Comment supprimer un compartiment S3 ?).

 [Utilisation du SDK pour Ruby sur une instance Vagrant](cookbooks-101-opsworks-s3-vagrant.md) montre comment atténuer le risque d'exposition de vos informations d'identification en stockant ces dernières dans l'objet de nœud et en référençant les attributs dans votre code de recette. Lorsque vous exécutez des recettes sur une EC2 instance Amazon, vous disposez d'une option encore meilleure : un [rôle IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

Un rôle IAM fonctionne de la même manière qu'un utilisateur IAM. Il dispose d'une stratégie attachée qui accorde des autorisations d'utilisation des différents services AWS. Cependant, vous attribuez un rôle à une EC2 instance Amazon plutôt qu'à un individu. Les applications exécutées sur cette instance peuvent ensuite acquérir les autorisations accordées par la stratégie attachée. Avec un rôle, les informations d'identification n'apparaissent jamais dans votre code, même indirectement. Cette rubrique décrit comment utiliser un rôle IAM pour exécuter la recette depuis [Utilisation du SDK pour Ruby sur une instance Vagrant](cookbooks-101-opsworks-s3-vagrant.md) une EC2 instance Amazon.

Vous pouvez exécuter cette recette avec Test Kitchen à l'aide du pilote kitchen-ec2, comme décrit dans [Exemple 9 : utilisation des EC2 instances Amazon](cookbooks-101-basics-ec2.md). Cependant, l'installation du SDK pour Ruby sur les instances EC2 Amazon est quelque peu compliquée et ne doit pas vous inquiéter OpsWorks pour Stacks. Le SDK pour Ruby est installé par défaut sur toutes les instances OpsWorks Stacks Linux. Pour des raisons de simplicité, l'exemple utilise donc une instance OpsWorks Stacks. 

La première étape consiste à configurer le rôle IAM. Cet exemple adopte l'approche la plus simple, qui consiste à utiliser le EC2 rôle Amazon créé par OpsWorks Stacks lorsque vous créez votre première pile. Il est nommé `aws-opsworks-ec2-role`. Cependant, OpsWorks Stacks n'attache pas de politique à ce rôle. Par conséquent, par défaut, il n'accorde aucune autorisation.

Vous devez associer la `AmazonS3ReadOnlyAccess` politique au `aws-opsworks-ec2-role` rôle pour accorder les autorisations appropriées. Pour plus d'informations sur la façon d'associer une politique à un rôle, consultez la section [Ajout d'autorisations d'identité IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) dans le guide de l'*utilisateur IAM*.

Vous spécifiez le rôle lorsque vous créez ou mettez à jour une pile. Configurez une pile avec une couche personnalisée, comme décrit dans [Exécution d'une recette sur une instance Linux](cookbooks-101-opsworks-opsworks-instance.md), avec un ajout. Sur la page **Ajouter une pile**, vérifiez que le **profil d'instance IAM par défaut** est défini sur **aws-opsworks-ec2** rôles. OpsWorks Stacks attribuera ensuite ce rôle à toutes les instances de la pile.

La procédure de configuration du livre de recettes est similaire à celle utilisée par [Exécution d'une recette sur une instance Linux](cookbooks-101-opsworks-opsworks-instance.md). Voici un bref résumé ; reportez-vous à cet exemple pour plus de détails.

**Pour configurer le livre de recettes**

1. Créez un répertoire nommé `s3bucket_ops` et accédez à celui-ci.

1. Créez un fichier `metadata.rb` avec le contenu suivant et enregistrez-le sur `s3bucket_ops`.

   ```
   name "s3bucket_ops"
   version "0.1.0"
   ```

1. Créez un répertoire `recipes` dans `s3bucket_ops`.

1. Créez un fichier `default.rb` avec la recette suivante et enregistrez-le dans le répertoire `recipes`.

   ```
   Chef::Log.info("******Downloading a file from Amazon S3.******")
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk'
   
       s3 = AWS::S3.new
   
       myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt']
       Dir.chdir("/tmp")
       File.open("myfile.txt", "w") do |f|
         f.syswrite(myfile.read)
         f.close
       end
     end
     action :run
   end
   ```

1. Créez une `.zip` archive `s3bucket_ops` et chargez-la dans un compartiment Amazon S3. Pour simplifier, [rendez l'archive publique](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html), puis enregistrez l'URL de l'archive pour une utilisation ultérieure. Vous pouvez également stocker vos livres de recettes dans une archive privée Amazon S3 ou dans plusieurs autres types de référentiels. Pour de plus amples informations, veuillez consulter [Référentiels de livres de recettes](workingcookbook-installingcustom-repo.md).

Cette recette est similaire celle utilisée par l'exemple précédent, avec les exceptions suivantes.
+  OpsWorks Stacks ayant déjà installé le SDK pour Ruby, `chef_gem` la ressource a été supprimée.
+ La recette ne passe aucune information d'identification à `AWS::S3.new`.

  Les informations d'identification sont automatiquement attribuées à l'application en fonction du rôle de l'instance.
+ La recette utilise `Chef::Log.info` pour ajouter un message dans le journal de Chef.

Créez une pile pour cet exemple, comme suit. Vous pouvez aussi utiliser une pile Windows existante. Il vous suffit de mettre à jour les livres de recettes, comme décrit plus tard.

**Pour créer une pile**

1. Ouvrez la [console OpsWorks Stacks](https://console.aws.amazon.com/opsworks/) et cliquez sur **Add Stack (Ajouter une pile)**.

1. Spécifiez les paramètres suivants, acceptez les valeurs par défaut pour les autres paramètres et cliquez sur **Add Stack (Ajouter une pile)**.
   + **Nom** — RubySDK
   + **Clé SSH par défaut** : une paire de EC2 clés Amazon

   Si vous devez créer une paire de EC2 clés Amazon, consultez [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Notez que la paire de clés doit appartenir à la même région AWS que l'instance. L'exemple utilise la région USA Ouest (Oregon) par défaut.

1. Cliquez sur **Add a layer (Ajouter une couche)** et [ajoutez une couche personnalisée](workinglayers-custom.md) à la pile avec les paramètres suivants.
   + **Nom** — S3Download
   + **Nom court** — s3download

   N'importe quel type de couche peut être utilisé pour les piles Linux, mais l'exemple n'a pas besoin des packages installés par les autres types de couches, c'est pourquoi une couche personnalisée constitue l'approche la plus simple.

1. [Ajoutez une instance 24/7](workinginstances-add.md) avec les paramètres par défaut de la couche et [démarrez-la](workinginstances-starting.md).

Vous pouvez désormais installer et exécuter la recette.

**Pour exécuter la recette**

1. [Modifiez la pile pour activer les livres personnalisés](workingcookbook-installingcustom-enable.md) et spécifiez les paramètres suivants.
   + **Type de référentiel** — **Http Archive**
   + **URL du référentiel : URL** de l'archive du livre de recettes que vous avez enregistrée précédemment.

   Utilisez les valeurs par défaut pour les autres paramètres, puis cliquez sur **Save (Enregistrer)** pour mettre à jour la configuration de la pile.

1. [Exécutez la commande de pile de mise à jour des livres de recettes personnalisés](workingstacks-commands.md), qui installe la version actuelle de vos livres de recettes personnalisés sur les instances de la pile. Si une version antérieure de vos livres de recettes est présente, cette commande la remplace.

1. Exécutez la recette à l'aide de la commande de pile **Execute Recipes (Exécuter les recettes)** après avoir défini **Recipes to execute (Recettes à exécuter)** sur **s3bucket\$1ops::default**. Cette commande lance une exécution de Chef, avec une liste d'exécution composée de `s3bucket_ops::default`.
**Note**  
Vous demandez généralement à OpsWorks Stacks d'[exécuter automatiquement vos recettes](workingcookbook-assigningcustom.md) en les affectant à l'événement du cycle de vie approprié. Vous pouvez exécuter ces recettes en déclenchant manuellement l'événement. Vous pouvez utiliser une commande de pile pour déclencher des événements Setup et Configure et une [commande de déploiement](workingapps-deploying.md) pour déclencher des événements Deploy et Undeploy.

Une fois que la recette a été exécutée correctement, vous pouvez la vérifier.

**Pour vérifier s3bucket\$1ops**

1. La première étape consiste à examiner le journal de Chef. Votre pile doit avoir une seule instance nommée opstest1. Sur la page **Instances**, cliquez sur **show (afficher)** dans la colonne **Log (Journal)** de l'instance pour afficher le journal de Chef. Faites défiler vers le bas et recherchez votre message de journal près de la fin.

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. [Utilisez SSH pour vous connecter à l'instance](workinginstances-ssh.md) et affichez la liste du contenu de `/tmp`.