<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Decrypt &#187; Capistrano</title>
	<atom:link href="http://decrypt.ysance.com/tag/capistrano/feed/" rel="self" type="application/rss+xml" />
	<link>http://decrypt.ysance.com</link>
	<description>Le site de decryptage des technologies de l&#039;informatique</description>
	<lastBuildDate>Fri, 03 Feb 2012 08:25:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Plus loin dans l’automatisation avec le DNS</title>
		<link>http://decrypt.ysance.com/2012/01/plus-loin-dans-l%e2%80%99automatisation-avec-le-dns/</link>
		<comments>http://decrypt.ysance.com/2012/01/plus-loin-dans-l%e2%80%99automatisation-avec-le-dns/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:55:31 +0000</pubDate>
		<dc:creator>Laurent Roux</dc:creator>
				<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Haute Disponibilité]]></category>
		<category><![CDATA[Industrialisation]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2727</guid>
		<description><![CDATA[Dans le monde élastique du Cloud et plus précisément en ce qui concerne l’IaaS, nous nous heurtons souvent au problème : “quelle est l’adresse de telle machine, quel est son mode d’accès...”. A ces questions peuvent s’ajouter la problématique du tout automatique via un <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a> par exemple. Vous me direz qu’il existe une console Web et des API. Oui mais la console n’est pas réellement exploitable pour l’automatisation et les API ont besoin de crédentials que l’on ne préfère pas disséminer partout sur les serveurs.

Le but de cet article est de montrer comment avoir un référentiel des instances disponibles sur un compte Amazon (ou autre) avec toutes les informations qui vont bien sans devoir utiliser la console web Amazon. Cette solution permet de pousser l’automatisation un cran plus loin en proposant une liste exhaustive que l’on peut automatiser et la possibilité d’avoir une liste des serveurs disponibles en une ligne de commande pour n’importe quel Devops allergique aux opérations sur navigateur web.

[...]
]]></description>
			<content:encoded><![CDATA[<p>Dans le monde élastique du Cloud et plus précisément en ce qui concerne l’IaaS, nous nous heurtons souvent au problème : “quelle est l’adresse de telle machine, quel est son mode d’accès&#8230;”. A ces questions peuvent s’ajouter la problématique du tout automatique via un <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a> par exemple. Vous me direz qu’il existe une console Web et des API. Oui mais la console n’est pas réellement exploitable pour l’automatisation et les API ont besoin de crédentials que l’on ne préfère pas disséminer partout sur les serveurs.</p>
<p>Le but de cet article est de montrer comment avoir un référentiel des instances disponibles sur un compte Amazon (ou autre) avec toutes les informations qui vont bien sans devoir utiliser la console web Amazon. Cette solution permet de pousser l’automatisation un cran plus loin en proposant une liste exhaustive que l’on peut automatiser et la possibilité d’avoir une liste des serveurs disponibles en une ligne de commande pour n’importe quel Devops allergique aux opérations sur navigateur web.</p>
<p>Dans le but de rester élastique dans la démarche, nous allons utiliser deux fonctionnalités DNS des plus intéressantes qui sont :</p>
<li>les requêtes nsupdate</li>
<li>les requêtes AXFR</li>
<p>Nous allons aussi nous aider des API Amazon et tout ça dans un environnement Linux. Notre DNS va donc servir de base de données pour référencer les machines via leurs IP privées.</p>
<h4>Liste des pré-requis</h4>
<p>Un serveur T1-Micro sur Amazon servant de DNS est largement suffisant. Le package BIND9 doit être installé. Sachant que sur une infrastructure nous préférons utiliser des noms à la place des IP, l’utilisation d’un DNS est fortement conseillée. De plus, la configuration des différents éléments techniques d’une plate-forme est nettement plus souple en utilisant des noms.</p>
<h4>Configuration</h4>
<p>Pour effectuer des requêtes nsupdate sur un DNS il faut autoriser les IP des machines qui ont le droit d&#8217;émettre ces requêtes vers notre DNS (nsupdate et axfr). Ensuite il faut placer les bases du DNS (fichiers db.xxx) dans un endroit ou le process bind a le droit d’écrire. Pour des raisons de sécurité, il est hors de question que ce process puisse avoir un accès en écriture dans le répertoire /etc/ nous allons donc déplacer ces fichiers dans /var/cache/bind/.</p>
<h4>Elements de Configuration DNS</h4>
<p>Dans le fichier named.conf.local dans la section de la zone que nous voulons contrôler il faut ajouter l’ip de la machine autorisée à faire les requêtes nsupdate :</p>
<blockquote><p>allow-update { xxx.xxx.xxx.xxx; };</p></blockquote>
<p>Les requêtes AXFR sont autorisées dans ce même fichier de configuration en ajoutant l’ip des serveurs autorisés dans la sections “allow-transfer” de la zone.<br />
Dans cette même section nous allons déplacer le fichier de la zone en modifiant son chemin :</p>
<blockquote><p>file &laquo;&nbsp;/var/cache/bind/db.xxxx.yyyy&nbsp;&raquo;;</p></blockquote>
<h4>Démarche</h4>
<p>Une fois cette opération réalisée nous pouvons utiliser les API Amazon pour récupérer les informations qui concernent une instance (par exemple, nous utiliserons ec2-describe-instances dont la documentation est à l’adresse suivante :  <a title="Site de Amazon Web Services, AWS Documentation - ec2-describe-instances" href="http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeInstances.html">DOC API</a>).<br />
Les informations que nous allons récupérer (security groupes, Key, EBS ID&#8230;..), vont être réorganisées pour ensuite être injectées dans le DNS sous la forme d’enregistrements TXT en plus de l’enregistrement A utilisé pour référencer une adresse.<br />
Pour réaliser une mise à jour automatique du DNS il est préférable d’exécuter une instruction de “delete” avant l’ajout d’un enregistrement. Vu que nous sommes sur un DNS qui sera utilisé pour les zones de notre infrastructure nous allons prendre en compte les trois enregistrements suivants :</p>
<li>le forward record, qui fait correspondre un nom à une ip.</li>
<li>le reverse record, qui fait correspondre une ip à un nom.</li>
<li>le text record, qui va nous permettre d’enregistrer les informations sur l’instance.</li>
<p>Pour enlever les enregistrements précédents (dans le cas ou le serveur est déjà référencé ou pour enlever le serveur).</p>
<blockquote><p>nsupdate<br />
&gt; server monserverdns.domain.com<br />
&gt; zone domain.net<br />
&gt; update delete monserver.domain.net A<br />
&gt; update delete monserver.domain.net TXT<br />
&gt; update delete zzz.yyy.xxx.www.in-addr.arpa. PTR<br />
&gt; send</p></blockquote>
<p>Ensuite on enregistre le serveur.</p>
<blockquote><p>nsupdate<br />
&gt; server monserverdns.domain.com<br />
&gt; zone domain.net<br />
&gt; update add monserver.domain.net 86400 IN A www.xxx.yyy.zzz<br />
&gt; update add monserver.domain.net 86400 IN TXT informations sur le serveur<br />
&gt; update add zzz.yyy.xxx.www.in-addr.arpa 86400 IN PTR monserver.domain.net.<br />
&gt; send</p></blockquote>
<p>Nous partons du principe que le DNS est bien déclaré au niveau du fichier /etc/resolv.conf.</p>
<p>Une fois tous les enregistrements en place il suffit de passer la commande suivante pour que la liste apparaisse :</p>
<blockquote><p>dig @ip_du_dns axfr domain.net</p>
<p>sh-3.2# dig @10.211.55.5 axfr test.net<br />
; &lt;&lt;&gt;&gt; DiG 9.7.3-P3 &lt;&lt;&gt;&gt; @10.211.55.5 axfr test.net;<br />
(1 server found)<br />
;; global options: +cmd<br />
test.net.		604800	IN	SOA	dns. root.test.net. 4 604800 86400 2419200 604800<br />
test.net.		604800	IN	NS	dns.<br />
test.net.		604800	IN	A	10.211.55.5<br />
test.net.		604800	IN	AAAA	::1<br />
s1.test.net.		86400	IN	A	1.2.3.4<br />
s1.test.net.		86400	IN	TXT	&laquo;&nbsp;tout&nbsp;&raquo; &laquo;&nbsp;ce&nbsp;&raquo; &laquo;&nbsp;que&nbsp;&raquo; &laquo;&nbsp;l&nbsp;&raquo; &laquo;&nbsp;on&nbsp;&raquo; &laquo;&nbsp;peut&nbsp;&raquo; &laquo;&nbsp;dire&nbsp;&raquo; &laquo;&nbsp;sur&nbsp;&raquo; &laquo;&nbsp;un&nbsp;&raquo; &laquo;&nbsp;serveur&nbsp;&raquo;<br />
test.net.		604800	IN	SOA	dns. root.test.net. 4 604800 86400 2419200 604800<br />
;; Query time: 19 msec<br />
;; SERVER: 10.211.55.5#53(10.211.55.5)<br />
;; WHEN: Mon Jan  9 16:03:56 2012<br />
;; XFR size: 7 records (messages 1, bytes 237)</p></blockquote>
<p>Nous touchons au but. Il suffit maintenant d&#8217;exécuter la même commande avec un grep sur “TXT” pour récupérer la liste qui nous intéresse.</p>
<p>Avec la commande suivante nous allons enlever l’enregistrement TXT du DNS :</p>
<blockquote><p>nsupdate<br />
&gt; server monserverdns.test.com<br />
&gt; zone test.net<br />
&gt; update delete monserver.test.net TXT<br />
&gt; send</p></blockquote>
<blockquote><p>sh-3.2# dig @10.211.55.5 axfr test.net<br />
; &lt;&lt;&gt;&gt; DiG 9.7.3-P3 &lt;&lt;&gt;&gt;<br />
@10.211.55.5 axfr test.net;<br />
(1 server found);;<br />
global options: +cmd<br />
test.net.		604800	IN	SOA	dns. root.test.net. 5 604800 86400 2419200 604800<br />
test.net.		604800	IN	NS	dns.<br />
test.net.		604800	IN	A	10.211.55.5<br />
test.net.		604800	IN	AAAA	::1<br />
s1.test.net.		86400	IN	A	1.2.3.4<br />
test.net.		604800	IN	SOA	dns. root.test.net. 5 604800 86400 2419200 604800<br />
;; Query time: 2 msec<br />
;; SERVER: 10.211.55.5#53(10.211.55.5)<br />
;; WHEN: Mon Jan  9 16:15:30 2012<br />
;; XFR size: 6 records (messages 1, bytes 183)</p></blockquote>
<p>Nous avons donc une base de données (le serveur DNS) qui va nous servir de référence pour y placer toutes les informations des instances tirées des API Amazon.<br />
Cet article n’aborde pas le côté sécurité de bind et ne fait donc pas référence à la gestion de clé pour les requêtes nsupdate.</p>
<p><em><strong>Laurent ROUX</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/01/plus-loin-dans-l%e2%80%99automatisation-avec-le-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automation on AWS with Ruby and Puppet</title>
		<link>http://decrypt.ysance.com/2011/06/automation-on-aws-with-ruby-and-puppet/</link>
		<comments>http://decrypt.ysance.com/2011/06/automation-on-aws-with-ruby-and-puppet/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 15:33:57 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[UrbanDive]]></category>
		<category><![CDATA[XTR-Lucid]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2459</guid>
		<description><![CDATA[<img class="size-full wp-image-2465 alignright" title="Logo UrbanDive" src="http://decrypt.ysance.com/wp-content/uploads/2011/06/urbandive.png" alt="Logo UrbanDive" width="141" height="141" />

<a title="UrbanDive" href="http://www.urbandive.com">Urbandive</a> is an immersive view service launched by the <a title="Groupe Pages Jaunes" href="http://www.pagesjaunesgroupe.com/">French YellowPages</a> which allows you to travel in cities in France thanks to a 360° view. Urbandive focuses on providing high definition pictures and accurate professional and social content. One of the biggest jobs was to enable a fast scalable architecture, because it was really difficult to forecast the traffic load at production time. Traffic load may be influenced if the service receives attention from users as a result of advertising.

Below you will find a summary of the goals we achieve by using a Ruby scheduler built on top of <a title="Puppet Labs" href="http://www.puppetlabs.com/">Puppet</a> on <a title="Amazon Web Services" href="http://aws.amazon.com/">AWS</a> to create a complete infrastructure.

<strong><em>Workflow &#38; XTR-Lucid</em></strong>
Our scalability combo is : a home-made Ruby scheduler (<em>XTR-Lucid</em>) to deal with AWS APIs + the Puppet Master to install services and configure EC2 instances and keep them up-to-date during all the production time. This leads to full automation.

Here is the workflow (for the <span style="text-decoration: underline;">creation step</span>, there are other workflows for stop/reboot/health-check/...) of our automation tool. The dashboard allows you to select a template (which contains the following informations : AMI id, instance type, availability zone, key, list of security groups, list of EBS - from snapshots or not -, ...) and to set a name for the instance in the "create" workflow.

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2465 alignright" title="Logo UrbanDive" src="http://decrypt.ysance.com/wp-content/uploads/2011/06/urbandive.png" alt="Logo UrbanDive" width="141" height="141" /></p>
<p><a title="UrbanDive" href="http://www.urbandive.com">Urbandive</a> is an immersive view service launched by the <a title="Groupe Pages Jaunes" href="http://www.pagesjaunesgroupe.com/">French YellowPages</a> which allows you to travel in cities in France thanks to a 360° view. Urbandive focuses on providing high definition pictures and accurate professional and social content. One of the biggest jobs was to enable a fast scalable architecture, because it was really difficult to forecast the traffic load at production time. Traffic load may be influenced if the service receives attention from users as a result of advertising.</p>
<p>Below you will find a summary of the goals we achieve by using a Ruby scheduler built on top of <a title="Puppet Labs" href="http://www.puppetlabs.com/">Puppet</a> on <a title="Amazon Web Services" href="http://aws.amazon.com/">AWS</a> to create a complete infrastructure.</p>
<p><strong><em>Workflow &amp; XTR-Lucid</em></strong><br />
Our scalability combo is : a home-made Ruby scheduler (<em>XTR-Lucid</em>) to deal with AWS APIs + the Puppet Master to install services and configure EC2 instances and keep them up-to-date during all the production time. This leads to full automation.</p>
<p>Here is the workflow (for the <span style="text-decoration: underline;">creation step</span>, there are other workflows for stop/reboot/health-check/&#8230;) of our automation tool. The dashboard allows you to select a template (which contains the following informations : AMI id, instance type, availability zone, key, list of security groups, list of EBS &#8211; from snapshots or not -, &#8230;) and to set a name for the instance in the &laquo;&nbsp;create&nbsp;&raquo; workflow.</p>
<p><img class="size-full wp-image-2472" title="Automatisation AWS XTR-Lucid Puppet" src="http://decrypt.ysance.com/wp-content/uploads/2011/06/Automatisation-AWS-PuppetLabs.png" alt="Automatisation AWS XTR-Lucid Puppet" width="960" height="720" /></p>
<p>This schema gives the general idea of how it works.</p>
<p>To be more accurate and to explain the workflow just a bit :</p>
<ul>
<li>The scheduler can be outside or inside of AWS.</li>
<li>First an <em>action file</em> is put into the <em>TODO </em>directory, by the web application (simple <em>rhtml </em>dashboard) or by the monitoring tool directly. For posting files from the monitoring tool, we will have to define thresholds after some weeks of use of the application. At this time, we have not enough data feedback as we just commenced production.</li>
<li>The action file is then processed by the scheduler :</li>
</ul>
<ol>
<li>Connection to AWS and request to start an EC2 instance from the AMI.</li>
<li>Scheduler checks that instance is running, EBS (Elastic Block Store) are <em>available</em>, then <em>in-use</em>, and eventually that EC2 TCP stack is up and SSH is OK. Then it connects to the brand-new instance.</li>
<li>Puppet client is installed and started, so it sends a certificate request to the master.</li>
<li>Puppet client is stopped to avoid any interaction.</li>
<li>Connection to the PuppetMaster : update the main files (nodes files of PuppetMaster, &laquo;&nbsp;/etc/hosts&nbsp;&raquo; file, roles file of Capistrano) and then accept the certificate request of the client.</li>
<li>Capistrano updates the &laquo;&nbsp;/etc/hosts&nbsp;&raquo; file on all instances of our infrastructure as soon as a new EC2 instance comes up (or down), without having to trigger (<em>puppetrun</em>) the simultaneous &laquo;&nbsp;pull configuration&nbsp;&raquo; of all the Puppet clients.</li>
<li>Connection to the new instance.</li>
<li>Puppet client is started.</li>
<li>Puppet client connects to the master and authenticate. Then it gets what it needs to install and configure the new instance.</li>
<li>The installation occurs on the new instance that will be soon available.</li>
</ol>
<ul>
<li>The scheduler doesn&#8217;t wait until the instance is fully configured to end the task : installation by Puppet is asynchronous. The scheduler just ends by updating its repository and the monitoring tool.</li>
</ul>
<p><span style="text-decoration: underline;">Technical note 1 :</span> we use <a title="Capistrano" href="http://www.capify.org/">Capistrano</a> mainly for application deployment. In the above case (<em>create instance</em>), we use it to update the &laquo;&nbsp;/etc/hosts&nbsp;&raquo; file on all instances of our infrastructure as soon as a new EC2 instance comes up (or down &#8211; it is the same use for <em>stop instance</em>), without having to trigger (<em>puppetrun</em>) the simultaneous &laquo;&nbsp;pull configuration&nbsp;&raquo; of all the Puppet clients (bad idea ;ob). That&#8217;s just a little tip for this workflow.</p>
<p><span style="text-decoration: underline;">Technical note 2 :</span> the Ruby scheduler works in asynchronous mode (for security reasons &amp; to be called by other tools &#8211; like a monitoring one) by creating <em>action files</em> from the web application in the <em>TODO </em>directory (which can be filled by the monitoring tool for auto-scalability) checked every minute by a CRON which calls the heart of the automation tool.</p>
<p><strong><em>Technical facts</em></strong></p>
<ul>
<li>We have actually 40 &#8211; 50 servers, that&#8217;s our base, but we probably will go higher when the traffic will come with marketing campaigns.</li>
<li>We use Lucid Lynx Ubuntu OS (from a standard AMI powered by <a title="Canonical" href="http://www.canonical.com/">Canonical</a>).</li>
<li>We use the PuppetMaster installed on <a title="Apache" href="http://httpd.apache.org/">Apache</a> with <a title="Phusion Passenger" href="http://www.modrails.com/">Phusion Passenger</a> to increase performances.</li>
<li>We took Puppet (standard version) right from the Ubuntu repositories packaged in the AMI.</li>
</ul>
<p><strong><em>Why using Puppet (and especially on AWS) ?</em></strong><br />
<span style="text-decoration: underline;"> Consistency &amp; Flexibility</span><br />
We have multiple services, so we need to be sure that each group of servers is consistent in terms of configuration. If we need to push a quick change on all nodes of a type at a given time, we can even push (trigger &laquo;&nbsp;pull&nbsp;&raquo;, to be more accurate, with <em>puppetrun</em>) this new setting from the PuppetMaster without waiting the pull of Puppet client (30min period) and we are sure that this one is pushed everywere it is needed.<br />
AWS offer AMIs to &laquo;&nbsp;snapshot&nbsp;&raquo; an instance and clone this one as many as we want. This is very good for developpement, load tests, .. But when we come into production, we cannot build another AMI each time we do a change on a setting and deploy again EC2 instances from the new AMI. We need something flexible to patch our configurations quickly, keeping consistency at all times.</p>
<p><span style="text-decoration: underline;">Scalability &amp; Ease</span><br />
This is a new Internet service which can have a load peak at anytime depending on marketing campaigns. But we have to deal with financial things too. So we keep a base and have to start quickly full configured up-to-date instances within a few minutes. We achieve this by writing a home-made ruby-script-based scheduler (<em>XTR-Lucid</em>) that deals with AWS APIs to launch/stop EC2, add EBS (empty or from snapshot), add/remove to/from ELB, add/delete the new/old host to/from our monitoring tool, &#8230; AWS EC2 instances are kept in a repository on our Ruby scheduler. Then our tool lets Puppet take over which ensures for each brand-new instance started from a standard Lucid Lynx AMI that all services, configurations, security rules are installed/applied. So with the feedback of our monitoring tool, the infrastructure can grow and decrease alone (depending on the thresholds set) or we can deploy and stop instances in just one click on our web dashboard.</p>
<p><span style="text-decoration: underline;">Operating</span><br />
In such a project, there is a lot of various services to monitor for the Ops team (And&#8230; Yes ! Ops team is always essential, even with automated infrastructure ! :o)). So this is important to capitalize upon knowledge in Puppet descriptors and XTR-Lucid repository and templates, so that by simply reading the descriptors/repository/templates, the whole team knows all what it needs to know at a glance (no need to look everywhere). Things become a lot easier.</p>
<p><span style="text-decoration: underline;">Portable Infrastructure</span><br />
Because of the diversity of services run in the project, maybe not all will fit into AWS in a long term experience (over one year). Once we have real-life feedback on traffic, some services will stay on AWS, others, maybe, will migrate into our physical datacenter. So it will be easier to migrate because all the configuration is concentrated in Puppet descriptors. This enables us to re-deploy easily a brand-new infrastructure on another plateform (even if it is not in the Cloud).</p>
<p>I hope you enjoyed this. You can find here some more information on the way the Ops job is evolving, based on this experience (among others) : <a title="Decrypt, Solutions Linux / Open Source 2011 – Le métier de l’Administration Système avec le Cloud Computing" href="http://decrypt.ysance.com/2011/05/solutions-linux-open-source-2011-le-metier-de-l-administration-systeme-avec-le-cloud-computing/">Solutions Linux / Open Source 2011 – Le métier de l’Administration Système avec le Cloud Computing</a> (FR). These slides are the ones used for a talk I gave at Solution Linux 2011 (France).</p>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2011/06/automation-on-aws-with-ruby-and-puppet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Solutions Linux / Open Source 2011 &#8211; Le métier de l&#8217;Administration Système avec le Cloud Computing</title>
		<link>http://decrypt.ysance.com/2011/05/solutions-linux-open-source-2011-le-metier-de-l-administration-systeme-avec-le-cloud-computing/</link>
		<comments>http://decrypt.ysance.com/2011/05/solutions-linux-open-source-2011-le-metier-de-l-administration-systeme-avec-le-cloud-computing/#comments</comments>
		<pubDate>Thu, 12 May 2011 16:10:57 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Administration Système]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Solutions Linux 2011]]></category>
		<category><![CDATA[UrbanDive]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2322</guid>
		<description><![CDATA[<img class="size-full wp-image-2408 alignright" title="Solutions Linux / Open Source 2011" src="http://decrypt.ysance.com/wp-content/uploads/2011/05/SolutionsLinux2011.png" alt="Solutions Linux / Open Source 2011" width="260" height="68" />

De retour du <a title="Solutions Linux / Open Source" href="http://www.solutionslinux.fr/">salon Solutions Linux / Open Source 2011</a> (salon professionnel annuel dédié aux logiciels et solutions libres pour les entreprises), je publie les slides que j'ai présentés en compagnie d'Omer SHALA (Mappy) lors d'une des conférences du salon ayant pour sujet le Cloud Computing. Cette présentation porte sur l'évolution du métier de l'Administration Système avec l'utilisation du Cloud Computing. Nous avons pris comme support notre expérience du projet <a title="UrbanDive" href="http://www.urbandive.com/">UrbanDive</a>, le nouveau service de vue immersive en zone urbaine du groupe PagesJaunes.

Omer SHALA, responsable de l'infrastructure du projet, a tout d'abord exposé le contexte du projet, puis a expliqué les éléments de décision qui nous ont amené à choisir le Cloud Computing (et en l'occurrence les <a title="Site de Amazon Web Services" href="http://aws.amazon.com/">Amazon Web Services</a> - AWS) pour mettre en place nos services. Il a finalement fait une synthèse de son expérience de la mise en place de cette infrastructure avec les services d'Amazon (de type IaaS - Infrastructure as a Service), par rapport à ses expériences avec des infrastructures plus classiques (en datacenter) au sein du groupe PagesJaunes.

J'ai repris la seconde partie de la conférence et ai exposé ma vision de l'évolution de l'administration système avec l'utilisation de solutions de type Iaas. Pour finir, j'ai présenté ce que nous avons mis en place pour optimiser le potentiel des services Amazon, notamment via l'automatisation :
<ul>
	<li>avec le développement d'un ordonnanceur Ruby (<em>XTR-Lucid</em>) pour interfacer les APIs proposées par Amazon et gérer les cinématiques de communication (création/suppression d'instances métier EC2 et disque réseaux EBS, déploiement des services, ...) avec les AWS,</li>
	<li>avec l'utilisation d'outils Open Source comme le gestionnaire de configuration centralisé <a title="Site de PuppetLabs" href="http://www.puppetlabs.com/">Puppet</a> ou bien le scripteur/exécuteur de tâches <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a>.</li>
</ul>

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2408 alignright" title="Solutions Linux / Open Source 2011" src="http://decrypt.ysance.com/wp-content/uploads/2011/05/SolutionsLinux2011.png" alt="Solutions Linux / Open Source 2011" width="260" height="68" /></p>
<p>De retour du <a title="Solutions Linux / Open Source" href="http://www.solutionslinux.fr/">salon Solutions Linux / Open Source 2011</a> (salon professionnel annuel dédié aux logiciels et solutions libres pour les entreprises), je publie les slides que j&#8217;ai présentés en compagnie d&#8217;Omer SHALA (Mappy) lors d&#8217;une des conférences du salon ayant pour sujet le Cloud Computing. Cette présentation porte sur l&#8217;évolution du métier de l&#8217;Administration Système avec l&#8217;utilisation du Cloud Computing. Nous avons pris comme support notre expérience du projet <a title="UrbanDive" href="http://www.urbandive.com/">UrbanDive</a>, le nouveau service de vue immersive en zone urbaine du groupe PagesJaunes.</p>
<p>Omer SHALA, responsable de l&#8217;infrastructure du projet, a tout d&#8217;abord exposé le contexte du projet, puis a expliqué les éléments de décision qui nous ont amené à choisir le Cloud Computing (et en l&#8217;occurrence les <a title="Site de Amazon Web Services" href="http://aws.amazon.com/">Amazon Web Services</a> &#8211; AWS) pour mettre en place nos services. Il a finalement fait une synthèse de son expérience de la mise en place de cette infrastructure avec les services d&#8217;Amazon (de type IaaS &#8211; Infrastructure as a Service), par rapport à ses expériences avec des infrastructures plus classiques (en datacenter) au sein du groupe PagesJaunes.</p>
<p>J&#8217;ai repris la seconde partie de la conférence et ai exposé ma vision de l&#8217;évolution de l&#8217;administration système avec l&#8217;utilisation de solutions de type Iaas. Pour finir, j&#8217;ai présenté ce que nous avons mis en place pour optimiser le potentiel des services Amazon, notamment via l&#8217;automatisation :</p>
<ul>
<li>avec le développement d&#8217;un ordonnanceur Ruby (<em>XTR-Lucid</em>) pour interfacer les APIs proposées par Amazon et gérer les cinématiques de communication (création/suppression d&#8217;instances métier EC2 et disque réseaux EBS, déploiement des services, &#8230;) avec les AWS,</li>
<li>avec l&#8217;utilisation d&#8217;outils Open Source comme le gestionnaire de configuration centralisé <a title="Site de PuppetLabs" href="http://www.puppetlabs.com/">Puppet</a> ou bien le scripteur/exécuteur de tâches <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a>.</li>
</ul>
<p>Je vous laisse visionner cette présentation en dessous !</p>
<p>Nous avons également inclus dans cette présentation la <strong>matrice de décision</strong> sur laquelle nous nous sommes basés <strong>pour décider de l&#8217;adoption du Cloud Computing</strong> pour la mise en place de l&#8217;infrastructure.</p>
<div style="width:595px" id="__ss_7936569"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/fredericfaure/solutions-linux-2011-evolution-mtier-admin-sys-avec-le-cloud-computing" title="Solutions Linux 2011 - Evolution Métier Admin Sys avec le Cloud Computing">Solutions Linux 2011 &#8211; Evolution Métier Admin Sys avec le Cloud Computing</a></strong> <object id="__sse7936569" width="595" height="497"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=solutionslinux2011-evolutionadminsyscloudcomputing-ffa-osh-110512045127-phpapp01&#038;stripped_title=solutions-linux-2011-evolution-mtier-admin-sys-avec-le-cloud-computing&#038;userName=fredericfaure" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7936569" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=solutionslinux2011-evolutionadminsyscloudcomputing-ffa-osh-110512045127-phpapp01&#038;stripped_title=solutions-linux-2011-evolution-mtier-admin-sys-avec-le-cloud-computing&#038;userName=fredericfaure" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="595" height="497"></embed></object></div>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2011/05/solutions-linux-open-source-2011-le-metier-de-l-administration-systeme-avec-le-cloud-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaling an AWS infrastructure 1/2 : the tools</title>
		<link>http://decrypt.ysance.com/2010/08/scaling-an-aws-infrastructure-1-the-tools/</link>
		<comments>http://decrypt.ysance.com/2010/08/scaling-an-aws-infrastructure-1-the-tools/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 11:52:53 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[Métrologie]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Supervision]]></category>
		<category><![CDATA[Syslog-NG]]></category>
		<category><![CDATA[Webistrano]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=1488</guid>
		<description><![CDATA[<img class="size-full wp-image-510 alignleft" title="Logo AWS" src="http://decrypt.ysance.com/wp-content/uploads/2009/08/logo_aws.gif" alt="Logo AWS" width="164" height="60" />

How do you scale an <a title="Site de Amazon Web Services" href="http://aws.amazon.com/">AWS</a> (Amazon Web Services) infrastructure? This article will give you a detailed reply in two parts: the tools you can use to make the most of Amazon’s dynamic approach, and the architectural model you should adopt for a scalable infrastructure. I base my report on my experience gained in several AWS production projects in casual gaming (Facebook), e-commerce infrastructures and within the mainstream GIS (Geographic Information System). It’s true that my experience in gaming (<a title="IsCool, The Game" href="http://apps.facebook.com/is_cool/">IsCool, The Game</a>) is currently the most representative in terms of scalability, due to the number of users (over 800 thousand DAU - daily active users - at peak usage and over 20 million page views every day), however my experiences in e-commerce and GIS (currently underway :o)) provide a different view of scalability, taking into account the various problems of availability and data management. I will therefore attempt to provide a detailed overview of the factors to take into account in order to optimise the dynamic nature of an infrastructure constructed in a Cloud Computing environment, and in this case, in the AWS environment.

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-510 alignleft" title="Logo AWS" src="http://decrypt.ysance.com/wp-content/uploads/2009/08/logo_aws.gif" alt="Logo AWS" width="164" height="60" /></p>
<p>How do you scale an <a title="Site de Amazon Web Services" href="http://aws.amazon.com/">AWS</a> (Amazon Web Services) infrastructure? This article will give you a detailed reply in two parts: the tools you can use to make the most of Amazon’s dynamic approach, and the architectural model you should adopt for a scalable infrastructure. I base my report on my experience gained in several AWS production projects in casual gaming (Facebook), e-commerce infrastructures and within the mainstream GIS (Geographic Information System). It’s true that my experience in gaming (<a title="IsCool, The Game" href="http://apps.facebook.com/is_cool/">IsCool, The Game</a>) is currently the most representative in terms of scalability, due to the number of users (over 800 thousand DAU &#8211; daily active users &#8211; at peak usage and over 20 million page views every day), however my experiences in e-commerce and GIS (currently underway :o)) provide a different view of scalability, taking into account the various problems of availability and data management. I will therefore attempt to provide a detailed overview of the factors to take into account in order to optimise the dynamic nature of an infrastructure constructed in a Cloud Computing environment, and in this case, in the AWS environment.</p>
<p><strong><em>The tools</em></strong><br />
I will provide examples of tools I used in my various production experiments and which won me over with their efficiency. However, it’s not so much the tools themselves which are emphasised, rather the underlying features that must be installed to fully exploit the AWS.</p>
<p><em><strong>What is the difference between an AWS and a standard infrastructure?</strong></em><br />
There are two replies:</p>
<ul>
<li>Firstly, the AWS enable the Hardware and Infrastructure components to be handled via the code (through the APIs): this gives them momentum which needs to be intensified by correctly selecting your tools. Amazon also offers a certain number of technical guarantees with their services, which should be used to full advantage in order to concentrate on what is essential.</li>
<li>The second answer should be: ‘None!’ However, it must be acknowledged that often the cosy aspects of &#8216;home’-hosted infrastructure can lead to a certain lack of rigor on many issues. The fact that Amazon, with its AWS, offers a dynamic and volatile solution for the EC2s, compels you to install mechanisms which should be standard.</li>
</ul>
<p><em><strong>Centralised configuration management</strong></em><strong><em><br />
</em></strong>In order to instantiate multiple servers (EC2) on the fly to counter a load peak or perform occasional procedures, we have to use a centralised configuration management tool. This has multiple uses:</p>
<ul>
<li>Rapid instantiation of a machine corresponding to a pre-defined type: Web server, cache server, etc.</li>
<li>Ensuring uniform configuration of the entire set of instances of the same type at all times.</li>
<li>Capitalising on the expertise: packages, configurations, services etc. for each type of instance are contained within a descriptor. This enables new users (and others) to learn the composition of the servers simply by reading the associated descriptor(s.)</li>
</ul>
<p><img class="size-full wp-image-890 alignright" title="Logo Puppet - Reductive Labs" src="http://decrypt.ysance.com/wp-content/uploads/2010/02/puppet-short.png" alt="Logo Puppet - Reductive Labs" width="151" height="44" /></p>
<p><a title="Site de Puppet" href="http://reductivelabs.com/">Puppet</a> is a very attractive solution for this task. Puppet architecture comprises:</p>
<ul>
<li>A Puppet Master, guardian of configurations. It contains the descriptors of the packages to be      installed, configuration files to be pushed and services to be started up for a new EC2 instance in order to prepare it according to the type of node or nodes with which you have associated it, or simply to keep an existing instance updated.</li>
<li>Multiple Puppet clients installed on EC2 instances. The client regularly polls the master to check that his configuration is up to date. It is also possible to trigger the clients from the master to initiate an urgent update.</li>
</ul>
<p>It is thus very simple to mount a new instance of a given type, and to be sure that from one server to another, the configuration is identical in every way. It should be noted that the Puppet Master descriptors run on a node system, and a server may reference more than one node. You will therefore obtain a very modular configuration.</p>
<div id="attachment_1310" class="wp-caption alignleft" style="width: 306px"><img class="size-medium wp-image-1310 " title="Puppet Module Descriptor" src="http://decrypt.ysance.com/wp-content/uploads/2010/06/puppet_type_node_def-296x300.png" alt="Puppet Module Descriptor" width="296" height="300" /><p class="wp-caption-text">Puppet Module Descriptor</p></div>
<p>The centralised configuration manager is indispensable on a scalable infrastructure, which can have a large number of instances, some of which should be mounted rapidly, in order to reply to user requests during load peak.</p>
<p>‘But’, you may say, ‘you <em>do</em> have to install the client on the new instance, don’t you?’ Oh yes, all the more so as there is a system of certificate request/acceptation between the client and the master, so that not just anybody can access the configurations. ‘There’s nothing simpler!’ I reply. Instead of using an HMI (Human Machine Interface) such as ElasticFox to connect to the Amazon services APIs, you need simply to connect with command lines via a script which instantiates an EC2, creates if necessary an EBS volume and associates it, connects with SSH on the new instance and installs the client, connects on the master and accepts the certificate request, reboots the client and ‘Bingo!’ The instance installs and configures itself. In general, the reactive and dynamic capacities inherent in EC2 and AWS require it, otherwise it would be an under-exploitation, or even a misuse of the tool.</p>
<p>And what about the AMIs (instance-store root devices) or the EBS root devices (note that for the latter there is not yet a great choice of templates)? It is however possible to build an AMI or even an EBS root device with the Puppet client installed on it (and to use, if necessary, the user-data at the launch of the instance in order to set the parameters if a ‘static’ configuration on the AMI is not sufficient). However, in a production environment, the AMI and the EBS root device do not allow you to replace a Puppet: if you have to modify the AMI every time you change the parameters and redeploy the EC2… you’ll never finish. The AMI is a good tool for instantiating a basic template, but not for maintaining a production infrastructure in good working order.</p>
<p>To sum up, it is even possible to envisage auto-scalability (a more complete service than the one offered by Amazon’s <a title="Site de  Amazon Web Services, Rubrique Auto Scaling" href="http://aws.amazon.com/autoscaling/">Auto Scaling</a>, based on <a title="Site de Amazon Web Services, Rubrique Amazon CloudWatch" href="http://aws.amazon.com/cloudwatch/">CloudWatch</a>), which would amount to starting up this script when a value on a monitoring graph (metrology) exceeds a threshold, thereby instantiating a new instance to weather the peak period, an instance which would be ‘terminated’ after dipping below another threshold on the aforementioned graph. The possibilities are enormous. However, the cost of the final elements to be installed on a large production infrastructure to access the auto-scalability function is considerable (exponential complexity). If you get the chance, it’s an excellent handiwork, otherwise you’ll have to ‘settle’ for an easily scalable solution whereby you simply launch a script manually (or else at a fixed time based on the study of the metrics produced by the metrology, which is a satisfactory alternative). If necessary, manually adding one or two references in a file is a perfectly reasonable alternative.</p>
<p><em><strong>Execution of automated tasks in parallel</strong></em><strong><em><br />
</em></strong>Because of the variation in the number of instances according to the load of a scalable infrastructure, and particularly in the potentially large number of these instances, you cannot envisage carrying out maintenance and deployment operations on an individual basis for each machine (or manually, which is even worse!). This would not only be too time-consuming, but would also lead to errors. It is therefore essential to use tools specialising in automation and parallel task execution, such as <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a>, which has numerous advantages:</p>
<ul>
<li>Scripting a certain number of tasks,      whether complex or not (deliveries, backups, site publication/maintenance,      etc.) executing them rapidly in parallel on X instances with a single      command.</li>
<li>Ensuring the reproducibility of a task.</li>
<li>Capitalise on know-how (Cf. Puppet).</li>
</ul>
<div id="attachment_1311" class="wp-caption alignnone" style="width: 654px"><img class="size-full wp-image-1311" title="Capistrano Task Descriptor" src="http://decrypt.ysance.com/wp-content/uploads/2010/06/cap_task.png" alt="Capistrano Task Descriptor" width="644" height="46" /><p class="wp-caption-text">Capistrano Task Descriptor</p></div>
<p><img class="size-medium wp-image-429 alignright" title="Logo Capistrano" src="http://decrypt.ysance.com/wp-content/uploads/2009/07/capistrano-logo-big-300x114.png" alt="Logo Capistrano" width="300" height="114" /></p>
<p>This tool is very practical and easy to use. It executes tasks in parallel (by connecting with SSH – don’t use the ‘root’ key of your EC2 instances in the tool, it’s classier to use a dedicated key…) on one or a group of servers defined by roles.</p>
<p>This tool should be used as a supplement to Puppet and not a replacement, as they do not have the same targets:</p>
<p><em><span style="text-decoration: underline;">Objective</span></em><br />
<span style="color: #339966;"><em>Puppet </em></span>- Uniform configuration of the server pool.<br />
<span style="color: #800080;"><em>Capistrano </em></span>– Task reproducibility and in-parallel execution.</p>
<p><em><span style="text-decoration: underline;">Operating mode</span></em><br />
<span style="color: #339966;"><em>Puppet </em></span>– Regular pull requests by clients (or even push from the master).<br />
<span style="color: #800080;"><em>Capistrano </em></span>- Occasional tasks (manual request or by cron).</p>
<p><em><span style="text-decoration: underline;">Orientation</span></em><br />
<span style="color: #339966;"><em>Puppet </em></span>- Pre-defined objects / notions such as ‘Package’, ‘Service’, ‘File’, etc.<br />
<span style="color: #800080;"><em>Capistrano </em></span>– Generic commands such as ‘upload’, ‘download’, ‘system’, ‘run’, etc.</p>
<p><em><span style="text-decoration: underline;">Target</span></em><br />
<span style="color: #339966;"><em>Puppet </em></span>- Infrastructure and services.<br />
<span style="color: #800080;"><em>Capistrano </em></span>- Services and applications.</p>
<p>Note that <a title="Site de Webistrano" href="http://labs.peritor.com/webistrano">Webistrano</a> is an HMI enabling access to the Capistrano features and introducing the notion of project management by managing access to the tasks according to profile, to trace who deployed what on which server and to send email signals in response to certain actions. I find this joint operation with project management very interesting.</p>
<p><strong><em>Monitoring</em></strong><br />
This is one of the crucial elements of a scalable architecture, if not the main one. It is essential to have the metrics to hand, precisely so you know when to scale. This enables you to identify the clogged points of the infrastructure, to analyse your site traffic and to make deductions about user behaviour. It also enables signals to be triggered.</p>
<p>The provision of metrics is more representative of metrology than of supervision. We will see that, in the context of an AWS infrastructure, metrology has greater added value than supervision (even if the latter remains indispensable). Speaking of which, there follows a clarification of the two monitoring disciplines that you need to recognise:</p>
<ul>
<li><strong>Supervision </strong>verifies the state of a host or a service and sends out an alarm upon detecting any abnormal behaviour (over-long response time, status NOK, etc.) and requires immediate action on the part of the interface partner concerned. An alarm must signify that the host or the service is unusable (critical) or may soon be (warning) and must not send back ‘simple information’ which would obstruct the visibility of real incidents.</li>
<li><strong>Metrology </strong>enables data to be archived, and if necessary, processed or filtered, before it is presented in the form of graphs or reports. This data enables corrections to service development or configuration to be carried out after the event, in order to optimise the aforementioned services, and equally to define the resources to be attributed to them in the most effective way. This aspect of monitoring is just as important, for it will enable the service to be improved (and thereby the users feedback) and also to reduce costs. The metrology results should clearly highlight the improvements to be made by correlating the values recovered.</li>
</ul>
<p>Quite a number of monitoring tools are available on the market, each with its pros and cons, some more supervision-oriented, others more towards metrology. Among them: <a title="Site de Centreon" href="http://www.centreon.com/">Centreon</a>/<a title="Site de Nagios" href="http://www.nagios.org/">Nagios</a>, <a title="Site de Zabbix" href="http://www.zabbix.com/">Zabbix</a>, <a title="Site de Cacti" href="http://www.cacti.net/">Cacti </a>and <a title="Site de  Munin" href="http://munin.projects.linpro.no/">Munin</a>. Personally I use Centreon/Nagios mainly for supervision and Cacti for software-oriented metrology with pre-packaged graphs such as for Apache, MySQL, Memcached, etc. I tried Munin, it lacks some of the useful features of Cacti but it is really easy to use and it matchs very well with Puppet (configuration based on descriptors and symlinks). I’ve also heard many good things about Zabbix (comprehensive range of features).</p>
<div id="attachment_388" class="wp-caption alignright" style="width: 414px"><img class="size-full wp-image-388 " title="Thread Scoreboard Apache - Yearly - 1 Day Average" src="http://decrypt.ysance.com/wp-content/uploads/2009/07/Thread-Scoreboard-Apache-Yearly-1-Day-Average.png" alt="Thread Scoreboard Apache - Yearly - 1 Day Average" width="404" height="262" /><p class="wp-caption-text">Thread Scoreboard Apache - Yearly - 1 Day Average</p></div>
<p>It should be noted that these tools operate mostly (Centreon, Cacti and Munin) on <a title="Site de RRDtool" href="http://oss.oetiker.ch/rrdtool/">RRDtool</a> (Round-Robin Database), a database management tool which also enables a graphic representation of the data contained in the base. The big advantage stems from the fact that the stored data volume is minimal, whether for storage of several months, or even years. This is made possible by calculating the averages of the time periods (from 1 minute to 1 day): the recent data is exact, whereas the older data is approximate.  This is very practical, as you have both the recent exact metrics and you keep the historic, a representation of the evolution of your architecture.  This is excellent for visualising the evolution of the key metrics and understanding the impact of the evolution of the components of the aforementioned infrastructure, or the applications supported as and when the different releases are delivered.</p>
<p>As for Cloud Computing-type infrastructures, metrology is the discipline with the highest added value, as it will enable feedback to your automation tools.</p>
<p>Keep in mind also that it’s interesting to be able to integrate dynamically the new instances installed and configured by Puppet in the monitoring tool. Give priority therefore to monitoring tools with modular configuration or simple access via APIs.</p>
<p><strong><em>Managing centralised logs </em></strong><br />
It’s undeniable: the more instances you have, the more scattered logs there’ll be on the various instances. Moreover, sending all the logs to the syslog daemon becomes difficult, as the infrastructure components do not necessarily manage it very well (redirection, respecting the syslog protocol, etc.), not to mention the application(s) / functional block(s) which can log in the various files on the server.</p>
<p><img class="size-full wp-image-1082 alignleft" title="Logo Syslog-NG" src="http://decrypt.ysance.com/wp-content/uploads/2010/03/syslog-ng.gif" alt="Logo Syslog-NG" width="200" height="47" /></p>
<p>Consider trying a tool such as <a title="Site de Syslog-NG" href="http://www.balabit.com/network-security/syslog-ng/">Syslog-NG</a>: it comprises a server and several clients, in fact it’s the same tool but with different configurations. What’s more, it is capable of regularly checking the log files (of business applications for example) and transmitting only the differential, even if it doesn’t respect the syslog protocol:</p>
<ul>
<li>The client recovers the files/pipe/unix-dgram/etc. logs and sends the information to the network (TCP/UDP).</li>
<li>The server recovers the information from the network (TCP/UDP) and registers it in files, databases, etc.</li>
</ul>
<div id="attachment_1314" class="wp-caption alignleft" style="width: 432px"><img class="size-full wp-image-1314 " title="Syslog-NG Architecture" src="http://decrypt.ysance.com/wp-content/uploads/2010/06/syslog-ng-archi.png" alt="Syslog-NG Architecture" width="422" height="255" /><p class="wp-caption-text">Syslog-NG Architecture</p></div>
<p>We’re talking about only minimal differences in terms of configuration. The component can also act as a relay on more complex infrastructures by receiving the network logs from diverse clients and sending them back to the network for a server.</p>
<p>It is possible to apply filters before sending the logs to the network in order to send only the essential ones. Next, filters can also be applied at the server level in order to manage differently the logs coming from clients, according to their urgency, sender program, source host, etc.</p>
<p>It’s a simple and non-intrusive tool able to take into account the logs of scattered applications on a server (even if these logs do not respect the syslog protocol format – there is however an advantage to respecting this protocol: greater accuracy of the facilities and priorities).</p>
<p>Keep in mind, the same as for monitoring, that it is interesting to be able to integrate (and withdraw) dynamically the new instances to be managed at the logs system level.</p>
<p><strong><em>Conclusion</em></strong><br />
Over and above the tools presented here, it is the underlying functions and capacities which are important. What stands out are the following:</p>
<ul>
<li>Tools such as centralised configuration managers, tools for the execution in parallel of automated tasks and also log managers, will become even more important. Working without them on such infrastructures is no longer conceivable.</li>
<li>Monitoring is still and will remain a key value, but metrology allows you, with the analysis of key defined metrics in your infrastructure, to sustain the automation tools.</li>
<li>Automation is indeed the key word promoted by AWS: the accessibility of the Hardware and Infrastructure resources via code allows us to move towards ever more autonomous architectures. However you must always position the cursor correctly, in the knowledge that the final stages of complete automation are the most expensive.</li>
</ul>
<p>I hope that this technical feedback will interest you as much as I enjoyed working on these infrastructures. I will continue in the second part of this article: Choosing the correct architecture model for scalable infrastructures.</p>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2010/08/scaling-an-aws-infrastructure-1-the-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaler une infrastructure AWS 1/2 : les outils</title>
		<link>http://decrypt.ysance.com/2010/06/scaler-une-infrastructure-aws-1-les-outils/</link>
		<comments>http://decrypt.ysance.com/2010/06/scaler-une-infrastructure-aws-1-les-outils/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 15:03:56 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[Métrologie]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Supervision]]></category>
		<category><![CDATA[Syslog-NG]]></category>
		<category><![CDATA[Webistrano]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=1056</guid>
		<description><![CDATA[<img class="size-full wp-image-510 alignleft" title="Logo AWS" src="http://decrypt.ysance.com/wp-content/uploads/2009/08/logo_aws.gif" alt="Logo AWS" width="164" height="60" />

Comment scaler une infrastructure <a title="Site de Amazon Web Services" href="http://aws.amazon.com/">AWS</a> (Amazon Web Services) ? C'est une réponse détaillée que va apporter cet article en 2 parties : les outils à utiliser pour tirer parti du dynamisme des services Amazon et le modèle d'architecture à adopter pour une infrastructure scalable. Je me base sur mes expériences tirées de plusieurs projets de production sur les AWS, à la fois dans le domaine du casual gaming (sur Facebook), dans celui des infrastructures e-commerce ou bien encore dans le cadre du SIG (Système d'Information Géographique) grand public. Il est vrai que l'expérience dans le domaine du jeu est celle qui est actuellement la plus représentative en termes de scalabilité, du fait du nombre d'utilisateurs (&#62; 800K DAU - Daily Active User - et plus de 20M de pages vues par jour), cependant les expériences dans le e-commerce et le SIG (expérience en cours :o)) offrent également une autre vision de la scalabilité, prenant en compte des problématiques différentes de disponibilité et de gestion des données. Je vais donc tenter de brosser un tableau exhaustif des éléments à prendre en compte afin d'optimiser le dynamisme d'une infrastructure montée dans un environnement de Cloud Computing et en l'occurrence dans celui des AWS.

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-510 alignleft" title="Logo AWS" src="http://decrypt.ysance.com/wp-content/uploads/2009/08/logo_aws.gif" alt="Logo AWS" width="164" height="60" /></p>
<p>Comment scaler une infrastructure <a title="Site de Amazon Web Services" href="http://aws.amazon.com/">AWS</a> (Amazon Web Services) ? C&#8217;est une réponse détaillée que va apporter cet article en 2 parties : les outils à utiliser pour tirer parti du dynamisme des services Amazon et le modèle d&#8217;architecture à adopter pour une infrastructure scalable. Je me base sur mes expériences tirées de plusieurs projets de production sur les AWS, à la fois dans le domaine du casual gaming (sur Facebook), dans celui des infrastructures e-commerce ou bien encore dans le cadre du SIG (Système d&#8217;Information Géographique) grand public. Il est vrai que l&#8217;expérience dans le domaine du jeu est celle qui est actuellement la plus représentative en termes de scalabilité, du fait du nombre d&#8217;utilisateurs (&gt; 800K DAU &#8211; Daily Active User &#8211; et plus de 20M de pages vues par jour), cependant les expériences dans le e-commerce et le SIG (expérience en cours :o)) offrent également une autre vision de la scalabilité, prenant en compte des problématiques différentes de disponibilité et de gestion des données. Je vais donc tenter de brosser un tableau exhaustif des éléments à prendre en compte afin d&#8217;optimiser le dynamisme d&#8217;une infrastructure montée dans un environnement de Cloud Computing et en l&#8217;occurrence dans celui des AWS.</p>
<p><em><strong>Les outils</strong></em><br />
Je propose des exemples d&#8217;outils que j&#8217;ai utilisés dans mes différentes expériences de production et qui m&#8217;ont convaincu par leur efficacité. Cependant, ce n&#8217;est pas tant l&#8217;outil qui est mis en valeur que la  fonctionnalité sous-jacente qu&#8217;il va falloir implémenter pour tirer parti au mieux des AWS.</p>
<p><strong><em>Différence entre une infra AWS et une infra standard</em></strong><br />
Il y a 2 éléments de réponse :</p>
<ul>
<li> Tout d&#8217;abord, les AWS permettent de manipuler les composants  Hardware et d&#8217;Infrastructure via la code (en passant par des APIs), cela  permet un dynamisme qu&#8217;il va falloir exacerber en sélectionnant  convenablement ses outils. Amazon propose de plus un certain nombre de  garanties techniques sur leurs services, il conviendra d&#8217;en tirer parti  afin de se concentrer sur l&#8217;essentiel.</li>
<li> Ensuite, une seconde partie de la réponse devrait être : « aucune !  ». Cependant, force est de constater que bien souvent le côté plus  douillet de l’infrastructure hébergée « à la maison » pousse à une  certaine forme de laxisme sur un certain nombre de points. Le fait que  Amazon, avec ses AWS, propose une solution volatile, au niveau des EC2  notamment, oblige à mettre en place des mécanismes qui devraient être  standards.</li>
</ul>
<p><strong><em>Gestion de configuration centralisée<br />
</em></strong>La possibilité d&#8217;instancier de multiples serveurs (EC2) à la volée pour répondre à un pic de charge ou des traitements ponctuels, nous oblige à utiliser un outil de gestion de configuration centralisée. L’utilité est multiple :</p>
<ul>
<li>Instancier rapidement une machine correspondant à un type prédéfini : serveur Web, serveur de cache, …</li>
<li>Assurer l’homogénéité de la configuration de l&#8217;ensemble des instances d’un même type à tout instant.</li>
<li>Capitaliser un savoir faire : les packages, configurations, services, &#8230; de chaque type d&#8217;instance est contenu dans un descripteur. Cela permet aux nouveaux venus (et aux autres) de connaitre la composition des serveurs sur la simple lecture du ou des descripteurs associés.</li>
</ul>
<p><img class="size-full wp-image-890 alignright" title="Logo Puppet - Reductive Labs" src="http://decrypt.ysance.com/wp-content/uploads/2010/02/puppet-short.png" alt="Logo Puppet - Reductive Labs" width="151" height="44" /></p>
<p><a title="Site de Puppet" href="http://reductivelabs.com/">Puppet</a> est une solution très intéressante pour cette tâche. L&#8217;architecture Puppet est constituée de:</p>
<ul>
<li>Un Puppet Master, gardien des configurations, il contient les descripteurs des packages à installer, fichiers de configuration à déposer et services à démarrer pour une nouvelle instance EC2 afin de la préparer suivant le type du ou des nœuds auxquels on l’a associée ou tout simplement pour maintenir à jour une instance existante.</li>
<li>De multiples clients Puppet installés sur les instances EC2. Régulièrement, le client poll (interroge) le master afin de vérifier que sa configuration est à jour. Il est également possible de faire du push sur les clients à partir du master pour déclencher une mise à jour urgente.</li>
</ul>
<p>Il est ainsi très simple de monter une nouvelle instance d’un type donné et d’être sûr que, d’un serveur à un autre, la configuration est complètement identique. Il est à noter que les descripteurs du Puppet Master fonctionnent sur un système de nœuds et un serveur peut faire référence à plusieurs nœuds. On obtient donc une configuration très modulaire.</p>
<div id="attachment_1310" class="wp-caption alignleft" style="width: 306px"><img class="size-medium wp-image-1310 " title="Descripteur Module Puppet" src="http://decrypt.ysance.com/wp-content/uploads/2010/06/puppet_type_node_def-296x300.png" alt="Descripteur Module Puppet" width="296" height="300" /><p class="wp-caption-text">Descripteur Module Puppet</p></div>
<p>Le gestionnaire de configuration centralisée est indispensable sur une infrastructure scalable qui est amenée à avoir un grand nombre d&#8217;instances dont certaines devront être montées rapidement afin de répondre aux sollicitations des utilisateurs lors des pics de charge.</p>
<p>« Mais… », me direz-vous, « il faut bien installer le client sur la nouvelle machine ? ». Et oui, d’autant plus qu’il y a un système de requête/acceptation de certificat entre le client et le master afin que n’importe qui ne puisse accéder aux configurations. « Très simple ! », vous répondrais-je, au lieu d’utiliser une IHM, comme Elastic Fox, afin de se connecter aux APIs des services Amazon, il suffit de s’y connecter en lignes de commande via un script qui instancie un EC2, éventuellement crée un volume EBS et l’associe, se connecte en SSH sur la nouvelle machine et installe le client, se connecte sur le master et accepte la requête de certificat, redémarre le client et « hop ! ». L&#8217;instance s&#8217;installe et se configure toute seule. Les possibilités de réactivité et de dynamisme inhérentes aux EC2 et aux AWS de manière générale nous impose cela, sinon ce serait sous exploiter l’outil, voire le més-exploiter.</p>
<p>Et les AMIs (instance-store root devices) ou les EBS root devices (à noter que pour ces dernier, il n&#8217;y a pas encore beaucoup de choix en termes de templates) ? Il est cependant possible de se constituer une AMI ou bien un EBS root device avec le client Puppet installé dessus (et d&#8217;utiliser éventuellement les user-data au lancement de l&#8217;instance afin de le paramétrer si une configuration &laquo;&nbsp;statique&nbsp;&raquo; sur l&#8217;AMI n&#8217;est pas suffisante). Cependant, dans un environnement de production, l&#8217;AMI ou l&#8217;EBS root device ne permettent pas de remplacer un Puppet : si il faut modifier l’AMI à chaque modification de paramétrage et redéployer les EC2… On n’a pas fini. L’AMI est un bon outil pour instancier un template de base (au sens basique), pas pour conserver une infrastructure de production en bon ordre de fonctionnement.</p>
<p>Pour conclure, il est même possible d&#8217;envisager une auto-scalabilité (plus complète que celle proposée par le service <a title="Site de Amazon Web Services, Rubrique Auto Scaling" href="http://aws.amazon.com/autoscaling/">Auto Scaling</a> d&#8217;Amazon basé sur <a title="Site de Amazon Web Services, Rubrique Amazon CloudWatch" href="http://aws.amazon.com/cloudwatch/">CloudWatch</a>) qui reviendrait à déclencher ce script sur le dépassement d’une valeur d’un graphe de monitoring (métrologie), instanciant donc une nouvelle machine pour supporter la période de pic, instance qui serait « terminée » suite au passage en dessous d&#8217;un autre seuil sur ledit graphe. Les possibilités sont énormes. Cependant, le coût des derniers éléments à mettre en place sur une infrastructure importante de production pour accéder à l&#8217;auto-scalabilité est conséquent (complexité exponentielle). Si on a l&#8217;opportunité, c&#8217;est un bel ouvrage, sinon se &laquo;&nbsp;contenter&nbsp;&raquo; d&#8217;une solution aisément scalable où il suffit de lancer un script manuellement (ou bien à heure fixe basé sur l&#8217;étude des métriques remontés par la métrologie, ce qui est une bonne alternative) et éventuellement d&#8217;ajouter manuellement une ou deux références dans un fichier est une alternative tout à fait respectable.</p>
<p><strong><em>Exécution de tâches automatisées en parallèle</em></strong><br />
Du fait de la variation du nombre d’instances en fonction de la charge d&#8217;une infrastructure scalable et surtout du nombre potentiellement important desdites instances, il n’est pas envisageable d’effectuer les opérations de maintenance et de déploiement unitairement sur chaque machine (et encore pire à la main !), ce qui non seulement serait chronophage, mais de surcroît source d’erreurs. Il est alors indispensable d’utiliser des outils spécialisés dans l’automatisation et l’exécution parallèle de tâches, tel que <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a>, dont les bénéfices sont multiples :</p>
<ul>
<li>Scripter un certain nombre de tâches, complexes ou non, (livraisons, backups, publication/maintenance du site, …) et de les exécuter rapidement en parallèle sur X machines en une seule commande.</li>
<li>Assurer la reproductibilité d’une tâche.</li>
<li>Capitaliser un savoir faire (Cf. Puppet).</li>
</ul>
<div id="attachment_1311" class="wp-caption alignnone" style="width: 654px"><img class="size-full wp-image-1311" title="Descripteur Tache Capistrano" src="http://decrypt.ysance.com/wp-content/uploads/2010/06/cap_task.png" alt="Descripteur Tache Capistrano" width="644" height="46" /><p class="wp-caption-text">Descripteur Tache Capistrano</p></div>
<p><img class="size-medium wp-image-429 alignright" title="Logo Capistrano" src="http://decrypt.ysance.com/wp-content/uploads/2009/07/capistrano-logo-big-300x114.png" alt="Logo Capistrano" width="300" height="114" /></p>
<p>Cet outil est très simple d’utilisation et très pratique. Il exécute des tâches en parallèle (en se connectant en SSH &#8211; n&#8217;utilisez pas la clé &laquo;&nbsp;root&nbsp;&raquo; de vos instances EC2 dans l&#8217;outil, mais une autre dédiée, c&#8217;est plus classe&#8230;) sur un ou des groupes de serveurs définis par des rôles.</p>
<p>C&#8217;est un complément à Puppet et non un doublon car ils n&#8217;ont pas la même cible :</p>
<p><span style="text-decoration: underline;"><em>Objectif</em></span><br />
<span style="color: #339966;"><em>Puppet </em></span>- Homogénéité de la configuration du parc de serveurs.<br />
<span style="color: #800080;"><em>Capistrano </em></span>- Reproductibilité des tâches et exécution en parallèle.</p>
<p><span style="text-decoration: underline;"><em>Mode de fonctionnement</em></span><br />
<em><span style="color: #339966;">Puppet </span></em>- Pull régulier des clients (voire push du master).<br />
<span style="color: #800080;"><em>Capistrano </em></span>- Tâches ponctuelles (appel manuel ou par cron).</p>
<p><span style="text-decoration: underline;"><em>Orientation</em></span><br />
<span style="color: #339966;"><em>Puppet </em></span>- Objets / notions prédéfinis tels que « Package », « Service », « File », …<br />
<em><span style="color: #800080;">Capistrano </span></em>- Des commandes génériques comme « upload », « download », « system », « run », …</p>
<p><span style="text-decoration: underline;"><em>Cible</em></span><br />
<span style="color: #339966;"><em>Puppet </em></span>- Infrastructure et services.<br />
<span style="color: #800080;"><em>Capistrano </em></span>- Services et applicatif.</p>
<p>A noter, <a title="Site de Webistrano" href="http://labs.peritor.com/webistrano">Webistrano</a> est une IHM  permettant d’accéder aux fonctionnalités de Capistrano et introduisant  une notion de gestion de projet par la possibilité de gérer les accès  aux tâches en fonction de son profil, de tracer qui a déployé quoi sur  quel serveur et d’envoyer des alertes mails sur certaines actions. Je trouve cette jointure avec la gestion de  projet intéressante.</p>
<p><em><strong>Monitoring</strong></em><br />
C&#8217;est un des éléments cruciaux d&#8217;une architecture scalable, si ce n&#8217;est le principal. Il est indispensable d’avoir à disposition des métriques afin de savoir justement quand scaler. Il permet d’identifier les points d’engorgement de l’infrastructure, d&#8217;analyser l’évolution du trafic sur votre site et d&#8217;en déduire les comportements des utilisateurs et permet également de déclencher des alertes.</p>
<p>Cet apport de métriques est plus représentatif de la métrologie que de la supervision. On verra que, dans le cadre d&#8217;une infrastructure sur AWS, la métrologie a une valeur ajoutée plus importante que celle de la supervision (même si cette dernière reste indispensable). A ce propos, voici un éclaircissement sur les 2 disciplines du monitoring qu&#8217;il faut identifier :</p>
<ul>
<li>La <strong>supervision </strong>vérifie l’état d’un hôte ou d’un service et remonte une alerte sur la détection d’un comportement anormal (temps de réponse trop long, statut NOK, …) et implique une action immédiate de la part des interlocuteurs concernés. Une alerte doit signifier que l’hôte ou le service est inutilisable (critical) ou risque de l’être (warning) et ne pas renvoyer de « simples informations » qui pollueraient la visibilité des réels incidents.</li>
<li>La <strong>métrologie </strong>permet d’historiser les données, éventuellement d’appliquer un traitement ou filtre dessus, avant de les présenter sous forme de graphiques ou de reporting. Ces données permettent d’apporter un correctif à postériori au niveau développement ou paramétrage des services afin d’apporter une optimisation desdits services et également de définir les ressources à attribuer aux services au plus  juste. Cet aspect du monitoring est tout aussi important car il va permettre d’améliorer le service et donc le rendu des utilisateurs (internes ou clients finaux) et également de lisser les coûts. Les résultats issus de la métrologie doivent mettre aisément en valeur les améliorations à apporter en corrélant les valeurs récupérées.</li>
</ul>
<p>Un certain nombre existent sur le marché avec leurs avantages et inconvénients, certains plus orientés supervision, d&#8217;autres plus métrologie. On citera <a title="Site de Centreon" href="http://www.centreon.com/">Centreon</a>/<a title="Site de Nagios" href="http://www.nagios.org/">Nagios</a>, <a title="Site de Zabbix" href="http://www.zabbix.com/">Zabbix</a>, <a title="Site de Cacti" href="http://www.cacti.net/">Cacti </a>ou encore <a title="Site de Munin" href="http://munin.projects.linpro.no/">Munin</a>. Personnellement, j&#8217;utilise Centreon/Nagios essentiellement pour la  supervision et Cacti pour la métrologie orientée logicielle avec des  graphes pré-packagés comme pour Apache, MySQL, Memcached, &#8230; Mais j&#8217;ai  eu de nombreux bons écho sur Zabbix pour son exhaustivité de  fonctionnalités et Munin pour sa simplicité d&#8217;utilisation.</p>
<div id="attachment_388" class="wp-caption alignright" style="width: 414px"><img class="size-full wp-image-388 " title="Thread Scoreboard Apache - Yearly - 1 Day Average" src="http://decrypt.ysance.com/wp-content/uploads/2009/07/Thread-Scoreboard-Apache-Yearly-1-Day-Average.png" alt="Thread Scoreboard Apache - Yearly - 1 Day Average" width="404" height="262" /><p class="wp-caption-text">Thread Scoreboard Apache - Yearly - 1 Day Average</p></div>
<p>Il est à noter que ces outils fonctionnent pour la plupart (Centreon, Cacti et Munin) sur <a title="Site de RRDtool" href="http://oss.oetiker.ch/rrdtool/">RRDtool</a> (Round-Robin Database), un outil de gestion de base de données permettant également de représenter graphiquement les données contenues dans la base. Le gros avantage tient dans le fait que le volume de données stockées est minimal même pour la conservation de plusieurs mois, voire années de données. Cela est rendu possible par le calcul de moyennes sur des périodes (de 1 minute à 1 jour) : les données récentes sont exactes, alors que les plus anciennes sont approximées. Très pratique car nous avons à la fois des métriques récentes exactes et conservons un historique, une représentation de l&#8217;évolution de notre architecture, ce qui est capital afin de visualiser l&#8217;évolution des métriques clés et de comprendre les impacts de l’évolution des composants de ladite infrastructure ou bien des applications supportées au fur et à mesure des livraisons des différentes releases.</p>
<p>Concernant les infrastructures de type Cloud Computing, la discipline  ayant la plus forte valeur ajoutée est la métrologie, car c&#8217;est elle qui  va permettre d&#8217;apporter un feed back à vos outils d&#8217;automatisation.</p>
<p>Gardez à l&#8217;esprit également qu&#8217;il est intéressant de pouvoir intégrer dynamiquement les nouvelles machines installées et configurées par Puppet dans l&#8217;outil de monitoring. Privilégiez donc les outils de monitoring avec une configuration modulaire, ou simple d&#8217;accès via APIs.</p>
<p><em><strong>Gestion des logs centralisée</strong></em><br />
C&#8217;est indéniable, plus vous aurez d&#8217;instances, plus vous aurez de logs éparses sur les diverses instances. De plus, diriger tous les logs vers le daemon syslog devient problématique car tous les composants de l&#8217;infrastructure ne gèrent pas forcément bien cela (redirection, respect du protocole syslog, &#8230;), sans parler de la ou des applications/briques fonctionnelles qui peuvent loguer dans des fichiers disparates sur le serveur.</p>
<p><img class="size-full wp-image-1082 alignleft" title="Logo Syslog-NG" src="http://decrypt.ysance.com/wp-content/uploads/2010/03/syslog-ng.gif" alt="Logo Syslog-NG" width="200" height="47" /></p>
<p>Pensez à des outils comme <a title="Site de Syslog-NG" href="http://www.balabit.com/network-security/syslog-ng/">Syslog-NG</a> : il est composé d&#8217;un serveur et de plusieurs clients, en fait le même outil mais avec des configurations différentes. En plus, il est capable de vérifier régulièrement des fichiers de logs (d&#8217;applications métier par exemple) et de transmettre uniquement le différentiel, même si celui-ci ne respecte pas le protocole syslog :</p>
<ul>
<li>Le client récupère les logs de files(fichiers)/pipe/unix-dgram/&#8230; et envoie les infos sur le réseau (tcp/udp).</li>
<li>Le serveur récupère les infos du réseau (tcp/udp) et les enregistre dans des fichiers, bases de données, &#8230;</li>
</ul>
<div id="attachment_1314" class="wp-caption alignleft" style="width: 432px"><img class="size-full wp-image-1314 " title="Architecture Syslog-NG" src="http://decrypt.ysance.com/wp-content/uploads/2010/06/syslog-ng-archi.png" alt="Architecture Syslog-NG" width="422" height="255" /><p class="wp-caption-text">Architecture Syslog-NG</p></div>
<p>Il s&#8217;agit juste de différences minimes en termes de configuration. Le composant peut également servir de relai sur des infrastructures plus complexes en recevant les logs du réseau à partir de divers clients et en les envoyant à nouveau sur le réseau à destination d’un serveur.</p>
<p>Il est possible d’appliquer des filtres avant d’envoyer les logs sur le réseau pour ne faire transiter que le nécessaire et ensuite il est également possible d’en appliquer au niveau du serveur pour gérer différemment les logs en provenance des clients en fonction de leur criticité, programme émetteur, hôte d’origine, …</p>
<p>C’est un outil simple et non intrusif pouvant prendre en compte les logs des applications éparses sur un serveur (même si ces logs ne respectent pas le format du protocole « syslog » &#8211; il y a cependant un plus à respecter ce protocole pour avoir une meilleure précision au niveau des « facilities » et « priorities »).</p>
<p>De même que pour le monitoring, gardez à l&#8217;esprit qu&#8217;il est intéressant de pouvoir intégrer (et retirer) dynamiquement les nouvelles instances à gérer au niveau du système de logs.</p>
<p><em><strong>Conclusion</strong></em><br />
Au delà des outils présentés, ce sont les fonctionnalités sous-jacentes qui sont importantes. Ce qu&#8217;il  en ressort, c&#8217;est :</p>
<ul>
<li>Les outils comme  les gestionnaires de configuration centralisée, les  outils d&#8217;exécution  de tâches automatisées en parallèle ou bien les gestionnaires  de logs vont  prendre encore plus d&#8217;importance. Il n&#8217;est plus  envisageable de  travailler sans sur de telles infrastructures.</li>
<li>Le monitoring est  toujours une valeur clé et le restera, mais la métrologie  permet avec l&#8217;analyse des métriques clés définis dans son infrastructure d&#8217;alimenter les outils d&#8217;automatisation.</li>
<li>L&#8217;automatisation est bien le mot clé mis en  avant par les AWS :  l&#8217;accessibilité des ressources Hardware ou  d&#8217;Infrastructure via du code  permet d&#8217;aller vers des architectures de  plus en plus autonomes. Il faut  cependant positionner le curseur  convenablement, sachant que les  dernières étapes d&#8217;une automatisation  complète seront les plus  coûteuses.</li>
</ul>
<p>J&#8217;espère que ce retour  d&#8217;expérience vous aura intéressé autant que  j&#8217;ai eu de plaisir à  travailler sur ces infrastructures. Je continuerai cet article dans une deuxième partie consacrée au modèle d&#8217;architecture à appliquer pour des infrastructures scalables.</p>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2010/06/scaler-une-infrastructure-aws-1-les-outils/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Puppet et Capistrano : la clé de l&#8217;automatisation</title>
		<link>http://decrypt.ysance.com/2009/07/automatisation-puppet-capistrano/</link>
		<comments>http://decrypt.ysance.com/2009/07/automatisation-puppet-capistrano/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 16:02:49 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=425</guid>
		<description><![CDATA[<a href="http://reductivelabs.com/" title="Site de Puppet">Puppet</a> est un produit open source qui permet de gérer à moindre frais une infrastructure importante en centralisant la gestion de la configuration des machines : il permet de maintenir la configuration des différents types de machines d’une infrastructure iso entre elles et de démarrer rapidement une instance en l’associant à un type de nœud Puppet. Il capitalise également les connaissances sur les composants/paramétrages de chaque type de machines via ses descripteurs.

<a href="http://www.capify.org/" title="Site de Capistrano">Capistrano</a> est produit open source qui permet d’associer des machines à des rôles (exemple : role :web, « frontal1 », « frontal2 ») et d’exécuter une tâche donnée en parallèle sur toutes les machines d’un ou plusieurs rôles. Il permet également de capitaliser les connaissances sur les différentes tâches de l’infrastructure et les rend reproductibles et centralisées, donc fiables. il se connecte en SSH et donc assure un niveau de sécurité minimum.

[...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://reductivelabs.com/" title="Site de Puppet">Puppet</a> est un produit open source qui permet de gérer à moindre frais une infrastructure importante en centralisant la gestion de la configuration des machines : il permet de maintenir la configuration des différents types de machines d’une infrastructure iso entre elles et de démarrer rapidement une instance en l’associant à un type de nœud Puppet. Il capitalise également les connaissances sur les composants/paramétrages de chaque type de machines via ses descripteurs.</p>
<p><a href="http://www.capify.org/" title="Site de Capistrano">Capistrano</a> est un produit open source qui permet d’associer des machines à des rôles (exemple : role :web, « frontal1 », « frontal2 ») et d’exécuter une tâche donnée en parallèle sur toutes les machines d’un ou plusieurs rôles. Il permet également de capitaliser les connaissances sur les différentes tâches de l’infrastructure et les rend reproductibles et centralisées, donc fiables. Il se connecte en SSH et donc assure un niveau de sécurité minimum.</p>
<div id="media"><object id="csSWF" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="498" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.labdecisionnel.fr/decrypt-content/Web/Ysance-Automatisation-Puppet-Capistrano.swf" /><param name="bgcolor" value="#1a1a1a" /><param name="quality" value="best" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="scale" value="showall" /><param name="flashVars" value="autostart=false" /><param name="name" value="csSWF" /><param name="flashvars" value="autostart=false" /><param name="allowfullscreen" value="true" /><embed id="csSWF" type="application/x-shockwave-flash" width="640" height="498" src="http://www.labdecisionnel.fr/decrypt-content/Web/Ysance-Automatisation-Puppet-Capistrano.swf" flashvars="autostart=false" allowfullscreen="true" allowscriptaccess="always" scale="showall" quality="best" bgcolor="#1a1a1a" name="csSWF"></embed></object></div>
<div> </div>
<div><img class="size-full wp-image-430" title="Logo Puppet" src="http://decrypt.ysance.com/wp-content/uploads/2009/07/puppet2.png" alt="Logo Puppet" width="96" height="108" /> <img class="size-medium wp-image-429" title="Logo Capistrano" src="http://decrypt.ysance.com/wp-content/uploads/2009/07/capistrano-logo-big-300x114.png" alt="Logo Capistrano" width="300" height="114" /></div>
<div> </div>
<div class="mceTemp">Vous pouvez également accéder aux versions <strong>IPhone</strong> et <strong>IPod</strong> de ce webcast :</div>
<p><a href="http://www.labdecisionnel.fr/decrypt-content/IPhone/Ysance-Automatisation-Puppet-Capistrano.m4v">Version IPhone</a><br />
<a href="http://www.labdecisionnel.fr/decrypt-content/IPod/Ysance-Automatisation-Puppet-Capistrano.m4v">Version IPod</a></p>
<p> </p>
<p>Puppet et Capistrano sont 2 outils ayant pour but de capitaliser les connaissances sur le fonctionnement d’une infrastructure et de l’automatiser de façon à l’homogénéiser et la fiabiliser.</p>
<p>Chacun des outils à son propre rôle et utiliser les 2 est une très bonne solution, Puppet étant attaché au maintient d’une configuration iso à tout moment entre chaque machine d’un même type et Capistrano permettant d’exécuter des tâches plus ou moins complexes en parallèle sur des groupes de machines assignées à des rôles.</p>
<p>Il est également possible en poussant le fonctionnement un peu plus loin, dans un environnement virtualisé par exemple, d’avoir un script qui démarre des machines, installe le client Puppet sur celles-ci, référence les nouvelles machines et accepte les certificats au niveau du Puppet Master, puis redémarre le client, avant de lancer une tâche Capistrano qui déploie la dernière version de l’application à partir de SVN sur les serveurs ne possédant pas encore l’application. En un clic, il est possible de multiplier le nombre de ses frontaux pour absorber un pic de charge par exemple.</p>
<p>Le mot clé est : « automatisation ! »</p>
<p><em><strong>Frédéric FAURE</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2009/07/automatisation-puppet-capistrano/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mise en place d’une infrastructure sur AWS : best practices !</title>
		<link>http://decrypt.ysance.com/2009/05/cloud-computing-mise-en-place-infrastructure-aws-best-practices/</link>
		<comments>http://decrypt.ysance.com/2009/05/cloud-computing-mise-en-place-infrastructure-aws-best-practices/#comments</comments>
		<pubDate>Fri, 15 May 2009 14:12:38 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cacti]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[HaaS]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Puppet]]></category>
		<category><![CDATA[RRDtool]]></category>
		<category><![CDATA[Webistrano]]></category>

		<guid isPermaLink="false">http://godard.ysance.com/~decrypt/?p=25</guid>
		<description><![CDATA[Ce post va présenter une description détaillée de la mise en place de l’infrastructure sur <a href="http://aws.amazon.com/" title="Site de Amazon">AWS</a> (Amazon Web Services). Je me base sur ce que j’ai mis en place, en l’occurrence, à destination d’une application sociale à forte sollicitation. Cependant, quelque soit la typologie de l’infrastructure sous AWS, les éléments à mettre en place seront toujours les mêmes.

[...]]]></description>
			<content:encoded><![CDATA[<p>Ce post va présenter une description détaillée de la mise en place de l’infrastructure sur <a href="http://aws.amazon.com/" title="Site de Amazon">AWS</a> (Amazon Web Services). Je me base sur ce que j’ai mis en place, en l’occurrence, à destination d’une application sociale à forte sollicitation. Cependant, quelque soit la typologie de l’infrastructure sous AWS, les éléments à mettre en place seront toujours les mêmes.</p>
<p><strong><em>Différence avec une infrastructure standard</em></strong><br />
Tout d’abord il est normal de se poser la question. La réponse devrait être : « aucune ! ». Cependant, force est de constater que bien souvent le côté plus douillet de l’infrastructure hébergé « à la maison » pousse à une certaine forme de laxisme sur un certain nombre de points. Le fait que Amazon, avec ses AWS, propose une solution volatile et dynamique au niveau de ces EC2 oblige à mettre en place des mécanismes qui devraient être standards afin :</p>
<p style="padding-left: 30px;">• de tirer profit des possibilités, du dynamisme, de la solution,</p>
<p style="padding-left: 30px;">• de prendre en compte plus sérieusement, du fait de la volatilité de l’outil, les plans de reprise sur incident et identifier les données importantes afin d’assurer leur durabilité.</p>
<p><strong><em>Le monitoring</em></strong><br />
Le monitoring est le premier élément à mettre en place. Dans une architecture scalable, il est indispensable d’avoir à disposition des métriques afin de savoir justement quand scaler. C’est le rôle de cet élément. Il permet de plus d’identifier les points d’engorgement de l’infrastructure, analyser l’évolution du trafic sur votre site et en déduire les comportement des utilisateurs et dans le cadre d’un monitoring actif, permet également de déclencher des alertes qui servent de base aux astreintes.</p>
<p>Il n’y a pas d’outil miracle pour le monitoring et un certain nombre existent sur le marché avec leurs avantages et inconvénients. Nous pouvons citer Nagios, Cacti, Zabbix, Munin, … Nous avons choisi <a href="http://www.cacti.net/" title="Site de Cacti">Cacti</a> pour notre infrastructure du fait de la qualité des courbes qu’il propose. Il est vrai que le packaging de cet outil manque, à mon avis, de rigueur et que les métriques manquent, sur certains templates, de précision, cependant la qualité des courbes, basées sur <a href="http://oss.oetiker.ch/rrdtool/" title="Site de RRDtool">RRDtool</a>, et leur diversité permet d’effectuer un suivi complet de notre infrastructure et de comprendre les impacts de l’évolution des composants de ladite infrastructure ou bien des applications supportées au fur et à mesure des livraisons des différentes releases.</p>
<p>Nous avons installé également la « plugin architecture » de Cacti qui nous permet d’installer, comme son nom l’indique, des plugin sur l’outil et notamment « Thold », nous permettant de déclencher des trigger sur l’atteinte d‘une valeur sur une courbe ou bien sur une variation afin d’effectuer du monitoring actif. Bien entendu, cela est le prélude à une gestion des astreintes et à chaque alerte remontée doit correspondre un mode opératoire de reprise sur l’incident mis en lumière via Cacti.</p>
<p>Le monitoring est positionné sur une machine EC2 pour des raisons évidentes de coût (le coût des échanges sur l’IP interne est nul) et de sécurité (inutile d’ouvrir plein de ports et donc autant de failles à l’extérieur).</p>
<div id="attachment_162" class="wp-caption alignnone" style="width: 463px"><img class="size-full wp-image-162" title="Cacti - Apache Statistics - Thread scoreboard" src="http://decrypt.ysance.com/wp-content/uploads/2009/05/apache-statistics-thread-scoreboard-tiny.png" alt="Cacti - Apache Statistics - Thread scoreboard" width="453" height="309" /><p class="wp-caption-text">Cacti - Apache Statistics - Thread scoreboard</p></div>
<p><strong><em>La gestion de configuration centralisée<br />
</em></strong>La notion de scalabilité rendue accessible par l’infrastructure des services Amazon, nous oblige à utiliser un outil de gestion centralisé de la configuration. L’utilité est multiple :</p>
<p style="padding-left: 30px;">• instancier rapidement une machine correspondant à un type prédéfini : serveur SQL, serveur de cache, serveur Web, …</p>
<p style="padding-left: 30px;">• assurer l&#8217;homogénéité de la configuration des instances d&#8217;un même type,</p>
<p style="padding-left: 30px;">• capitaliser un savoir faire.</p>
<p>Nous utilisons <a href="http://reductivelabs.com/" title="Site de Puppet">Puppet</a> dans notre infrastructure. Nous avons installé le Puppet Master sur le serveur de monitoring. Le Puppet Master contient les descripteurs des installations et configurations à apporter à une nouvelle machine afin de la préparer suivant le type de machine (nœud) auquel on l’a associé. Régulièrement, le client pull le master afin de vérifier que sa configuration est à jour. Il est également possible de faire du push sur les clients à partir du master pour déclencher une mise à jour urgente.</p>
<p>Il est ainsi très simple de monter une nouvelle instance d’un type donné et d’être sûr que, d’une machine à une autre, la configuration est complètement iso, configuration qui est centralisée sur notre machine de monitoring et dispatchée sur les instances de notre infrastructure. Il est à noter que le descripteur du Puppet Master fonctionne sur un système de nodes et donc un type de machine peut faire référence à plusieurs nodes et on obtient une configuration très modulaire. Tous nos types de machine, par exemple, utilisent le module Puppet de configuration, que nous avons décrit, du protocole SNMP, indispensable pour que Cacti monitore une machine, et le module de l’outil s3cmd nous permettant de faire fonctionner notre système de backup sur chaque machine. Ensuite, chaque type de machine a ses installations/configurations spécifiques.</p>
<p>Exemple du descripteur de nœuds « nodes.pp » du Puppet Master :</p>
<p><span style="color: #339966;">class web-node {<br />
      include snmp-module<br />
      include s3cmd-module<br />
      include web-module<br />
}</span></p>
<p>Exemple du descripteur « init.pp » du module « snmp » du Puppet Master :</p>
<p><span style="color: #339966;">class snmp {<br />
      package {<br />
            &laquo;&nbsp;snmpd&nbsp;&raquo;:<br />
            ensure =&gt; installed;<br />
      }</span></p>
<p><span style="color: #339966;">      file { &laquo;&nbsp;/etc/default/snmpd&nbsp;&raquo;:<br />
            ensure =&gt; present,<br />
            owner =&gt; root,<br />
            group =&gt; root,<br />
            mode =&gt; 0644,<br />
            source =&gt; &laquo;&nbsp;puppet:///snmp/snmpd&nbsp;&raquo;,<br />
            require =&gt; Package["snmpd"],<br />
            notify =&gt; Service["snmpd"];<br />
      }</span></p>
<p><span style="color: #339966;">      file { &laquo;&nbsp;/etc/snmp/snmpd.conf&nbsp;&raquo;:<br />
            ensure =&gt; present,<br />
            owner =&gt; root,<br />
            group =&gt; root,<br />
            mode =&gt; 0644,<br />
            source =&gt; &laquo;&nbsp;puppet:///snmp/snmpd.conf&nbsp;&raquo;,<br />
            require =&gt; Package["snmpd"],<br />
            notify =&gt; Service["snmpd"];<br />
      }</span></p>
<p><span style="color: #339966;">      service { &laquo;&nbsp;snmpd&nbsp;&raquo;:<br />
            ensure =&gt; true,<br />
            hasrestart =&gt; true,<br />
            restart =&gt; &laquo;&nbsp;/etc/init.d/snmpd restart&nbsp;&raquo;,<br />
            hasstatus =&gt; true;<br />
      }<br />
}</span></p>
<p>Très simple de mise en place, il nous permet de démarrer une machine en un clic sur un pic de charge. « Mais… », me direz-vous, « il faut bien installer le client sur la nouvelle machine ? ». Et oui, d’autant plus qu’il y a un système de requête/acceptation de certificat entre le client et le master afin que n’importe qui ne puisse accéder aux configurations. « Très simple ! », vous répondrais-je, au lieu d’utiliser une IHM, comme Elastic Fox, afin de se connecter aux APIs des services Amazon, il suffit de s’y connecter en lignes de commande via un script qui instancie un EC2, éventuellement crée un volume EBS et l’associe, se connecte en SSH sur la nouvelle machine et installe le client, se connecte sur le master et accepte la requête de certificat, redémarre le client sur la nouvelle machine et « hop ! ». La machine s’installe et se configure toute seule ! « Magique ! » me direz-vous, « Ca devrait être pourtant classique » vous répondrais-je… Les possibilités de réactivité et de dynamisme inhérents à EC2 et les AWS de manière générale nous impose cela, sinon ce serait sous exploiter l’outil, voire més-exploiter.</p>
<p>L’auto-scalabilité, que nous n’avons pas (pour l&#8217;instant ;ob) mise en place dans notre cas, consisterait, par exemple, à déclencher ce script sur le dépassement d’une valeur d’un graphe Cacti, instanciant donc une nouvelle machine pour supporter la période de pic, instance qui serait « terminée » suite au repassage en dessous de ce seuil sur le graphe. Les possibilités sont énormes.</p>
<p><strong><em>Le déploiement automatisé<br />
</em></strong>Du fait de la variation du nombre d’instances en fonction de la charge et surtout du nombre potentiellement important desdites instances, il n’est pas envisageable d’effectuer les opérations de maintenance et de déploiement unitairement sur chaque machine (et encore pire à la main !), ce qui non seulement serait chronophage, mais de surcroît source d’erreurs. Il est alors indispensable d’utiliser des outils spécialisés dans l’automatisation et l’exécution parallèle de tâches, tel que <a href="http://www.capify.org/" title="Site de Capistrano">Capistrano</a>, dont les bénéfices sont multiples :</p>
<p style="padding-left: 30px;">• scripter un certain nombre de tâches (livraisons, backups, publication/maintenance du site, &#8230;) et de les exécuter en parallèle sur X machines,</p>
<p style="padding-left: 30px;">• assurer la reproductibilité d&#8217;une tâche,</p>
<p style="padding-left: 30px;">• exécuter rapidement des tâches complexes sur X serveurs en une seule commande,</p>
<p style="padding-left: 30px;">• capitaliser un savoir faire.</p>
<p>Cet outil est très simple d’utilisation et très pratique et exécute des tâches en parallèle, sur un groupe de serveurs que l’on définit, en se connectant en ssh :</p>
<p><span style="color: #339966;">ssh_options[:keys] = &laquo;&nbsp;~/.ssh/la_cle_privee&nbsp;&raquo;<br />
ssh_options[:user] = &laquo;&nbsp;le_user&nbsp;&raquo;</span></p>
<p>Il suffit de définir une liste de serveurs correspondant à un groupe, « sql » par exemple :</p>
<p><span style="color: #339966;">role :sql, &laquo;&nbsp;alias_sql1 &nbsp;&raquo; , &laquo;&nbsp;alias_sql2 &nbsp;&raquo; , … , &laquo;&nbsp;alias_sqlx&nbsp;&raquo;</span></p>
<p>Et ensuite il reste à définir les tâches, que l’on peut décrire intégralement dans le descripteur…</p>
<p><span style="color: #339966;">task :dump_sql, :roles =&gt; :sql do<br />
      run &laquo;&nbsp;rm -f /mnt/backup/`hostname`.`date +%w`-*&nbsp;&raquo;<br />
      run &laquo;&nbsp;mysqldump –pmon_pwd -u mon_user ma_base | gzip -cq6 &gt; /mnt/backup/`hostname`.`date +%w-%y%m%d_%H%M`.sql.gz&nbsp;&raquo;<br />
end</span></p>
<p>… ou bien dans un fichier « .sh » que l’on uploade et que l’on exécute sur la machine distante</p>
<p><span style="color: #339966;">task :store_sql, :roles =&gt; :sql do<br />
      upload &laquo;&nbsp;/root/cap-scripts/cap-backup_sql.sh&nbsp;&raquo;, &laquo;&nbsp;/usr/local/sbin&nbsp;&raquo;, :via =&gt; :scp<br />
      run &laquo;&nbsp;/usr/local/sbin/cap-backup_sql.sh&nbsp;&raquo;<br />
end</span></p>
<p>Il suffit ensuite d’exécuter la simple commande « cap dump_sql » ou « cap store_sql ».</p>
<p><strong><em>Backups</em></strong><br />
Et oui, mettre ses données de base SQL sur EBS (dans le cas où l’on n’utilise pas SimpleDB du fait du besoin d’un minimum de modèle relationnel) ne suffit pas, parce que :</p>
<p style="padding-left: 30px;">• EBS assure une durabilité très respectable par réplication réseau, mais reste l’équivalent d’un disque dur, même si plus fiable,</p>
<p style="padding-left: 30px;">• il n’y a pas que les données de base SQL (ou autres) qui sont importantes, il y a également vos logs principaux et les configurations de vos outils (Cacti, Puppet, Capistrano, …).</p>
<p>Nous utilisons l’outil en ligne de commande « s3cmd » afin de stocker nos backups. Cet outil est utilisé dans nos tâches Capistrano appelées par cron. Très simple d’utilisation, il nous permet d’utiliser les API’s S3 et offre la possibilité de transférer les données en HTTPS et également de les stocker sous un format crypté.</p>
<p><em><strong>Tips and tricks<br />
</strong><span style="text-decoration: underline;">DNS</span></em><br />
Il arrive de rencontrer quelques soucis DNS au niveau du réseau Amazon pour les instances EC2. Un conseil donc, positionner des hostname plus parlant (au lieu des « domu -xxxx») et utilisez le fichier des « hosts » que vous déployez ensuite via Puppet !</p>
<p><em><span style="text-decoration: underline;">CDN</span></em><br />
Nous utilisons S3 dans notre architecture afin de mettre à disposition les images et autres statiques de notre application à disposition de notre Content Delivery Network, à savoir Panther. Inutile, en effet, de maintenir un serveur Web à cette seule fin, S3 est là pour ça pour un coût minime.</p>
<p><em><span style="text-decoration: underline;">Gestion des Logs<br />
</span></em>Il serait, à mon avis intéressant, de gérer également les logs de manière centralisée. Nous ne l’avons pas mis en place et, par conséquent, je ne ferai pas de recommandations sur un sujet que je n’ai pas testé moi-même. Cependant, pour indication, il est possible de mettre en place un système de logs réseaux, sous Linux par exemple, afin de centraliser et de mutualiser les logs, logs qu’il est ensuite possible d’analyser. Ca vaut le coup pour une infrastructure ou une application distribuée de connaître le comportement ou les différences de comportement des éléments qui la constitue.</p>
<p><em><span style="text-decoration: underline;">Webistrano</span></em><br />
<a href="http://labs.peritor.com/webistrano" title="Site de Webistrano">Webistrano</a> est une IHM permettant d’accéder aux fonctionnalités de Capistrano et introduisant une notion de gestion de projet par la possibilité de gérer les accès aux tâches en fonction de son profil, de tracer qui a déployé quoi sur quel serveur et d’envoyer des alertes mails sur certaines actions. Nous ne l’avons pas testé en production, mais cela peut s’avérer intéressant à prendre en considération.</p>
<p><strong><em>Conclusion</em></strong><br />
Le but de ce post n’est pas de faire la publicité de tel ou tel outil, mais de vous inciter à considérer l’automatisation de votre infrastructure qui, si elle devrait déjà être en place dans vos infrastructures actuelles internes, devient indispensable sous AWS pour peu que l’on souhaite faire de la scalabilité, être réactif ou simplement tirer parti de l’outil mis à disposition.</p>
<p>Je dirais que les principes fondamentaux d’une bonne infrastructure sont au nombre de 3 : KISS, DRY et YAGNI.</p>
<p style="padding-left: 30px;">• KISS pour « Keep It Simple, Stupid », à savoir inutile de chercher à complexifier l’infrastructure, la plus efficace sera la plus simple.</p>
<p style="padding-left: 30px;">• DRY pour « Don&#8217;t Repeat Yourself » , à savoir ce qu’il est possible de scripter et d’automatiser faites-le ! Ca vous prendra un peu plus de temps la première fois, mais vous aurez une tâche réfléchie, reproductible, et vous n’aurez surtout pas besoin de le faire une seconde fois (quoi de plus ennuyeux que de se répéter).</p>
<p style="padding-left: 30px;">• YAGNI pour « You Ain&#8217;t Gonna Need It », à savoir n’installez sur vos machine que ce dont vous avez besoin. Plus vous installerez d’outils inutiles ou one-shot, plus votre infrastructure aura potentiellement des trous de sécurité et pourra introduire des effets de bords. Sans aller forcément jusque là, disons qu’elle sera moins facilement maintenable.</p>
<p>Ces principes vous paraissent drôles pour certains ou peut-être un peu ringard pour d’autres, mais si avant de faire une tâche sur une infrastructure on se demandait si ce que l’on va entreprendre ne rentre pas dans un de ces cas, je pense que les infrastructures, de manière générale, seraient plus fiables, homogènes et performantes.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><em><strong>Frédéric FAURE</strong></em></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2009/05/cloud-computing-mise-en-place-infrastructure-aws-best-practices/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

