Conception d’une infrastructure sur AWS : best practices !
Ce post va présenter une description de la phase de conception et des choix à effectuer pour une infrastructure sur AWS (Amazon Web Services). Je me base sur mon expérience dans le cadre de la mise en place d’une application sociale à forte sollicitation (plusieurs (>20) millions de pages vues par jour et plus de 800K DAU – Daily Active User). L’objectif de ce post est de décrire les étapes de réflexion à avoir lors de la mise en place d’une infrastructure pour une application sociale en particulier et de n’importe quelle infrastructure sur AWS en général et de donner les « tips and tricks » sur le sujet ainsi que les informations importantes à connaître et à prendre en considération lors des différentes phases. Je donnerai de temps en temps nos choix de manière plus spécifique sur le sujet et ce qui nous a conduit en ce sens, mais ce n’est pas le cœur de ce post qui reste la démarche de conception générale à suivre lors de la mise en place d’une telle infrastructure.
Application sociale / Cloud Computing : adéquation !
Tout d’abord il est important de souligner l’adéquation entre les besoins, en termes d’infrastructure, des applications sociales et le Cloud Computing : le succès des applications sociales est, en effet, basé sur un phénomène de viralité et celles-ci peuvent connaître le succès du jour au lendemain. Il est alors nécessaire de rentrer dans une phase d’extension/paramétrage de l’infrastructure qui doit être rapide pour répondre à la nouvelle fréquentation explosive de l’application et ne pas prendre le risque de voir le succès brisé sur sa lancée, faute d’ infrastructure permettant la montée en charge. Le succès étant difficile à prévoir sur ce genre d’application, il n’est pas envisageable d’acheter et de conserver à disposition un grand nombre de ressources matérielles en attendant l’hypothétique succès. Ca peut fonctionner, comme ça peut ne pas fonctionner : n’investissons pas… Mais soyons prêts ! C’est tout l’intérêt du Cloud Computing !
Il me paraît important de préciser que quand je parle de « ne pas investir », j’entends en termes de logistique. Faire l’économie d’un investissement sur la réflexion lors de la conception de l’infrastructure et, par la suite, lors de la mise en place des composants de base qui vont supporter l’application, reviendrait à ne pas être prêt, donc à un échec… ou bien à un surcoût dans le meilleur des cas !
Application sociale & conception
Une brève digression à ce niveau me paraît indispensable avant d’entamer le vif du sujet sur l’infrastructure. Il est indispensable de savoir qu’un code optimisé et réfléchi permettra d’économiser beaucoup d’argent et de complexité de l’infrastructure par la suite. Pas des choses compliquées, mais juste un minimum de réflexion :
• Quelles sont les informations que nous mettrons à disposition dans des caches et celles accédées en base ?
• Quelles sont les informations volatiles (en générale à destination du cache) ?
• Comment gérer mes connexions aux ressources pour les maintenir un temps minimal : gestion d’un pool de connexions afin d’optimiser les temps d’accès, respect de la cinématique connexion/récupération des données/fermeture de la connexion/traitement des informations récupérées afin de ne pas maintenir de connexions inutiles, groupage des requêtes, …
• Gérer un code modulaire afin de pouvoir le faire évoluer rapidement en fonction notamment des temps de réponse induits par telle ou telle fonctionnalité en fonction de la montée en charge,
• Séparation de l’IHM et du traitement, séparation des fonctionnalité de l’application et des APIs du réseau social, séparation des ressources et du code… On ne sait jamais ! Si ça fonctionne bien, il serait dommage de se priver d’un portage sur une autre réseau social parce que l’application est mal conçue au niveau découpage.
De part mon expérience, les principales optimisations, en termes de temps de réponse, que l’on peut constater sur une application à forte sollicitation sont réalisées au niveau du code de l’application ! Sur une application présentant des problèmes de conception, il apparaît au fur et à mesure de l’augmentation des capacités de l’infrastructure que le bénéfice retiré sera moindre. On peut rapprocher cela d’une courbe logarithmique : au début l’augmentation des capacités de l’infrastructure compensera les problème liés à la conception de l’application, mais arrivé à un certain seuil le bénéfice en termes de résistance à la charge sera faible par rapport aux investissements sur l’infrastructure.
Ce point est à méditer fortement…
Il était une fois…
RDV sur le site http://aws.amazon.com/ , préparez votre numéro de carte bleue, enregistrez-vous… Bravo ! Vous venez d’acquérir votre passe pour les nuages composé d’une « access key » et d’une « secret key ».
Le Cloud Computing AWS est composé comme son nom l’indique de… services web ! Pour y accéder, rien de plus simple : soit vous utiliser des APIs en ligne de commande, pratique pour l’automatisation des tâches à venir par la suite mais rebutant pour une première expérience, soit vous optez pour Elasticfox (Firefox Extension for Amazon EC2) proposant une IHM permettant d’accéder aux fonctionnalités des AWS et d’avoir un tableau de bord de vos instances, volumes, snapshots, groupes de sécurité, … Vous pouvez télécharger la « console élastique » sur http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609 .
Une infrastructure à part entière
La premier piège à éviter est de considérer votre infrastructure comme une sandbox dans laquelle vous pouvez un peu tout tester et puis vous dire que vous pourrez revenir en arrière par la suite, un peu plus tard, si vos choix ne vous satisfont pas quand votre application commencera à fonctionner… Non ! Il s’agit d’une véritable infrastructure où vous devrez faire des choix, faire preuve de réflexion, anticiper,… Le Cloud Computing vous décharge de nombre de problèmes logistiques, vous permet d’être réactif, de disposer de ressources quasi illimitées, de réduire vos coûts, … Mais vous demandera la même réflexion que pour toute infrastructure.
La prise en main
La première étape de la mise en place d’une infrastructure sur AWS consiste en une prise en main. Une journée de prise en main fera l’affaire, c’est pas compliqué !
Documentation
Il est important dans un premier temps de consulter le site d’Amazon et de prendre connaissances des différentes briques/options à votre disposition, de lire la documentation en quelque sorte ! C’est rapide mais indispensable…
Tests
Vous pouvez ensuite effectuer des tests et vous mettre à l’aise en démarrant des instances EC2, en y attachant des volumes EBS, … Rassurez-vous ca ne coûte pas grand-chose !
RAZ
Vous êtes à l’aise ? Supprimez tout ce que vous avez fait et passez à la phase de conception. Supprimez tout ? Oui ! Premièrement, parce que dépenser de l’argent inutilement, même peu, en laissant des instances fonctionner, c’est pas terrible et surtout parce que l’étape de conception va vous amener à faire des choix fondateurs… Donc supprimez tout !
Réflexion macro…
La seconde étape est de décider :
• de leur répartition géographique,
• du niveau de disponibilité que vous souhaitez accorder à vos services en fonction de leur criticité.
Région et répartition géographique
Il faut tout d’abord sélectionner une région, à savoir « us-east-1 » pour les Etats-Unis (service web endpoint : « us-east-1.ec2.amazonaws.com » ou « ec2.amazonaws.com » – pour retro compatibilité) et « eu-west-1 » pour l’Europe (service web endpoint : « eu-west-1.ec2.amazonaws.com »). Il faut savoir que chaque région est totalement isolée. Il faut donc effectuer un choix en fonction de sa localisation ou plus exactement en fonction de la localisation des utilisateurs (humains ou systèmes) potentiels. Lors de la mise en place de notre application sociale, la région européenne était en beta, nous avons donc sélectionné la région « us-east-1 » pour notre environnement de production, même si la cible majeure de nos utilisateurs était européenne.
Zone d’accessibilité et disponibilité des services
Il faut ensuite choisir si il est nécessaire de mettre en place un système de résistance à la panne (fault tolerance) via les zones d’accessibilité à l’intérieur d’une région. Les zones d’accessibilités sont distinctes et isolées les unes des autres au niveau réseau. Il faut savoir que les ressources AWS n’ont pas la même portée : par exemple une instance EC2 et un volume EBS n’ont une portée que sur la zone d’accessibilité et doivent être dans la même bien évidemment pour être attachés. S3, en revanche, à une portée sur la région et permet d’échanger des données et de générer des EBS à partir de snapshots dans n’importe quelle zone d’accessibilité d’une région donnée. Un doublement du service dans 2 zones différentes doit être chapoté par une « Elastic IP » qu’il est possible de mapper à tel ou tel point d’entrée. Il est à noter qu’une « Elastic IP » peut être mappée sur 2 instances d’une même zone, bien sûr, afin de parer à la défaillance d’une instance (en point d’entrée) plutôt que d’une zone complète. Dans le cas de notre application, nous sommes restés dans une seule zone d’accessibilité, sans « Elastic IP ». La criticité d’une application sociale est moindre et la rupture de service acceptable (dans une certaine limite bien sûr). Nous avons en revanche mis en place une architecture solide dans la zone d’accessibilité sélectionnée.
Ci-dessous un schéma tiré du site d’Amazon représentant les régions et zones d’accessibilité.

