Script de création d’une Amazone Machine Image (ami) instance root

Script de création d’un Amazone Machine Image (ami) instance root[1] depuis l’instance de référence utilisé comme modèle pour construire l’image en question.

Dans mon cas j’utilise un type hardware m1.large avec comme départ une image de Ubuntu Karmic 9.10 créé par alestic.com.. Une fois cette instance démarrée je l’ai modifier et updaté en fonction des mes besoins. Souhaitant garder comme master de départ cette instance et la dupliquer à volonté j’ai créé décidé et créé une AMI.

Pour ce faire il faut installer les paquets suivant :

apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> ec2-ami-tools apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> ec2-api-tools

Il est nécéssaire en outre de disposer d’un stockage Amazon Simple Stockage Service dit bucket S3.

Je considère que disposer déjà d’un compte AWS et des éléments d’identification et authentification lier à ce compte : access key, secret key, certificat x509 etc..

Le script en question de fait que reprendre les commandes ec2 expliqué dans les documentations officielles AWS.

<span style="color: #808080; font-style: italic;">#!/bin/sh</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">bucket=</span>ami-stockage
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">prefix=</span>k9-karmic-OsBase
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AWS_USER_ID=</span><span style="color: #000000;">9452</span><span style="color: #000000;">-1810</span><span style="color: #000000;">-7536</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AWS_ACCESS_KEY_ID=</span>TV542X3ONAAKITV54YCTN
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AWS_SECRET_ACCESS_KEY=</span>dwYjHg2msv8rQEjmSBDPFP4m1f4R31f3rCJ9bI
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">[</span> $<span style="color: #7a0874; font-weight: bold;">(</span><span style="color: #c20cb9; font-weight: bold;">uname</span> -m<span style="color: #7a0874; font-weight: bold;">)</span> = <span style="color: #ff0000;">'x86_64'</span> <span style="color: #7a0874; font-weight: bold;">]</span>;
<span style="color: #000000; font-weight: bold;">then</span>   <span style="color: #007800;">arch=</span>x86_64
<span style="color: #000000; font-weight: bold;">else</span>   <span style="color: #007800;">arch=</span>i386
<span style="color: #000000; font-weight: bold;">fi</span>   <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ec2-bundle-vol -r <span style="color: #007800;">$arch</span> -d <span style="color: #000000; font-weight: bold;">/</span>mnt -p <span style="color: #007800;">$prefix</span> -u <span style="color: #007800;">$AWS_USER_ID</span> -k <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>pk-<span style="color: #000000; font-weight: bold;">*</span>.pem \     -c <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cert-<span style="color: #000000; font-weight: bold;">*</span>.pem -s <span style="color: #000000;">10240</span>  -e <span style="color: #000000; font-weight: bold;">/</span>mnt,<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>ubuntu<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #c20cb9; font-weight: bold;">ssh</span>    <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ec2-upload-bundle -b <span style="color: #007800;">$bucket</span> -m <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$prefix</span>.manifest.xml \     -a <span style="color: #007800;">$AWS_ACCESS_KEY_ID</span> -s <span style="color: #007800;">$AWS_SECRET_ACCESS_KEY</span>   <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ec2-register -K <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>pk-<span style="color: #000000; font-weight: bold;">*</span>.pem -C <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cert-<span style="color: #000000; font-weight: bold;">*</span>.pem <span style="color: #007800;">$bucket</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$prefix</span>.manifest.xml

ec2-bundle-vol construit les paquets de l’image AMI tout en excluant ce celle ci le contenue du répertoire /mnt (avec l’option -e ) ou justement sont stocker provisoirement les paquets en question. J’exclue également /home/ubuntu/.ssh préférent utilisé le compte root.

ec2-upload-bundle upload les paquets sur le bucket S3

ec2-register déclare dans votre compte l’ami, qui reste privée, afin qu’elle soit disponible pour créé de nouvelle instance.

Notes

[1] c’est à dire avec / sur le disque local éphémère

2 réflexions sur “ Script de création d’une Amazone Machine Image (ami) instance root ”

  1. Pense bien à faire un peu de ménage! 🙂
    Ca permet de faire des petites économies sur le bucket S3 et ça évite de laisser des traces dans le cas où ton AMI S3 est publique/partagée.

    <p>find /var/log/ -name '*.0' -exec rm {} \; find /var/log/ -name '*.1' -exec rm {} \; find /var/log/ -name '*.gz' -exec rm {} \; for file in $(find /var/log/ -type f ) ; do :&gt; $file ; done 
  2. Exact Gui faire le ménage dans ses log avant de rendre créé une AMI destiner à devenir publiques est nécéssaire pour ne pas dévoilé trop d’information.

    Perso j’y suis allez un peu violent et du coup j’ai des services qui ne retrouvait plus leur répertoire de log au boot et du coup de ne lançaient tout simplement pas. J’ai du refaire mes AMI en faisant attention a bien conserver les fichiers et répertoire de log même vide.

Laisser un commentaire