**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**

## Serveurs Amazon EC2

* <http://aws.amazon.com/documentation/ec2/>
* <https://console.aws.amazon.com/ec2/>
* <http://alestic.com/2011/02/ec2-change-type>
* <https://github.com/open-guides/og-aws>

### Installation de l'API d'Amazon EC2

l'API Tools d'Amazon EC2 permet de gérer ses instances, AMI, etc… en ligne de commande.

Voici la procédure à appliquer pour l'installation des outils :

* Télécharger l'archive depuis cette page : <http://aws.amazon.com/developertools/351>
* Générer un couple certificat/clé privée depuis l'interface d'Amazon, qui permettra de s'authentifier sur le service :
   "Account" > "Identifiants de sécurité" > Onglet "Certificats X.509" > "Créer un nouveau certificat" et télécharger le certificat et la clé publique
* Placer le certificat et la clé privée à la racine du répertoire de l'API, une fois celui-ci décompressé
* Indiquer ensuite diverses informations dans les variables d'environnement, qu'on pourra placer dans son _.profile_ :

~~~
export EC2_HOME=~/ec2
export EC2_PRIVATE_KEY=pk-YOURKEYNAME.pem
export EC2_CERT=cert-YOURKEYNAME.pem
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22/jre/
# accessoirement :
export EC2_URL=<https://ec2.eu-west-1.amazonaws.com>
~~~

* On peut tester que l'installation de l'API est correcte en listant par exemple les AMI disponible :

~~~
bin/ec2-describe-images -a

~~~
NOTE : pour exécuter les commandes EC2, il faut se trouver à la racine du répertoire d'installation.

### Stocker une AMI sur un EBS

Voici la procédure à suivre :

* Démarrer une instance de l'AMI :

~~~
ec2-run-instances --instance-type m1.large --kernel aki-9800e5f1 ami-xxxxxx
~~~

* Créer un nouveau volume, de même taille que l'AMI, puis l'attacher à l'instance :

~~~
ec2-create-volume --size 10
ec2-attach-volume vol-xxxxxx --instance i-xxxxxx --device /dev/sdf
~~~

* Depuis l'instance, copier l'intégralité de l'AMI sur le volume :

~~~
# Un peu violent mais ça semble marcher.
# Un meilleure méthode serait peut-être de faire un « unbundle » de l'AMI et de la copier sur /dev/sdf.

# Éteindre un maximum de services pour limiter les écritures sur le disque
dd if=/dev/sda1 of=/dev/sdf
fsck /dev/sdf
~~~

* Détacher le volume le volume, et terminer l'instance :

~~~
ec2-detach-volume vol-xxxxxx --instance i-xxxxxx
ec2-terminate-instances i-xxxxxx
~~~

* Faire une snapshot du volume :

~~~
ec2-create-snapshot vol-xxxxxx
~~~

* Enregistrer le snapshot en tant qu'AMI :

~~~
ec2-register --name <name> -a x86_64 --root-device-name /dev/sda1 --block-device-mapping /dev/sda1=snap-xxxxxx
~~~

* Démarrer enfin une instance de cette nouvelle AMI :

~~~
ec2-run-instances --instance-type m1.large --kernel aki-9800e5f1 ami-xxxxxx
ec2-associate-address <IP> -i i-xxxxxx
~~~

### Rendre publique une AMI

TODO

### Partager une AMI Amazon EC2

En tant qu'utilisateur du service EC2 d'Amazon, on peut être amené à vouloir partager ses AMI (Amazon Machine Image) avec d'autres utilisateurs (amis, clients, etc) qui utilisent donc un autre compte Amazon. La procédure pour cela est très simple, et directement intégré à l'interface web :

