

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 Windows
<a name="cookbooks-101-opsworks-s3-windows"></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.

**Note**  
Cet exemple suppose que vous avez déjà fait l'exemple [Exécution d'une recette sur une instance Windows](cookbooks-101-opsworks-opsworks-windows.md). Si tel n'est pas le cas, commencez par cet exemple. Il décrit plus particulièrement comment autoriser l'accès RDP à vos instances.  
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 ?).

Cette rubrique décrit comment utiliser [AWS SDK pour Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)l'instance OpsWorks Stacks Windows pour télécharger un fichier depuis un compartiment S3.

Si une application Ruby a besoin d'accéder à une ressource AWS, vous devez lui fournir un ensemble d'informations d'identification AWS avec les autorisations appropriées. Pour les recettes, la meilleure option pour fournir des informations d'identification AWS est d'utiliser un [rôle Gestion des identités et des accès AWS (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 est associé à une politique qui accorde des autorisations pour utiliser les différents AWS services. Toutefois, vous attribuez un rôle à une instance Amazon Elastic Compute Cloud (Amazon EC2) 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. 

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 Windows](cookbooks-101-opsworks-opsworks-windows.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 "s3download"
   version "0.1.0"
   ```

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

1. Créez un fichier `default.rb` avec la recette suivante et enregistrez-le dans le répertoire `recipes`. *windows-cookbooks*Remplacez-le par le nom du compartiment S3 que vous utiliserez pour stocker le fichier à télécharger.

   ```
   Chef::Log.info("******Downloading an object from S3******")
   
   chef_gem "aws-sdk-s3" do
     compile_time false
     action :install
   end
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk-s3'
       
       Aws.use_bundled_cert!
   
       s3_client = Aws::S3::Client.new(region:'us-west-2')
   
       s3_client.get_object(bucket: 'windows-cookbooks',
                        key: 'myfile.txt',
                        response_target: '/chef/myfile.txt')
     end
     action :run
   end
   ```

1. Créez une archive `.zip` de `s3download` et chargez le fichier dans le compartiment S3. Rendez le fichier public et enregistrez l'URL pour une utilisation ultérieure.

1. Créez un fichier texte nommé `myfile.txt` et chargez-le dans un compartiment S3. C'est le fichier qui sera téléchargé par votre recette, c'est pourquoi vous pouvez utiliser n'importe quel compartiment approprié.

La recette exécute les tâches suivantes.

1 : Installez le SDK pour Ruby v2.  
L'exemple utilise le SDK pour Ruby pour télécharger l'objet. Cependant, OpsWorks Stacks n'installe pas ce SDK sur les instances Windows. La première partie de la recette utilise donc une [https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)ressource pour gérer cette tâche. Vous utilisez cette ressource pour installer des gems qui seront utilisés par Chef, ce qui inclut les recettes.

2 : Téléchargement du fichier.  
La troisième partie de la recette utilise une [https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#ruby-block)ressource pour exécuter le code SDK for Ruby v2 à `myfile.txt` télécharger depuis un compartiment S3 `windows-cookbooks` nommé dans le répertoire `/chef` de l'instance. Remplacez `windows-cookbooks` par le nom du compartiment qui contient `myfile.txt`. 

**Note**  
Une recette est une application Ruby, ce qui vous permet de mettre le code Ruby dans le corps de la recette ; il ne doit pas être dans une ressource `ruby_block`. Toutefois, Chef exécute le code Ruby dans le corps de la recette en premier, puis chaque ressource, dans l'ordre. Dans cet exemple, si vous insérez le code de téléchargement dans le corps de la recette, il échouera car il dépend du SDK pour Ruby et `chef_gem` la ressource qui installe le SDK n'a pas encore été exécutée. Le code de la `ruby_block` ressource s'exécute lorsque la ressource s'exécute, et cela se produit une fois que la `chef_gem` ressource a installé le SDK pour Ruby.

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.

**Création d’une pile**

1. Ouvrez la [console OpsWorks Stacks](https://console.aws.amazon.com/opsworks/) et choisissez **Add Stack (Ajouter une pile)**. Spécifiez les paramètres suivants, acceptez les valeurs par défaut pour les autres paramètres et choisissez **Add Stack (Ajouter une pile)**.
   + **Nom** — S3Download
   + **Région** — Ouest des États-Unis (Oregon)

     Cet exemple fonctionne dans n'importe quelle région, mais nous vous recommandons d'utiliser US West (Oregon) pour les didacticiels.
   + **Système d'exploitation par défaut** : Microsoft Windows Server 2012 R2

1. Choisissez **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

1. [Ajoutez une instance 24/7](workinginstances-add.md) avec les paramètres par défaut de la couche S3Download 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** : **archive S3**.
   + **URL du référentiel : URL** de l'archive du livre de recettes que vous avez enregistrée précédemment.

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

1. [Exécutez la commande de pile Update Custom Cookbooks (Mettre à jour les livres de recettes personnalisées)](workingstacks-commands.md), qui installe la dernière version de votre livre de recettes personnalisé sur les instances en ligne 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 **s3download::default**. Cette commande lance une exécution de Chef, avec une liste d'exécution composée de `s3download::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 également 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 s3download**

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

   ```
   ...
   [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0]
   [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache.
   [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3******
   [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3)
   [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) 
   ...
   ```

1. [Utilisez RDP pour vous connecter à l'instance](workinginstances-rdp.md) et examinez le contenu de `c:\chef`.