Introduction
J'ai eu récemment l'occasion de mettre en oeuvre une infrastructure LAMP, reposant sur la plate-forme d'hébergement de machines virtuelles d'Amazon, nommé EC2, pour Elastic Compute Cloud.
Le principe de fonctionnement est le suivant : on créé une image AMI (Amazon Machine Image), contenant le système de fichiers du système d'exploitation à démarrer. Il est possible d'utiliser et de personnaliser des AMI fournis par Amazon, ou de la créér de zéro. Le noyau, quant à lui, est à sélectionner parmi ceux proposés par Amazon.
Ensuite, cette image est téléchargée vers l'infrastructure de stockage d'Amazon, S3 (Simple Storage Service). Après enregistrement de celle-ci, elle peut être instanciée en une ou plusieurs machines virtuelles.
Une particularité de cette solution est que les données stockées dans le système de fichiers racine des machines virtuelles ne sont pas persistantes. Une fois une instance terminée (via la commande
haltpar exemple, ou via l'interface d'Amazon), celles-ci sont perdues ! Il faut alors utiliser pour les données applicatives une autre fonctionnalité d'Amazon, les EBS (Elastic Block Storage). Il s'agit de disques virtuels que l'on peut ajouter à une instance, accessibles sous forme de simples block devices que l'on peut formater et monter. A noter que depuis peu il est possible d'utiliser un EBS en tant que système de fichiers racine, ce qui permet de démarrer et d'arrêter une machine à volonté, sans nécessité d'instancier à nouveau une AMI.Mise en oeuvre
Ce premier article décrit les étapes à suivre pour créér sa propre image AMI de Debian 5.0, l'envoyer vers Amazon, et la démarrer. Il vous faudra évidemment pour cela un compte Amazon Web Services.
Création de l'image
Création d'une image d'une taille de 1 Go et montage sous
/mnt/ami:# EC2_AMI_NAME=debian50 # dd if=/dev/zero of=$EC2_AMI_NAME.img bs=1M count=1024 # mkfs.ext3 -F $EC2_AMI_NAME.img # mkdir /mnt/ami # mount -o loop $EC2_AMI_NAME.img /mnt/amiInstallation et exécution de l'outil
debootstrap, qui permet le téléchargement et l'installation d'un système Debian de base dans le point de montage. Attention, une architecture 32 bits est requise pour pouvoir démarrer des instances de type Small.# aptitude update # aptitude install debootstrap # debootstrap --arch i386 lenny /mnt/amiMontage des pseudo systèmes de fichier :
# mount -t proc proc /mnt/ami/proc/ # mount -t devpts devpts /mnt/ami/dev/pts/Changement du répertoire racine vers le point de montage (chroot) et installation des packages nécessaires :
# chroot /mnt/ami # aptitude install udev libc6-xen sshConfiguration des points de montage dans
/etc/fstabtel que recommandé dans la documentation :/dev/sda1 / ext3 defaults 1 1 NONE /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 /dev/sda2 /mnt ext3 defaults 0 0 /dev/sda3 swap swap defaults 0 0Ajout des lignes suivantes au fichier
/etc/network/interfacespour configurer l'interfaceeth0en DHCP :auto lo eth0 iface lo inet loopback iface eth0 inet dhcpIl est également nécessaire d'ajouter sa clé SSH dans
/root/.ssh/authorized_keys, ou de définir un mot de passe pour le compte root.Enfin, quitter le chroot, et démonter l'image :
# /etc/init.d/ssh stop # exit # umount /mnt/amiGénération de l'image AMI
Pour la suite des opérations, il est nécessaire de télécharger et décompresser les Amazon EC2 API Tools et Amazon EC2 AMI Tools. On installe également les dépendances nécessaires.
# aptitude install ruby libopenssl-ruby unzip sun-java6-jre # EC2_AMI_TOOLS=ec2-ami-tools-1.3-XXXXX # EC2_API_TOOLS=ec2-api-tools-1.3-XXXXXIl faut également générer une clé et un certificat X.509, et faire pointer les variables d'environnements ci-dessous vers les fichiers téléchargés. Ceux-ci seront utilisés pour effectuer des requêtes vers les web services d'Amazon.
# EC2_PRIVATE_KEY=pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem # EC2_CERT=cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pemEnfin, noter son EC2 user ID, généralement visible en haut à droite des pages d'AWS.
# EC2_USER_ID=XXXX-XXXX-XXXXCréation de l'image AMI :
# export EC2_HOME=$EC2_AMI_TOOLS # $EC2_AMI_TOOLS/bin/ec2-bundle-image -i $EC2_AMI_NAME.img \ -k $EC2_PRIVATE_KEY -c $EC2_CERT -u $EC2_USER_ID -r i386Upload sur S3
Il faut maintenant télécharger l'image vers Amazon S3. Pour cela, il est nécessaire de récupérer son Access Key ID et sa Secret Access Key sur la page Security Credentials. Il faut également sélectionner la région où sera localisée l'instance (US ou EU), ainsi que la bucket S3 où sera stockée l'AMI.
# EC2_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXX # EC2_SECRET_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # EC2_REGION=EU # EC2_BUCKET=XXXXXXXX # $EC2_AMI_TOOLS/bin/ec2-upload-bundle -m /tmp/$EC2_AMI_NAME.img.manifest.xml \ -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY -b $EC2_BUCKET \ --location $EC2_REGIONEnregistrement de l'instance
Il est nécessaire de déclarer l'image à Amazon pour pouvoir l'instancier. L'option
--urlest nécessaire pour préciser que l'on s'adresse à la région Europe d'EC2.# export EC2_HOME=$EC2_API_TOOLS # export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.12 # $EC2_API_TOOLS/bin/ec2-register \ --url http://eu-west-1.ec2.amazonaws.com \ -n $EC2_AMI_NAME \ $EC2_BUCKET/$EC2_AMI_NAME.img.manifest.xmlLa commande retourne l'ID de l'AMI qui vient d'être enregistrée.
Instanciation
L'instanciation peut également se faire via une requête sur AWS :
# EC2_AMI_INSTANCE_ID=ami-XXXXXXXX # EC2_AKI=aki-7e0d250a # EC2_RAMDISK=ari-7d0d2509 # $EC2_API_TOOLS/bin/ec2-run-instances $EC2_AMI_INSTANCE_ID \ -K $EC2_PRIVATE_KEY \ -C $EC2_CERT \ --kernel $EC2_AKI --ramdisk $EC2_RAMDISK \ --region eu-west-1Le noyau utilisé (
aki-7e0d250a) est un2.6.21.7-2.fc8xen, suffisamment récent pour l'utilisation de udev. Ce n'est pas le cas du noyau par défaut.Connexion à la machine
Les instances créées peuvent être listées à l'aide de la commande suivante :
# $EC2_API_TOOLS/bin/ec2-describe-instances -K $EC2_PRIVATE_KEY \ -C $EC2_CERT --url http://eu-west-1.ec2.amazonaws.comParmi les informations obtenues, on peut notamment connaître le nom DNS public de l'instance créé, de la forme
ec2-XXX-XXX-XXX-XXX.eu-west-1.compute.amazonaws.com. A noter que ces informations sont également disponibles via l'interface web.Enfin, il ne reste plus qu'à se connecter avec le compte root à sa nouvelle machine !
Blog de Thomas Martin
Entries tagged "virtualization".
samedi 16 janvier 2010
Archive
- 2010
- 2009
- 2008