

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.

# Exemple 9 : utilisation des EC2 instances Amazon
<a name="cookbooks-101-basics-ec2"></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.

Jusqu'à présent, vous avez exécuté des instances localement dans VirtualBox. Bien que cela soit simple et rapide, vous souhaiterez éventuellement tester vos recettes sur une EC2 instance Amazon. En particulier, si vous souhaitez exécuter des recettes sur Amazon Linux, celles-ci ne sont disponibles que sur Amazon EC2. Vous pouvez utiliser un système similaire tel que CentOS pour la mise en œuvre et les tests préliminaires, mais le seul moyen de tester complètement vos recettes sur Amazon Linux est d'utiliser une instance Amazon EC2 . 

Cette rubrique explique comment exécuter des recettes sur une EC2 instance Amazon. Vous allez utiliser Test Kitchen et Vagrant plus ou moins de la même manière que dans les sections précédentes, avec deux différences : 
+ Le pilote est [https://rubygems.org/gems/kitchen-ec2](https://rubygems.org/gems/kitchen-ec2) au lieu de Vagrant.
+ Le `.kitchen.yml` fichier du livre de recettes doit être configuré avec les informations requises pour lancer l' EC2 instance Amazon.

**Note**  
Une autre approche consiste à utiliser le plug-in `vagrant-aws` de Vagrant. Pour plus d'informations, consultez [Fournisseur AWS Vagrant](https://github.com/mitchellh/vagrant-aws).

Vous aurez besoin d'informations d'identification AWS pour créer une EC2 instance Amazon. Si vous n'avez pas de compte AWS, vous pouvez en obtenir un, comme suit. 

## Inscrivez-vous pour un Compte AWS
<a name="sign-up-for-aws"></a>

Si vous n'en avez pas Compte AWS, procédez comme suit pour en créer un.

**Pour vous inscrire à un Compte AWS**

1. Ouvrez l'[https://portal.aws.amazon.com/billing/inscription.](https://portal.aws.amazon.com/billing/signup)

1. Suivez les instructions en ligne.

   Dans le cadre de la procédure d’inscription, vous recevrez un appel téléphonique ou un SMS et vous saisirez un code de vérification en utilisant le clavier numérique du téléphone.

   Lorsque vous vous inscrivez à un Compte AWS, un *Utilisateur racine d'un compte AWS*est créé. Par défaut, seul l’utilisateur racine a accès à l’ensemble des Services AWS et des ressources de ce compte. La meilleure pratique de sécurité consiste à attribuer un accès administratif à un utilisateur, et à utiliser uniquement l’utilisateur racine pour effectuer les [tâches nécessitant un accès utilisateur racine](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS vous envoie un e-mail de confirmation une fois le processus d'inscription terminé. À tout moment, vous pouvez consulter l'activité actuelle de votre compte et le gérer en accédant à [https://aws.amazon.com/](https://aws.amazon.com/)et en choisissant **Mon compte**.

## Création d’un utilisateur doté d’un accès administratif
<a name="create-an-admin"></a>

Après vous être inscrit à un Compte AWS, sécurisez Utilisateur racine d'un compte AWS AWS IAM Identity Center, activez et créez un utilisateur administratif afin de ne pas utiliser l'utilisateur root pour les tâches quotidiennes.

**Sécurisez votre Utilisateur racine d'un compte AWS**

1.  Connectez-vous en [AWS Management Console](https://console.aws.amazon.com/)tant que propriétaire du compte en choisissant **Utilisateur root** et en saisissant votre adresse Compte AWS e-mail. Sur la page suivante, saisissez votre mot de passe.

   Pour obtenir de l’aide pour vous connecter en utilisant l’utilisateur racine, consultez [Connexion en tant qu’utilisateur racine](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) dans le *Guide de l’utilisateur Connexion à AWS *.

1. Activez l’authentification multifactorielle (MFA) pour votre utilisateur racine.

   Pour obtenir des instructions, voir [Activer un périphérique MFA virtuel pour votre utilisateur Compte AWS root (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) dans le guide de l'utilisateur *IAM*.

**Création d’un utilisateur doté d’un accès administratif**

1. Activez IAM Identity Center.

   Pour obtenir des instructions, consultez [Activation d’ AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html) dans le *Guide de l’utilisateur AWS IAM Identity Center *.

1. Dans IAM Identity Center, octroyez un accès administratif à un utilisateur.

   Pour un didacticiel sur l'utilisation du Répertoire IAM Identity Center comme source d'identité, voir [Configurer l'accès utilisateur par défaut Répertoire IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html) dans le *Guide de AWS IAM Identity Center l'utilisateur*.

**Connexion en tant qu’utilisateur doté d’un accès administratif**
+ Pour vous connecter avec votre utilisateur IAM Identity Center, utilisez l’URL de connexion qui a été envoyée à votre adresse e-mail lorsque vous avez créé l’utilisateur IAM Identity Center.

  Pour obtenir de l'aide pour vous connecter en utilisant un utilisateur d'IAM Identity Center, consultez la section [Connexion au portail AWS d'accès](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) dans le *guide de l'Connexion à AWS utilisateur*.

**Attribution d’un accès à d’autres utilisateurs**

1. Dans IAM Identity Center, créez un ensemble d’autorisations qui respecte la bonne pratique consistant à appliquer les autorisations de moindre privilège.

   Pour obtenir des instructions, consultez [Création d’un ensemble d’autorisations](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html) dans le *Guide de l’utilisateur AWS IAM Identity Center *.

1. Attribuez des utilisateurs à un groupe, puis attribuez un accès par authentification unique au groupe.

   Pour obtenir des instructions, consultez [Ajout de groupes](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) dans le *Guide de l’utilisateur AWS IAM Identity Center *.

Vous devez [créer un utilisateur IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) autorisé à accéder à Amazon EC2 et enregistrer les clés d'accès et secrètes de l'utilisateur dans un emplacement sécurisé sur votre poste de travail. Test Kitchen utilisera ces informations d'identification pour créer l'instance. Le meilleur moyen de fournir des informations d'identification pour Test Kitchen est d'affecter les clés aux variables d'environnement suivantes sur votre poste de travail.

**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.
+ AWS\$1ACCESS\$1KEY — la clé d'accès de votre utilisateur, qui AKIAIOSFODNN7EXAMPLE ressemblera à
+ AWS\$1SECRET\$1KEY — la clé secrète de votre utilisateur, qui wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY ressemblera à

Cette approche réduit les risques de compromission accidentelle de votre compte, par exemple, en chargeant un projet qui contient vos informations d'identification dans un référentiel public.

**Pour configurer le livre de recettes**

1. Pour utiliser le pilote `kitchen-ec2`, le package `ruby-dev` doit être installé sur votre système. L'exemple de commande suivant montre comment utiliser `aptitude` pour installer le package sur un système Ubuntu. 

   ```
   sudo aptitude install ruby1.9.1-dev 
   ```

1. Le pilote `kitchen-ec2` est un GEM que vous pouvez installer comme suit :

   ```
   gem install kitchen-ec2
   ```

   En fonction de votre poste de travail, cette commande peut avoir besoin de `sudo`, ou vous pouvez également utiliser un gestionnaire de l'environnement Ruby comme [RVM](https://rvm.io/). Cette procédure a été testée avec la version 0.8.0 du pilote `kitchen-ec2` pilote, mais il y a des versions plus récentes. Pour installer une [version spécifique](https://rubygems.org/gems/kitchen-ec2/versions), exécutez `gem install kitchen-ec2 -v <version number>`.

1. Vous devez spécifier une paire de clés Amazon EC2 SSH que Test Kitchen peut utiliser pour se connecter à l'instance. Si vous ne possédez pas de paire de EC2 clés Amazon, consultez [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) pour savoir comment en créer une. Notez que la paire de clés doit appartenir à la même région AWS que l'instance. L'exemple utilise l'ouest des États-Unis (Californie du Nord).

   Une fois que vous avez sélectionné une paire de clés, créez un sous-répertoire d'`opsworks_cookbooks` nommé `ec2_keys` et copiez la clé privée de la paire de clés (`.pem`) dans ce sous-répertoire. Notez que le fait de placer la clé privée dans `ec2_keys` permet uniquement de simplifier légèrement le code, mais que cette clé peut se trouver n'importe où sur votre système.

1. Créez un sous-répertoire d'`opsworks_cookbooks`, nommé `createdir-ec2` et accédez à celui-ci.

1. Ajoutez un fichier `metadata.rb` à `createdir-ec2` avec le contenu suivant.

   ```
   name "createdir-ec2"
   version "0.1.0"
   ```

1. Initialisez Test Kitchen, comme décrit dans [Exemple 1 : Installation des packages](cookbooks-101-basics-packages.md). La section suivante décrit la procédure de configuration`.kitchen.yml`, ce qui est nettement plus compliqué pour les EC2 instances Amazon.

1. Ajoutez un sous-répertoire `recipes` à `createdir-ec2`.

## Configuration de .kitchen.yml pour Amazon EC2
<a name="w2ab1c14c71b9c15c17c31c37"></a>

Vous configurez `.kitchen.yml` avec les informations dont le `kitchen-ec2` pilote a besoin pour lancer une EC2 instance Amazon correctement configurée. Voici un exemple de `.kitchen.yml` fichier pour une instance Amazon Linux dans la région de l'ouest des États-Unis (Californie du Nord).

```
driver:
  name: ec2
  aws_ssh_key_id: US-East1
  region: us-west-1
  availability_zone: us-west-1c
  require_chef_omnibus: true
  security_group_ids: sg........
  subnet_id: subnet-.........
  associate_public_ip: true
  interface: dns

provisioner:
  name: chef_solo

platforms:
  -name: amazon
  driver:
    image_id: ami-xxxxxxxx
  transport:
    username: ec2-user
    ssh_key: ../ec2_keys/US-East1.pem

suites:
  - name: default
    run_list:
      - recipe[createdir-ec2::default]
    attributes:
```

Vous pouvez utiliser les paramètres par défaut pour les sections `provisioner` et `suites`, mais vous devez modifier les paramètres par défaut `driver` et `platforms`. Cet exemple utilise une liste minimale de paramètres et accepte les valeurs par défaut pour le reste. Pour une liste complète des `kitchen-ec2` paramètres, consultez [Kitchen : :Ec2 : A Test Kitchen Driver for Amazon](https://github.com/test-kitchen/kitchen-ec2). EC2

L'exemple définit les attributs `driver` suivants. Il part du principe que vous avez attribué des clés secrètes et d'accès de l'utilisateur aux variables d'environnement standard, comme indiqué plus tôt. Le pilote utilise ces clés par défaut. Sinon, vous devez spécifier explicitement les clés en ajoutant `aws_access_key_id` et `aws_secret_access_key` aux attributs `driver`, définis sur les valeurs clés appropriées.

**name**  
(Obligatoire) Cet attribut doit être défini sur `ec2`.

**aws\$1ssh\$1key\$1id**  
(Obligatoire) Le nom de la paire de clés Amazon EC2 SSH, nommé `US-East1` dans cet exemple. 

**transport.ssh\$1key**  
(Obligatoire) Le fichier de clé privée (`.pem`) pour la clé que vous avez spécifiée pour `aws_ssh_key_id`. Pour cet exemple, le fichier est nommé `US-East1.pem` et se trouve dans le répertoire `../opsworks/ec2_keys`.

**region**  
(Obligatoire) La région AWS de l'instance. L'exemple utilise l'ouest des États-Unis (Californie du Nord), représenté par`us-west-1`).

**availability\$1zone**  
(Facultatif) La zone de disponibilité de l'instance. Si vous omettez ce paramètre, Test Kitchen utilise une zone de disponibilité par défaut pour la région spécifiée, à savoir l'ouest `us-west-1b` des États-Unis (Californie du Nord). Toutefois, il est possible que la zone par défaut ne soit pas disponible pour votre compte. Dans ce cas, vous devez spécifier explicitement une zone de disponibilité. Il se trouve que le compte utilisé pour préparer les exemples ne prend pas en charge `us-west-1b` et l'exemple spécifie explicitement `us-west-1c`.

**require\$1chef\$1omnibus**  
Lorsqu'il est défini sur `true`, ce paramètre veille à ce que le programme d'installation général soit utilisé pour installer `chef-client` sur toutes les instances de la plateforme.

**security\$1group\$1ids**  
(Facultatif) Liste des groupes de sécurité IDs à appliquer à l'instance. Ce paramètre applique le groupe de sécurité `default` à l'instance. Assurez-vous que les règles de trafic entrant des groupes de sécurité autorisent les connexions SSH entrantes, ou que Test Kitchen ne soit pas en mesure de communiquer avec l'instance. Si vous utilisez le groupe de sécurité `default`, vous devrez peut-être le modifier en conséquence. Pour plus d'informations, consultez [Amazon EC2 Security Groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html).

**subnet\$1id**  
L'ID du sous-réseau cible de l'instance, le cas échéant.

**associate\$1public\$1ip**  
Vous pouvez demander EC2 à Amazon d'associer une adresse IP publique à l'instance si vous souhaitez pouvoir accéder à l'instance depuis Internet.

**interface**  
Le type de configuration du nom d'hôte que vous utilisez pour accéder à l'instance. Les valeurs valides sont `dns`, `public`, `private` ou `private_dns`. Si vous ne spécifiez pas de valeur pour cet attribut, `kitchen-ec2` définit la configuration du nom d'hôte dans l'ordre suivant. Si vous omettez cet attribut, le type de configuration n'est pas défini.  

1. Nom du DNS

1. Adresse IP publique

1. Adresse IP privée

1. Nom DNS privé

**Important**  
Plutôt que d'utiliser les informations d'identification de votre compte pour les clés d'accès et les clés secrètes, vous devez créer un utilisateur et fournir ces informations d'identification à Test Kitchen. Pour plus d'informations, consultez [Bonnes pratiques en matière de gestion des clés d'accès AWS](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).  
Veillez à ne pas le placer `.kitchen.yml` dans un emplacement accessible au public, par exemple en le téléchargeant dans un dépôt public GitHub ou Bitbucket. Vous risqueriez d'exposer vos informations d'identification et de compromettre la sécurité de votre compte.

Le pilote `kitchen-ec2` fournit la prise en charge par défaut pour les plateformes suivantes :
+ ubuntu-10.04
+ ubuntu-12.04
+ ubuntu-12.10
+ ubuntu-13.04
+ ubuntu-13.10
+ ubuntu-14.04
+ centos-6.4
+ debian-7.1.0
+ Windows-2012r2
+ Windows-2008r2

Si vous souhaitez utiliser une ou plusieurs de ces plateformes, ajoutez les noms de plateforme appropriés à `platforms`. Le pilote `kitchen-ec2` sélectionne automatiquement une AMI appropriée et génère un nom d'utilisateur SSH. Vous pouvez utiliser d'autres plateformes (cet exemple utilise Amazon Linux), mais vous devez spécifier explicitement les attributs suivants. `platforms`

**name**  
Le nom de la plateforme. Cet exemple utilise Amazon Linux, donc `name` est défini sur `amazon`.

**driver**  
Les attributs `driver`, qui incluent les éléments suivants :  
+ `image_id`— L'AMI de la plateforme, qui doit appartenir à la région spécifiée. L'exemple utilise `ami-ed8e9284` une AMI Amazon Linux de la région de l'ouest des États-Unis (Californie du Nord).
+ `transport.username`— Le nom d'utilisateur SSH que Test Kitchen utilisera pour communiquer avec l'instance.

  Utilisez `ec2-user` pour Amazon Linux. D'autres AMIs peuvent avoir des noms d'utilisateur différents.

Remplacez le code de `.kitchen.yml` par l'exemple et attribuez les valeurs appropriées à des attributs propres au compte, par exemple `aws_access_key_id`.

## Exécution de la recette
<a name="w2ab1c14c71b9c15c17c31c39"></a>

Cet exemple utilise la recette de [Itération](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-iteration).

**Pour exécuter la recette**

1. Créez un fichier nommé `default.rb` avec le code suivant et enregistrez-le dans le dossier `recipes` du livre de recettes.

   ```
   directory "/srv/www/shared" do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

1. Exécutez `kitchen converge` pour exécuter la recette. Notez que l'exécution de cette commande prendra plus de temps que dans les exemples précédents en raison du temps nécessaire au lancement et à l'initialisation d'une EC2 instance Amazon.

1.  Accédez à la [ EC2console Amazon](https://console.aws.amazon.com/ec2/), sélectionnez la région USA Ouest (Californie du Nord), puis cliquez sur **Instances** dans le volet de navigation. Vous verrez l'instance nouvellement créée dans la liste. 

1. Exécutez `kitchen login` pour vous connecter à l'instance, comme vous l'avez fait pour les instances en cours d'exécution VirtualBox. Vous verrez les répertoires nouvellement créés sous `/srv`. Vous pouvez également utiliser votre client SSH pour vous connecter à l'instance.