Exemple 9 : utilisation d'instances Amazon EC2 - 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.

Exemple 9 : utilisation d'instances Amazon EC2

Important

Le AWS OpsWorks Stacks service a atteint sa fin de vie le 26 mai 2024 et a été désactivé pour les nouveaux clients et 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.

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 instance Amazon EC2. 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 instance Amazon EC2. 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 kitchen-ec2 au lieu de Vagrant.

  • Le .kitchen.yml fichier du livre de recettes doit être configuré avec les informations requises pour lancer l'instance Amazon EC2.

Note

Une autre approche consiste à utiliser le plug-in vagrant-aws de Vagrant. Pour plus d'informations, consultez Fournisseur AWS Vagrant.

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

Inscrivez-vous pour un Compte AWS

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 https://portal.aws.amazon.com/billing/signup.

  2. Suivez les instructions en ligne.

    Dans le cadre de la procédure d‘inscription, vous recevrez un appel téléphonique 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 AWSest créé. Par défaut, seul l‘utilisateur racine a accès à l‘ensemble des AWS services et des ressources de ce compte. Pour des raisons de sécurité, attribuez un accès administratif à un utilisateur et utilisez uniquement l'utilisateur root pour effectuer les tâches nécessitant un accès utilisateur root.

AWS vous envoie un e-mail de confirmation une fois le processus d'inscription terminé. Vous pouvez afficher l‘activité en cours de votre compte et gérer votre compte à tout moment en accédant à https://aws.amazon.com/ et en choisissant Mon compte.

Création d'un utilisateur doté d'un accès administratif

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 Consoletant 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 dans le Guide de l‘utilisateur Connexion à AWS .

  2. 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) 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 dans le Guide de l’utilisateur AWS IAM Identity Center .

  2. Dans IAM Identity Center, accordez 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 dans le Guide de AWS IAM Identity Center l'utilisateur.

Connectez-vous en tant qu'utilisateur disposant 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 dans le guide de l'Connexion à AWS utilisateur.

Attribuer l'accès à des utilisateurs supplémentaires
  1. Dans IAM Identity Center, créez un ensemble d'autorisations conforme aux meilleures pratiques en matière d'application des autorisations du moindre privilège.

    Pour obtenir des instructions, voir Création d'un ensemble d'autorisations dans le guide de AWS IAM Identity Center l'utilisateur.

  2. Affectez des utilisateurs à un groupe, puis attribuez un accès d'authentification unique au groupe.

    Pour obtenir des instructions, voir Ajouter des groupes dans le guide de AWS IAM Identity Center l'utilisateur.

Vous devez créer un utilisateur IAM 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 fournir à ces utilisateurs uniquement les autorisations dont ils ont besoin pour effectuer la tâche et de supprimer ces utilisateurs lorsqu'ils ne sont plus nécessaires.

  • AWS_ACCESS_KEY — la clé d'accès de votre utilisateur, qui ressemblera à AKIAIOSFODNN7EXAMPLE.

  • AWS_SECRET_KEY — la clé secrète de votre utilisateur, qui ressemblera à WJALRxUTNFEMI/K7MDENG/CYEXAMPLEKEY. bPxRfi

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
  2. 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. 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, exécutez gem install kitchen-ec2 -v <version number>.

  3. Vous devez spécifier une paire de clés SSH Amazon EC2 que Test Kitchen peut utiliser pour se connecter à l'instance. Si vous ne possédez pas de paire de clés Amazon EC2, consultez Amazon EC2 Key Pairs 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.

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

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

    name "createdir-ec2" version "0.1.0"
  6. Initialisez Test Kitchen, comme décrit dans Exemple 1 : Installation des packages. La section suivante décrit la procédure de configuration.kitchen.yml, ce qui est nettement plus compliqué pour les instances Amazon EC2.

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

Configuration de .kitchen.yml pour Amazon EC2

Vous configurez .kitchen.yml avec les informations dont le kitchen-ec2 pilote a besoin pour lancer une instance Amazon EC2 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 paramètres kitchen-ec2, consultez Kitchen::Ec2 : un pilote Test Kitchen pour Amazon 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_ssh_key_id

(Obligatoire) Le nom de la paire de clés SSH Amazon EC2, nommé US-East1 dans cet exemple.

transport.ssh_key

(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é parus-west-1).

availability_zone

(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_chef_omnibus

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_group_ids

(Facultatif) Une liste des ID du groupe de sécurité à 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 Groupes de sécurité Amazon EC2.

subnet_id

L'ID du sous-réseau cible de l'instance, le cas échéant.

associate_public_ip

Vous pouvez demander à Amazon EC2 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

  2. Adresse IP publique

  3. Adresse IP privée

  4. 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.

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 AMI 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

Cet exemple utilise la recette de Itération.

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
  2. 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 instance Amazon EC2.

  3. Accédez à la console Amazon 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.

  4. 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.