AWS : Regions et Zones
Le tableau ci-dessous résume la portée (scope) des ressources pour Amazon EC2 (globale, régionale ou zone d’accessibilité) :
Ressource - Portée
Compte AWS - globale
Système d’identifiants EC2 (dont AMI ID, Instance ID, EBS Volume ID, EBS Snapshot ID, …) – régionale
Instances EC2 – zone d’accessibilité
AMIs – régionale
Groupe de sécurité – régionale
Clés SSH (Key Pairs) – régionale
Elastic IP – régionale
Volumes EBS – zone d’accessibilité
Snapshot EBS (stockage sur S3) – régionale
…Et jeu de Légos !
Le choix des briques est fonction de l’application, dans notre cas nous avons utilisé les composants décrits ci-dessous.
EC2 : instances virtuelles
Il est à noter que les informations sur les instances ne sont pas sauvegardées et sont perdues en cas d’arrêt de l’instance, il ne doit donc pas y avoir de données applicatives stockées dessus ou bien elles doivent être backupées régulièrement. Les instance EC2 sont attachées à une zone d’accessibilité. Il est à noter qu’il est possible sur des instances EC2 de rencontrer des « hardware failures ». Cela nous est arrivé 3 fois sur un parc d’une trentaine d’instances EC2 en l’espace de 5 mois. D’où l’importance de ne pas stocker de données applicatives ou de les backuper, de prévoir une remontée rapide des instances (utilisation d’un gestionnaire de configuration centralisé type « Puppet », utilisation d’AMIs, …) et d’utiliser les composants mis à disposition par Amazon comme les volumes EBS ou bien S3 pour le stockage fiable de données critiques.
EBS : volumes de stockage haute performance pour EC2
Les EBS permettent de stocker les données de notre base de données afin d’offrir persistance (contrairement à EC2) et une bien meilleur gestion des i/o nécessaire pour les nombreuses lectures/écritures sur disque. Un EBS est attaché à une unique instance EC2, il est possible d’attacher X EBS à une instance EC2. Les volumes sont alors perçus au niveau des instances EC2 comme des « devices » qu’il est alors possible de formater et de monter. L’EBS peut être détaché et rattaché à une autre instance EC2 à chaud. Les volumes EBS sont attachés à une zone d’accessibilité, il est alors possible de les attacher à des instances EC2 appartenant à la même zone. Concernant la persistance, et plus exactement la durabilité, les données sur EBS sont répliquées sur différents serveurs dans une même zone d’accessibilité, ce qui permet de prévenir la perte de données. La perte est toujours possible, mais 10 fois moins qu’avec une gestion de disque dur classique selon Amazon. Il est à noter que du mirroring entre EBS dans une même zone d’accessibilité ne va pas servir à grand-chose en termes d’amélioration de la durabilité des données. Dans notre cas, nous avons créé des volumes de 20 Go pour stocker les données de nos bases MySQL, mais il est possible d’en créer de 1 Go à 1 To.
S3 : stockage persistant de données inter zones
S3 peut être utilisé afin de créer des snapshots d’EBS qui seront répliqués et accessibles entre plusieurs zones d’accessibilités, offrant une durabilité accrue et surtout la possibilité de recréer des volumes EBS à partir de ces snapshots sur différentes zones d’accessibilité, S3 ayant un scope inter zones dans une région donnée. S3 permet également de stocker des données et de les rendre disponibles ou non sur le Web via des ACL. Nous utilisons S3, dans notre cas, afin de faire des backups (donc ACL privée et uniquement accessibles par le(s) détenteur(s) de la clé de sécurité) des données des bases (MySQL), mais utilisons un dump standard que nous poussons ensuite sur S3 via un client (s3cmd). Nous préférons cela car ce fonctionnement nous permet d’effectuer si nécessaire un dump « à chaud » sans avoir à locker les tables (même si locker les tables est plus propre et effectué régulièrement lors de la maintenance nocturne) ou plus exactement à freezer l’EBS et préférons en cas de corruption (improbable) de la sauvegarde avoir à traiter avec un dump standard plus simple à « corriger ». Nous stockons également des logs importants et les configurations importantes de nos EC2. Il est à noter que dans le cas de dump, même sans lock, sur des sites très sollicités, cela n’est possible que sur les bases les plus légères et les moins sollicités. Les éléments les plus sollicités ne peuvent être backupés que durant un phase de fermeture du site. Nous utilisons également S3, avec une ACL publique cette fois-ci, afin de mettre à disposition de notre CDN les données statiques (images, bannières de publicité, …). Des clients graphiques simples (comme « Amazon S3 Firefox Organizer » (S3Fox), une extension Firefox sur le modèle de notre « console élastique ») permettent d’interagir avec S3 afin de rendre accessible les buckets (espace de stockage sur S3) aux responsables du contenu du site, par exemple.
Il est à noter que concernant les EC2 et les EBS qu’une limite de 20 instances de chaque par compte utilisateur est positionnée au départ. Ces limites peuvent être augmentées indépendamment l’une de l’autre à 40, puis à 100, … sur simple demande à un contact. La demande est prise en compte dans les 24 heures, prévoyez donc cela un peu à l’avance.
De plus, une offre de support est disponible en version « Silver » ou « Gold » afin de vous accompagner et répondre à vos questions. Vous pouvez consulter http://aws.amazon.com/premiumsupport/ pour plus d’informations.
AMIs
Il faut ensuite sélectionner l’AMI, le système virtuel à installer sur le matériel. Il est à noter qu’en fonction de la configuration matérielle choisie (m1.small, m1.large, m1.xlarge, c1.medium ou c1.xlarge), il y a une architecture sous-jacente (32 ou 64 bits). On ne peut donc pas poser n’importe quel système sur n’importe quelle architecture… Et les services AWS le gèrent bien ! Heureusement !
Il est également possible d’enregistrer vos propres AMIs que vous aurez configurées avec soin afin de les utiliser.
Nous avons opté pour une AMI « ubuntu-8.10-intrepid-base-64 » proposée dans la liste des AMIs disponibles.
Logiciels
Après avoir sélectionné le système, vient la sélection des logiciels. Cette section dépend complètement de l’application que vous allez mettre en place, cependant, sur des applications nécessitant de la scalabilité, on retrouve des axes majeurs et des problématiques récurrentes.
Tout d’abord un balancer Soft (HaProxy, …) distribuant les requêtes sur plusieurs frontaux Web (Apache, lighttpd, …) qui exécutent les traitements dans le cas de langages comme PHP (en CGI ou en mod) ou bien qui eux même redirigent les requête vers des serveurs applicatifs (Tomcat, Jetty, …) exécutants des traitements JAVA par exemple. Il serait possible de faire un post entier rien que sur les optimisations qu’il est possible d’apporter à ces niveaux, sur la gestion des processus et des threads, sur la gestion des piles de connexions, … Nous avons dans notre cas opté pour un HaProxy qui distribue les requêtes sur plusieurs Apache en « mod_php ».
Ensuite vient la base, avec le choix de la base en fonction des besoins (PostgreSQL, MySQL, …) : nous avons opté pour MySQL. A partir de là, les choix clés en termes de stockage : quel stockage ? InnoDB ou MyISAM ? Pour les tables essentiellement accédées en lecture ou nécessitant de la recherche « full text » : MyISAM ! Pour celles accédées en écriture : InnoDB (avec son système de row locking) ! Un mixte des 2 est possible en fonction des données (attention en revanche, les jointures inter stockages sont déconseillées) et pourquoi pas de la réplication sur les données vitales et fortement accédées avec un master InnoDB pour l’écriture et un slave MyISAM pour la lecture ? Non, il y a beaucoup trop d’accès et la réplication du master vers le slave ne sera pas encore effective pour la phase de lecture de certaines données, on optera pour 2 InnoDB avec un seul accédé en lecture/écriture, cela nous permettant lors d’un problème sur le master de le remplacer par le slave qui sera également performant en écriture (en MyISAM, les écritures saturent la base…). On limite les jointures pour bénéficier des avantages du système MySQL. Tout ça sans parler du paramétrage de chaque mode de stockage (InnoDBBufferPool, …) en fonction des opérations et de la volumétrie du site… Plus la volumétrie sera importante, plus le positionnement des index sera vital ! Nous avons également fait du sharding de données (découpage horizontal) via un modulo afin de répartir les données ne nécessitant pas de requêtes ensemblistes sur plusieurs serveurs et permettre de meilleurs temps de réponse et la possibilité d’une meilleure montée en charge.
Une couche de cache gérée par Memcached pour soulager les bases des données les plus souvent accédées…
Et voilà ! Un bref aperçu de la partie qui nous a probablement pris le plus de temps et qu’il est bien souvent nécessaire d’optimiser, une fois les grands axes retenus, au fil de la montée en charge de l’application.
Security Groups
Une fois les logiciels sélectionnés, il faut mettre en place les groupes de sécurité AWS. Ces groupes vont permettre de limiter les interactions des machines entre elles mais aussi de restreindre les accès de l’extérieur. Un groupe de sécurité se paramètre « tout simplement » comme un firewall avec le protocole utilisé (udp, tcp, icmp, …), le port ou la plage de ports (1 à 65535) ouverts pour les ayants-droits définis soit par un couple « identifiant de compte AWS :groupe », soit par une adresse IP d’un réseau ou d’un host. Cela s’effectue au niveau de la console « Elastic Fox », comme beaucoup de paramétrages.
Exemples :
• le groupe « Load-Balancer » octroiera pour tcp sur le port 80 (HTTP) les IPs du réseau extérieur 0.0.0.0/0 ,
• le groupe « Web » octroiera pour tcp sur le port 80 (HTTP) les machines de mon compte AWS appartenant au groupe « Load-Balancer »,
• le groupe « SQL » octroiera pour tcp sur le port 3306 (MySQL) les machines de mon compte AWS appartenant au groupe « Web »,
• …
• tous les groupes octroieront pour tcp sur le port 22 (SSH) l’ IP extérieure de l’administrateur de l’infrastructure AWS x.x.x.x/32 ,
• tous les groupes octroieront pour udp sur le port 161 (SNMP) les machines de mon compte AWS appartenant au groupe « Monitoring ».
Attention : une fois un EC2 démarré dans un groupe, il n’est pas possible d’en changer, c’est pour cela qu’il est important d’avoir défini les groupes au préalable. C’est de plus un très bon exercice de réflexion afin de concevoir l’infrastructure.
De plus, une même instance peut appartenir à plusieurs groupes, par exemple un EC2 hébergeant un MySQL et un Memcached appartiendra au groupe définissant les règles d’accès aux serveurs MySQL et à celui définissant les règles d’accès aux serveurs Memcached. Cela permet une structuration et une granularité/découpage des règles par fonctionnalités.
Les 2 dernières règles précédentes pourront donc s’écrire :
• toutes les machines appartiendront à un groupe supplémentaire qui octroiera pour tcp sur le port 22 (SSH) l’ IP extérieure de l’administrateur de l’infrastructure AWS x.x.x.x/32 ,
• toutes les machines appartiendront à un groupe supplémentaire qui octroiera pour udp sur le port 161 (SNMP) les machines de mon compte AWS appartenant au groupe « Monitoring ».
Comme précisé, cela permet de découper la sécurité par fonctionnalité.
Il est à noter également que les modifications des règles de sécurité d’un groupe donné sont instantanées.
Ressources et pricing
L’étape suivante est de définir les ressources dont nous aurons besoin pour l’application en termes de puissance et de stockage. Etablir une prévision de l’utilisation des ressources est indispensable afin d’avoir une vision claire des coûts sur le mois, les coûts horaires/trafic ne permettant pas cette vue d’ensemble. Il faut prendre en compte le coût fixe (facilement prédictible) des ressources et également les coût associés au trafic réseau en effectuant une prévision qu’il sera possible d’ajuster en fonction de l’évolution de la fréquentation sur le site. Au final, une bonne feuille Excel résumera pleinement la situation sur le mois et à l’année.
Concernant la puissance (RAM, CPU, …), il est en effet important de prendre ce dont nous avons besoin et de ne pas surestimer les besoins, en effet le prix de chaque configuration dépendant des ressources associées. De plus sur ce genre d’infrastructure, il faut réfléchir en termes de scalabilité et donc de distribuer la charge sur X machines plus réduite que sur une trop importante afin d’avoir la possibilité de lisser au mieux la charge.
Je n’aborderai pas ici le sujet de la conception d’applications « complètement » distribuées, sujet qui n’est pas trivial, loin de là. Il est très peu commun (comprendre rare ;o)) de voir des applications distribuées à tous les niveaux permettant par simple multiplication du service (et des éléments sous-jacents) d’augmenter les capacités de réponse, bien souvent la source de données est un goulet d’étranglement non distribué. La distribution est à mon avis la clé de ce genre d’application mais engendre bien souvent un coût de conception bien trop important. Disons le autrement : nous n’avons pas pris l’habitude de réfléchir naturellement dans ce sens et n’avons pas de modèles/standards évidents et donc le coût de réflexion associé augmente…
Tadaaa !
Il ne vous reste plus qu’à lancer les instances EC2 à partir de la console « Elastic Fox » en sélectionnant l’AMI retenue (la vôtre ou une « standard »), en lui attribuant une configuration (m1.small, m1.large, m1.xlarge, c1.medium ou c1.xlarge), une clé de sécurité, une zone d’accessibilité et finalement un ou plusieurs groupes de sécurité. Il reste à récupérer 15 secondes plus tard le nom DNS public de la machine et à vous y connecter via un client SSH. Il vous sera également possible de démarrer un volume EBS en précisant sa taille en Go, sa zone d’accessibilité et éventuellement le snapshot à partir duquel il va être généré. Reste ensuite à associer le volume à une instance EC2 en précisant le nom du device qu’il prendra (par exemple « /dev/sdd »). Et voilà, c’est parti !
Il est très important de noter que chaque machine possède un nom DNS privé qu’il est indispensable d’utiliser pour une communication entre les machines car le trafic interne entre les EC2 n’est pas facturé contrairement au trafic entrant via le nom DNS public ou bien une « Elastic IP » ! Une erreur de configuration pourrait avoir comme conséquence une hausse des coûts inutile.
Conclusion
La conception d’une infrastructure sur AWS demande autant de réflexion que n’importe quelle infrastructure pour la mener à bien. Il faut bien comprendre les spécificités des services Amazon et plus généralement sa conception pour les utiliser au mieux. Cependant, une fois appréhendés, les AWS permettent de monter une infrastructure modulaire et performante en un minimum de temps puisque sortie des considérations logistiques, dynamique et réactive de part les possibilités en termes de scalabilité et pour des coûts correspondant à vos réels besoins.
Il reste à noter qu’il faut également suivre l’évolution des services Amazon qui proposent au fur et à mesure de nouvelles fonctionnalités intéressantes (voir par exemple http://aws.amazon.com/contact-us/new-features-for-amazon-ec2/) qui suivent la cinématique standard de diffusion privée, diffusion publique en beta puis diffusion publique. Il est nécessaire de se tenir informé afin d’avoir toujours une vue exhaustive des composants à disposition et d’utiliser au mieux les briques mises en place en standard.
Il reste à présent la mise en place d’une telle infrastructure et il convient pour un service hébergé de la sorte de mettre en place un certains nombres de composants en place afin d’automatiser et d’homogénéiser l’infrastructure. Cela fera l’objet de mon prochain post.
Frédéric FAURE


Ca y est, j’ai trouvé le temps de lire cet -encore- excellent post !
Deux questions et une remarque :
Tu dis que S3 est interzone dans une région donnée. Est-il possible d’échanger des données entre différentes régions ?
Les logiciels disponibles pour les AMI sont défini par Amazon ou est-il possible d’en installer des personnels ?
La remarque c’est que j’ai vu cet article sur une librairie java facilitant l’utilisation de S3 :
http://www.ibm.com/developerworks/java/library/j-s3/index.html?ca=dgr-jw22S3JetS3t&S_TACT=105AGX59&S_CMP=grjw22
Merci en tout cas pour ces articles, très bien écrits et très instructifs.
ChrYStophe
Merci ! :o)
« S3 est interzone » signifie que S3 permet d’échanger des données entre les zones d’accessibilités et donc à l’intérieur d’une région donnée. Les régions sont complètement hermétiques et aucun échange n’est possible. Le seul élément global est le compte utilisateur AWS qui a une vision sur l’ensemble des régions. A la connexion à ton compte, tu choisis donc la région souhaitée et l’ensemble des éléments que tu manipuleras est propre à celle-ci.
« Les logiciels disponibles pour les AMI sont défini par Amazon ou est-il possible d’en installer des personnels ? »
Les AMIs (Amazon Machine Image) sont en fait des templates d’OS avec potentiellement un certain nombre d’outils préinstallés, de configurations, … Une fois l’instance démarrée à base de ce template, libre à toi d’en faire ce que tu veux : désinstaller des éléments, en installer d’autres, … Les AMIs de bases sont distribuées par Amazon ou bien des éditeurs, mais tu peux enregistrer toi-même tes propres AMIs afin d’instancier d’autres machines identiques une fois que tu es satisfait de ta configuration et de tes installations !
Concernant S3, un certain nombre d’outils sont disponibles afin d’y accéder. S3, comme les autres services d’Amazon, est constitué de services Web. Tu peux donc développer un client qui fait appel aux services dans à peu près n’importe quel langage. J’utilise, par exemple, un outil en lignes de commande (s3cmd) dans mes instances EC2 afin d’effectuer des backups et un client graphique (« Amazon S3 Firefox Organizer » – S3Fox) à disposition des utilisateurs moins à l’aise ! ;ob
Excellent post ! Juste un point qui ne me semble pas clair, l’histoire de l’Elastic IP. Vous dites qu’on peut la mapper sur 2 instances d’une même zone, mais de quelle manière cela fonctionne-t-il, fail over ou alors il faut « activer » la redirection manuellement si une instance tombe ?
Il y a-t-il une solution de load balancing avec EC2 ? Comment fait-on pour gérer la charge avec AWS ?
Merci,
Un doublement du service dans 2 zones différentes doit être chapoté par une « Elastic IP » qu’il est possible de mapper à tel ou tel point d’entrée. Il est à noter qu’une « Elastic IP » peut être mappée sur 2 instances d’une même zone, bien sûr, afin de parer à la défaillance d’une instance (en point d’entrée) plutôt que d’une zone complète.
L’Elastic IP peut s’appliquer quelque soit le cas : pour assurer la disponibilité sur la défaillance d’une instance en point d’entrée ou d’une zone complète. Cela permet d’éviter le temps qu’une intervention correctrice ait lieu ou bien le temps d’une propagation DNS.
C’est en fait une IP publique et statique associée à un compte utilisateur Amazon (et pas à une instance) que l’on conserve jusqu’à temps que l’on choisisse de la relâcher.
Concernant l’activation, elle peut être manuelle, via interface graphique, ou bien programmée : un outil de monitoring peut vérifier régulièrement la disponibilité du point d’entrée. Sur détection d’un problème, il appelle le service web AWS et demande un remapping de l’Elastic IP sur une instance que vous aviez préalablement préparée et en attente ou, beaucoup mieux, une instance lancée à la volée en remplacement.
Concernant le LB, il y a effectivement une solution AWS : Elastic Load Balancing.
Vous avez également à disposition d’autres fonctionnalités comme Auto Scaling et Amazon CloudWatch.
Pour plus d’informations : Cf. Amazon EC2 features sur le site d’Amazon ou bien Comprendre l’offre Amazon Web Services en 20 min ! sur le blog Decrypt.
Bonjour et félicitation pour ce travail.
Je suis juste déçu de ne pas avoir trouvé cet article avant car il est vrai que mettre en place mon
application sur AWS et en comprendre le concept a été un peu compliqué.
J’aurais une question à vous poser.
Vous dîtes qu’il est possible d’enregistrer une AMI une fois que la configuration de notre instance nous convient.
Enregistrer son instance permettrait de démarrer une nouvelle instance avec la configuration enregistrer?
J’ai essayé les différentes méthodes présentent dans la documentation mais rien ne fonctionne.
Pourriez – vous m’éclairer là dessus?
Merci et encore bravo.
Grégory.
La manipulation (pour une AMI Linux) s’effectue en 3 étapes :
Création du bundle (AMI)
Sur votre instance à AMIser : ec2-bundle-vol -d /mnt –cert /etc/ec2/amitools/cert-ec2.pem –privatekey /root/.ssh/’la_cle_privee_aws_de_votre_instance_ec2 (que vous aurez à uploader sur la machine)‘ -u ‘id_compte_utilisateur_aws (owner ID sur Elasticfox)‘ -s 4096 -e /mnt,/tmp,/root/.ssh (ceci est un exemple de commande à customiser comme vous le souhaitez)
Upload du bundle (AMI) sur S3
Sur votre instance à AMIser : ec2-upload-bundle -b ‘nom_de_votre_bucket_s3 (que vous aurez préalablement créé, exemple : ami-fred)‘ -m /mnt/image.manifest.xml -a ‘votre_access_key‘ -s ‘votre_secret_key‘
Référencement de votre AMI
Sur Elasticfox, Images > Register AMI (+) : saisissez le path vers le manifest de votre AMI
Pour plus d’informations sur les options, les 2 commandes magiques : « ec2-bundle-vol –help » & « ec2-upload-bundle –help »
En espérant que cela vous aide.
Merci beaucoup pour votre réponse et pour votre aide.
C’est au niveau de l’étape 3 que je bloquais.
J’ai essayé et tout fonctionne correctement.
Mon AMI est désormais enregistrée.
Un grand merci à vous.
Apparemment un nouveau problème apparaît.
Lorsque j’essaie de lancer une instance de mon AMI référencée, impossible d’accéder au serveur en ssh ni en http (connexion interrompue).
Cela peut il venir d’un problème lors du bundle ou de l’upload?
Merci pour votre aide.
Si vous n’accédez pas à votre instance EC2 démarrée depuis votre AMI, ni en SSH (port 22), ni en HTTP (port 80), c’est que :
- soit les connexions sont bloquées sur ces ports sur votre proxy en sortie,
- soit le security group dans lequel vous avez démarré votre AMI n’a pas ces ports d’ouverts pour votre IP source,
- soit que vous aviez modifié la configuration de vos serveurs HTTP et SSH de manière à ce qu’ils ne démarrent pas automatiquement (peu probable, et dans ce cas vous pouvez jeter votre AMI).
Bonjour et merci pour votre réponse.
Le problème semble venir d’ailleurs car j’ai le même problème sur d’autre AMI de base.
Problème inexistant auparavant.
Peut être un problème de certificat ou clé privé.
Je vais chercher de ce côté là.
En tout cas merci pour votre aide.
Bonjour.
Le problème venait du bundle qui contenait une erreur.
Désormais tout fonctionne et je peux lancer l’AMI enregistrée sans problème.
Merci beaucoup pour l’ensemble de votre aide.
Bonjour
Bravo pour vos articles sur ec2 , je suis un bleu dans ce domaine , je ne connaissais que le nom « cloud computing » , et je vais devoir m’y mettre des la semaine prochaine , alors trouver quelqu’un qui explique , non pas seulement les bases , mais aussi sa propre experience je trouve ca genial !!!!!!
Merci et que la force des nuages soit avec vous !!!