* En premier lieu, il est nécessaire de connaître le Account Number du compte qui aura accès à notre AMI (il ne s'agit de l'email utilisé pour s'identifier). On trouvera cela dans Your account > Personal Information, en haut à droite de la page.
* Ensuite, il suffit de faire un clic droit sur notre AMI dans la vue correspondante, de sélectionner Edit permissions et d'ajouter un ou plusieurs Account Number dans les champs prévus à cet effet.
* Sur l'autre compte, l'AMI sera alors accessible dans la catégorie Private images.

### Gérer plusieurs sous-comptes sur Amazon AWS avec IAM

* <https://console.aws.amazon.com/iam/home>
* <http://aws.amazon.com/iam/>

IAM est un module qui permet de créer des sous-comptes (et même des groupes) et de leur donner des permissions spécifiques.
On peut ainsi créer plusieurs sous-comptes ayant un accès total, ou uniquement des permissions spécifiques (accès à certains modules : EC2, S3, etc. en read-only ou full access).

Ces utilisateurs peuvent avoir un access key (pour accéder à l'API Amazon AWS) et/ou un mot de passe (pour l'accès web).

Pour l'accès web, cela se passe sur une URL spécifique qui est : <https://account-identifier.signin.aws.amazon.com/console/ec2> 

### Migrer une instance EBS d'un compte à un autre

La migration de l'instance ne se fait pas correctement, il est nécessaire de migrer le snapshot puis de recréer l'instance sur le nouveau compte.
Vous devez au préalable snapshoter le volume de l'instance, et partager cette snapshot avec l'ID du nouveau compte (cf. « Partager une AMI Amazon EC2 », en adaptant aux snapshots).

Voici la procédure à suivre, avec $EC2_CERT et $EC2_PRIVATE_KEY contenant les clés du nouveau compte :

* Tout d'abord on ne peux pas avoir une instance qui utilise une snapshot partagée, il faut donc créer un volume à partir de cette snapshot, puis snapshoter ce volume :

~~~
bin/ec2-create-volume --size 10 --availability-zone us-east-1b --snapshot snap-xxxxxxxx
bin/ec2-create-snapshot vol-xxxxxxxx
~~~

* Créez ensuite l'instance à partir de la snapshot :

~~~
bin/ec2-register --name <NAME> -a x86_64 --root-device-name /dev/sda1 --block-device-mapping /dev/sda1=snap-xxxxxxxx
~~~

* Démarrez la nouvelle instance et assignez lui une nouvelle IP :

~~~
bin/ec2-run-instances --instance-type m1.large --kernel aki-9800e5f1 ami-xxxxxxxx
bin/ec2-associate-address <IP> -i i-xxxxxxxx
~~~

### Création d'une AMI

À compléter suivant <http://blog.tmartin.fr/post/2010/01/16/Installer-Debian-sur-une-machine-virtuelle-Amazon-EC2>

#### Installation des modules noyau

* Récupérez les modules pour votre noyau :

~~~
wget <http://ec2-downloads.s3.amazonaws.com/ec2-modules-2.6.18-xenU-ec2-v1.0-x86_64.tgz>
~~~

* Décompressez l'archive à la racine du système :

~~~
tar xzf /tmp/ec2-modules-2.6.18-xenU-ec2-v1.0-x86_64.tgz -C /
~~~

L'archive fournit le fichier vmlinuz, les modules .ko, et le /boot/System.map.

### Failed to execute /init Kernel panic

En cas de kernel panic suite à un reboot.


~~~
[    0.967754] Freeing unused kernel memory: 688k freed
[    0.971012] Failed to execute /init
[    0.973212] Kernel panic - not syncing: No init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
[    0.980516] Pid: 1, comm: swapper/0 Not tainted 3.2.0-4-amd64 #1 Debian 3.2.65-1+deb7u2
[    0.985497] Call Trace:
~~~

L'initramfs est corrompue. Pour corriger ceci :

* L'arrêter ;[[BR]]
* Détacher son EBS ;[[BR]]
* Attacher son EBS sur une machine OK en disque secondaire (xvdf).[[BR]]


~~~
# mount /dev/xvdf /mnt/
# mount -t proc none /mnt/proc
# mount -o bind /dev /mnt/dev
# mount -o bind /dev/pts /mnt/dev/pts
# mount -t sysfs sys /mnt/sys
# chroot /mnt/ /bin/bash
# dpkg-reconfigure linux-image-3.2.0-4-amd64
# exit
# umount /mnt/dev/pts
# umount /mnt/dev
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt
~~~

* Détacher l'ebs de la machine de rescue ;[[BR]]
* Attacher l'ebs sur la machine planté (xvda) ;[[BR]]
* Démarrer la VM.

Pour éviter que l'initramfs soit corrompue, lors d'un upgrade kernel, il faut s'assurer que /var/tmp soit bien en exec :

~~~
mount -oremount,exec /var/tmp
dpkg-reconfigure linux-image-3.2.0-4-amd64
~~~

## Configuration SSH
* !!!!!!  ATTENTION  !!!!! *

Par défaut, le serveur SSH est configuré globalement avec le paramètre:

~~~
PasswordAuthentication no
~~~

* Cette ligne doit être commentée! *

## Screenshot via AWS

Via l'interface web AWS, on a accès à un screenshot de l'écran actuel de la VM (en read-only).

Attention ! Il faut se méfier de ce screenshot qui peut ne pas réfléter l'état réel de la machine... exemple typique au démarrage d'une machine, vous verrez l'écran du "BIOS QEMU" avec "Loading initial ramdisk ..."
pourtant la VM n'est pas forcément dans cet état, il est probable qu'en fait elle est en cours de boot ou pire, que son boot a échoué pour une raison ou une autre POURTANT VOUS NE VERREZ PAS CELA SUR LE SCREENSHOT !!

## ELB Elastic Load Balancer

« L'équilibrage de charge » fonctionne sur le principe suivant.

- On crée un nouveau « Équilibreur de charge d'application » ;
- On choisi « l'écouteur » (HTTP ou HTTPS) (équivalent frontend) ;
- Si on a choisi HTTPS, on choisit un certificat (que l'on peut créer via Amazon) ;
- On rattache un groupe de sécurité (règles pare-feu) ;
- On crée un nouveau groupe cible qui contient la liste des backend avec le choix du protocole, HTTP, HTTPS ou TCP. On pourra spécifier une URI a surveiller ;
- On met les machines que l'on veut dans ce groupe.

Une fois que LB est en place, on pourra récupérer son nom de domaine pour le rattacher via CNAME au nom de domaine du site concerné.  
Exemple de nom : example-1270308724.eu-central-1.elb.amazonaws.com  
Exemple de CNAME : www.example.com CNAME example-1270308724.eu-central-1.elb.amazonaws.com.

Sur les frontaux web il faudra penser à mettre en place le mod remoteip pour Apache ou `set_real_ip_from` pour Nginx.

## SMTP

Les instances EC2 sont limitées en envoi de mail par le port 25. Il est possible de demander la levée de ces limites : <https://aws.amazon.com/fr/premiumsupport/knowledge-center/ec2-port-25-throttle/>

## FAQ

### Test accessibilité réseau

Pour vérifier l'accès à Amazon : <http://ec2-reachability.amazonaws.com/> et vérifier l'affichage de l'icône "vert".
