<?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>Fillito &#187; Amazon Web Services</title>
	<atom:link href="http://www.fillito.com/blog/category/amazon-web-services/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fillito.com/blog</link>
	<description>Blog Personal de Daniel García</description>
	<lastBuildDate>Thu, 24 Mar 2011 18:44:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Servidor MySQL persistente sobre EC2 y EBS</title>
		<link>http://www.fillito.com/blog/servidor-mysql-persistente-sobre-ec2-y-ebs-07-2009</link>
		<comments>http://www.fillito.com/blog/servidor-mysql-persistente-sobre-ec2-y-ebs-07-2009#comments</comments>
		<pubDate>Thu, 02 Jul 2009 13:30:15 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[EBS]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=865</guid>
		<description><![CDATA[Uno de los grandes "problemas" que tiene EC2 de Amazon, es que sus unidades de almacenamiento no son persistentes. Esto quiere decir que en cuanto apaguemos nuestra(s) instancia(s), todos los datos almacenados se volatilizarán. La primera solución que se nos puede venir a la cabeza, podría ser apoyarnos en el servicio S3 para ir haciendo [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los grandes "problemas" que tiene EC2 de Amazon, es que sus unidades de almacenamiento no son persistentes. Esto quiere decir que en cuanto apaguemos nuestra(s) instancia(s), todos los datos almacenados se volatilizarán.<br />
La primera solución que se nos puede venir a la cabeza, podría ser apoyarnos en el servicio <a href="http://aws.amazon.com/s3/">S3</a> para ir haciendo backup de nuestros datos continuamente y así, al apagar nuestra instancia, podríamos recuperar todos nuestros datos. Por supesto, esta solución es poco fiable si nuestros datos varían continuamente (como una Base de Datos), ya que si apagamos nuestra instancia o esta falla en el lapso de tiempo entra backup y backup, seguiríamos perdiendo los últimos cambios.</p>
<p>Afortunadamente, Amazon <a href="http://www.fillito.com/blog/amazon-lanza-elastic-block-store-08-2008">lanzó EBS (Elastic Block Store)</a>, un servicio de almacenamiento persistente que nos permite montar un volumen de datos como unidad de almacenamiento sobre <a href="http://aws.amazon.com/ec2/">EC2</a>.</p>
<p>Vamos a ver cómo aprovechar EBS para configurar una máquina en EC2 como servidor MySQL con almacenamiento persistente.</p>
<p><span id="more-865"></span></p>
<p><strong>1. Reservar un volumen EBS</strong></p>
<p>Lo primero de todo, es solicitar un nuevo volumen EBS para poder montarlo en nuestra instancia EC2.<br />
Para ello, abrimos Elasticfox (que vimos en una <a href="http://www.fillito.com/blog/primeros-pasos-en-ec2-05-2009">entrada anterior</a>) y accedemos a la sección "Volumes and Snapshots". La primera sección corresponde a los volúmenes (EBS) que tenemos reservados, y la segunda a los backups de esos volúmenes. Cada snapshot (backup) nos servirá para lanzar un nuevo volumen que incluya nuestros datos previamente salvados.<br />
El procedimiento es de lo más sencillo. Simplemente hacemos click en el botón verde (+) de la sección "Volumes" y nos aparecerá un pequeño formulario para configurar nuestro nuevo volumen.</p>
<p style="text-align: center;"><a href="http://www.fillito.com/blog/wp-content/uploads/ebs2.png"><img class="size-full wp-image-889 aligncenter" title="ebs2" src="http://www.fillito.com/blog/wp-content/uploads/ebs2.png" alt="ebs2" width="434" height="185" /></a></p>
<p>Definir el tamaño en GB del volumen: Esa será la cantidad máxima de datos que podrá almacenar nuestro nuevo volumen, por lo que es recomendable tener una idea de para qué vamos a utilizarlo antes de crearlo y así poder estimar el espacio que necesitaremos.<br />
Elegir el snapshot a partir del cual queremos iniciar nuestro nuevo volumen: Para un nuevo volumen, simplemente dejamos este campo por defecto en "&lt;none&gt;"<br />
Zona de disponibilidad: Este es uno de los puntos más importantes a la hora de crear nuestro volumen, ya que un volumen sólo puede ser accesible desde una instancia EC2 <strong>en la misma zona de disponibilidad</strong>. En caso de equivocarnos, o querer adjuntarlo a una nueva instancia en otra zona, podremos crear un snapshot, y a partir de él lanzar un nuevo volumen en otra zona.<br />
Tag: Este campo es totalmente opcional y sirve para etiquetar nuestro nuevo volumen. Es bastante útil a la hora de manejar muchos volúmenes distintos y automatizar su gestión.</p>
<p><strong>2. Adjuntar el volumen a una intancia</strong></p>
<p>Ningún misterio. Simplemente hacemos click en el botón verde en forma de "tick" (o click derecho sobre el volumen y elegimos "Attach this volume"), y accederemos a un nuevo formulario en el que podremos elegir una de nuestras instancias disponibles en nuestra zona, y un campo donde definiremos el dispositivo desde el que queremos hacer disponible nuestro volumen. Como véis, Elasticfox nos avisa de que, para una máquina Linux, tenemos disponible cualquier dispositivo desde /dev/sda hasta /dev/sdp. Para este tutorial yo he elegido /dev/sdh. Por supuesto, podéis usar el que queráis (pero tenedlo en cuenta en los comandos y scripts que veamos).</p>
<p style="text-align: center;"><a href="http://www.fillito.com/blog/wp-content/uploads/ebs1.png"><img class="size-full wp-image-890 aligncenter" title="ebs1" src="http://www.fillito.com/blog/wp-content/uploads/ebs1.png" alt="ebs1" width="416" height="215" /></a></p>
<p><strong>3. Formatear y montar nuestra unidad</strong></p>
<p>Una vez adjuntado el volumen a nuestra instancia a través del dispositivo /dev/sdh, lo formatearemos en <a href="http://es.wikipedia.org/wiki/Ext3">ext3</a> para tener acceso a él como unidad de almacenamiento (vosotros lo formateáis con el sistema de archivos que más os guste ). Para ello ejecutamos</p>
<div class="igBar"><span id="lcode-7"><a href="#" onclick="javascript:showPlainTxt('code-7'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-7">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mkfs.<span style="">ext3</span> /dev/sdh </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Creamos un nuevo directorio</p>
<div class="igBar"><span id="lcode-8"><a href="#" onclick="javascript:showPlainTxt('code-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-8">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mkdir /mnt/ebs </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Y montamos la unidad en él</p>
<div class="igBar"><span id="lcode-9"><a href="#" onclick="javascript:showPlainTxt('code-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-9">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mount -t ext3 /dev/sdh /mnt/ebs </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>4. Llevar MySQL a nuestro EBS</strong></p>
<p>No voy a explicar cómo instalar MySQL en vuestra máquina, porque presuponemos que ese paso ya está superado. Aún así, si no sabes cómo, seguro que fácilmente encontrarás  algún tutorial de cómo instalar MySQL en vuestra distro preferida (como éste <a href="http://www.guia-ubuntu.org/index.php?title=MySql">para Ubuntu</a>).<br />
El procedimiento para mover MySQL a EBS es sencillo. Simplemente moveremos el directorio mysql a nuestra nueva unidad, y crearemos un enlace simbólico desde su directorio original. De ésta manera, los datos estarán físicamente en EBS y virtualmente en el directorio original de mysql.</p>
<p>Primero movemos los datos ejecutando (Es importante haber apagado el servicio de mysql antes de proceder)</p>
<div class="igBar"><span id="lcode-10"><a href="#" onclick="javascript:showPlainTxt('code-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-10">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mv /var/lib/mysql /mnt/ebs/mysql </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Y creamos el enlace</p>
<div class="igBar"><span id="lcode-11"><a href="#" onclick="javascript:showPlainTxt('code-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-11">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ln -s /mnt/ebs/mysql /var/lib </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>(si vuestro mysql no está instalado en /var/lib/mysql, usais vuestro directorio)</p>
<p>Ya sólo nos queda volver a arrancar el servicio de mysql y volver a generar nuestro AMI para no perder los cambios.</p>
<p><strong>5. Automatizar el montaje de nuestra unidad EBS</strong></p>
<p>Como os imaginaréis, si lanzamos una nueva instancia de nuestra AMI, aunque tendrá creado el enlace simbólico en /var/lib, nuestro volumen EBS no estará montado en /mnt/ebs.<br />
Para facilitaros un poco el trabajo, <a href="http://www.fillito.com/blog/wp-content/uploads/ebsmount.sh">he creado un pequeño script</a> de bash que "escucha" hasta que está disponible el dispositivo /dev/sdh , para crear el directorio /mnt/ebs y montar en él el dispositivo. Como es evidente, este script nos "obliga" a adjuntar siempre el volumen en /dev/sdh.</p>
<p>Para que el script se ejecute nada más encender nuestra instancia, podemos editar nuestro archivo /etc/rc.local y añadir el siguiente comando</p>
<div class="igBar"><span id="lcode-12"><a href="#" onclick="javascript:showPlainTxt('code-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-12">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">./root/ebsmount.<span style="">sh</span> &amp; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Esto ejecutará el script en background en el momento de arrancar la máquina.</p>
<p>Después de esto, ya simplemente tendremos que levantar una nueva instancia y adjuntarle el volumen EBS que hemos creado, y tendremos nuestra máquina EC2 con servicio MySQL con almacenamiento de datos persistente.</p>
<p>Por supuesto, se podría automatizar el proceso de adjuntar el volumen a la nueva instancia, de manera que sólo tuviéramos que levantar una nueva instancia y listo. Pero para ello habría que trabajar con la API de EBS y eso es otra guerra. Quizás en un futuro hable de ello.</p>
<p>Espero que, aún así, lo visto en esta entrada os sea útil.</p>
<p>Un saludo !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/servidor-mysql-persistente-sobre-ec2-y-ebs-07-2009/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Crea tu propio AMI basado en Ubuntu, para EC2</title>
		<link>http://www.fillito.com/blog/crea-tu-propio-ami-basado-en-ubuntu-para-ec2-05-2009</link>
		<comments>http://www.fillito.com/blog/crea-tu-propio-ami-basado-en-ubuntu-para-ec2-05-2009#comments</comments>
		<pubDate>Sun, 10 May 2009 17:52:48 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=794</guid>
		<description><![CDATA[En el anterior post explicaba los primeros pasos EC2 donde explicaba todo el proceso desde que nos creamos una cuenta AWS para EC2 , hasta que teníamos nuestra instancia levantada y con con acceso ssh. En esta nueva entrega, voy a contar los pasos a seguir para crear nuestro propio AMI a partir de la [...]]]></description>
			<content:encoded><![CDATA[<p>En el anterior post explicaba los <a href="http://www.fillito.com/blog/primeros-pasos-en-ec2-05-2009">primeros pasos EC2</a> donde explicaba todo el proceso desde que nos creamos una cuenta AWS para EC2 , hasta que teníamos nuestra instancia levantada y con con acceso ssh.</p>
<p>En esta nueva entrega, voy a contar los pasos a seguir para crear nuestro propio AMI a partir de la instancia que hayamos levantado, y almacenarla en nuestra cuenta de S3 para posteriormente lanzar nuevas instancias con ella.</p>
<p><strong>¿Por qué me interesa crearme un AMI?</strong></p>
<p>Lo primero de todo es entender por qué nos interesa crearnos un AMI y no utilizar AMIs ya generadas.<br />
Una de las características de EC2, es que la única manera de levantar una instancia es a partir de un AMI. Esto quiere decir que si apagamos nuestra instancia o, por algún problema en Amazon, se apagara accidentalmente (a mí en dos años nunca me ha pasado, pero nunca se sabe...), o necesitamos de una instancia adicional para multiplicar nuestra capacidad de procesamiento, la única manera de levantarla es volviendo a utilizar un AMI.<br />
Como es más que probale, las necesidades de nuestra aplicación requerirá que la instancia esté provista de determinado software o configuración, diferente a la que nos ofrece un sistema base. Por eso, tanto por seguridad (backup) como por escalabilidad, es imprescindible generar nuestra propia AMI.</p>
<p><span id="more-794"></span></p>
<p><strong><br />
Primer paso: Instalando el software necesario</strong></p>
<p>Basándome en el anterior tutorial, supondremos que para levantar nuestra instancia utilizamos el AMI <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1952&amp;categoryID=101"><strong>ami-bf5eb9d6</strong></a> , una Ubuntu 9.04 base sin software adicional preinstalado.</p>
<p>Si usamos Ubuntu 9.04 es muy muy sencillo el proceso de creación de un AMI (de ahí mi recomendación), por lo que si no eres muy experto como administrador de sistemas Linux/Unix, y es la primera vez que te enfrentas al proceso de crear un AMI, piénsatelo dos veces antes de elegir otra distribución. Yo personalmente tuve muchísimos quebraderos de cabeza con otras distros como Fedora o Gentoo (módulos del kernel necesarios no instalados, repositorios desactualizados, librerías no instaladas, necesidad de compilar las aplicaciones, etc... )</p>
<p>Esto no quiere decir ni mucho menos, que sólo se pueda utilizar Ubuntu. De hecho hay muchísima gente que utiliza Fedora en EC2. Todo depende de tus necesidades, de tu nivel de conocimientos, y del tiempo que quieras/puedas dedicarle a preparar tu instancia antes de generar un AMI. Lo que si te puedo asegurar es que esta es la forma más sencilla, rápida y cómoda para hacerlo. Sobre todo si te estás iniciando en EC2.</p>
<p>Para generar nuestro AMI necesitaremos la herramienta oficial de Amazon <strong>ec2-ami-tools</strong>, que nos permitirá tanto generar el AMI como subirlo a nuestra cuenta de S3.</p>
<p>En Ubuntu 9.04 tendremos que tener <a href="https://help.ubuntu.com/community/Repositories/CommandLine#Adding%20the%20Universe%20and%20Multiverse%20Repositories">activados los repositorios Multiverse</a> (fijate que en el link explica cómo activar los repositorios universe y multiverse para hardy, y la 9.04 es <strong>jaunty</strong>). Es probable que si elegiste el AMI que yo propongo para levantar la primera instancia, los repositorios multiverse ya vengan activados, pero no está de más asegurarse.<br />
Una vez hecho esto, simplemente ejecuta por consola y ya tendremos instalado el EC2 AMI Tools</p>
<div class="igBar"><span id="lcode-18"><a href="#" onclick="javascript:showPlainTxt('code-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-18">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo apt-get update</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">sudo apt-get install ec2-ami-tools </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Si has preferido utilizar como base otra distro de Linux distinta a Ubuntu, también puedes <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=368">descargar EC2 AMI Tools</a> en .rpm, y si tu distro no soporta rpm, puedes tratar de convertirlo con algún conversor de paquetes. Si usas una versión antigua de Ubuntu, puedes utilizar <a href="http://www.fillito.com/blog/alien-conversor-de-paquetes-08-2007">Alien</a> para crear tu .deb</p>
<p><strong></strong></p>
<p><strong>Segundo Paso: Obteniendo los Certificados X.509</strong></p>
<p>Cuando creamos un AMI, esta pasa a pertenecer al usuario AWS que la creó, certificadas internamente por <a href="http://es.wikipedia.org/wiki/X.509">certificados X.509</a> que autentican la pertenencia al usuario en el momento de intentar instanciarlas.</p>
<p>Lo primero que tenemos que hacer es acceder a nuestro perfil de AWS en la sección <a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key">Access Identifiers</a>. Allí encontremos una sección llamada X.509 donde podremos pedir a Amazon que nos genere nuestro certificado ("Create New").</p>
<p><img class="aligncenter size-full wp-image-801" title="creatuami-1" src="http://www.fillito.com/blog/wp-content/uploads/creatuami-1.png" alt="creatuami-1" width="500" height="248" /></p>
<p>Si ya habías creado un certificado anteriormente, nos avisará de que sólamente podemos tener un único certificado por cuenta, por lo que si continuamos el anterior certificado quedará inservible.</p>
<p>Inmediatamente llegaremos a una página donde podemos descargar dos archivos .pem. El primero es el archivo de Clave Privada, y el segundo el Certificado X.509</p>
<p><img class="aligncenter size-full wp-image-802" title="creatuami-2" src="http://www.fillito.com/blog/wp-content/uploads/creatuami-2.png" alt="creatuami-2" width="500" height="513" /></p>
<p>Amazon lo avisa en ésta misma página, pero yo vuelvo a insistir : <strong>Guarda en un lugar seguro </strong>el archivo de clave Privada !!<br />
El Certificado lo podrás descargar nuevamente si lo pierdes, pero el archivo de Clave Privada no. Tendrás que generar uno nuevo, y no es algo que te recomiendo. Como comenté, el certificado (y por ende, la clave privada) se utilizan para autenticar la pertenencia de cada AMI. Como podrás imaginar, si generas un AMI con un certificado y lo pierdes, al generar un nuevo certificado tu cuenta de AWS quedará asociada a éste nuevo, por lo que el AMI generada será como si no fuera tuya. Aunque esté alojada en tu propia cuenta de S3. Avisado quedas ! <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>El siguiente paso será subir los dos archivos .pem a nuestra instancia.</p>
<p>¿Cómo?</p>
<p>Pues como más cómodo te resulte... <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
Si tienes una consola Unix puedes ejecutar<br />
<strong> scp &lt;private_keyfile&gt; &lt;certificate_file&gt; root@&lt;dns_location&gt;:/mnt</strong></p>
<p>Donde &lt;private_keyfile&gt; &lt;certificate_file&gt; sean las rutas de tus dos archivos .pem</p>
<p>Yo personalmente prefiero usar un cliente scp/sftp con GUI. En MAC OSX uso <a href="http://www.panic.com/transmit/">Transmit</a> (29.95 $), y en Windows usaba <a href="http://winscp.net/eng/docs/lang:es">WinSCP</a> (gratuito).<br />
Pero ya es cuestión de gustos.</p>
<p><strong><br />
Tercer Paso: Generando nuestro AMI</strong></p>
<p>Ya tenemos todo lo necesario para generar el AMI. Para facilitar el trabajo y no tener que escribir el mismo comando cada vez que queramos regenerar el AMI, os pongo adjunto (al final del post), dos scripts sh que harán el trabajo sucio por tí : ec-bundle.sh (para generar el AMI) y ec-upload.sh (para subir el AMI a tu cuenta de S3)</p>
<p>Simplemente tienes que editarlo para incluir los datos de tu cuenta, y dejarlos alojados en un directorio que se incluyan en el AMI (yo dejo los mios en /root que es el directorio que accedo por defecto al entrar por ssh).</p>
<p>Para empezar editamos ec-bundle.sh, que incluye la siguiente linea de código:</p>
<div class="igBar"><span id="lcode-19"><a href="#" onclick="javascript:showPlainTxt('code-19'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-19">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ec2-bundle-vol -k <span style="color:#CC0000;">'pk-********************************.pem'</span> -c <span style="color:#CC0000;">'cert-********************************.pem'</span> -s <span style="color:#800000;color:#800000;">1000</span> -u ************ -d /mnt/ami/ </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>El primer grupo de "*", como podréis intuir, corresponde a la ruta del archivo de clave privada (el que empieza por pk-). El segundo es la ruta al archivo de certificado (el que empieza por cert-), y el último grupo corresponde a tu identificador de usuario EC2. Si no sabes cuál es tu identificador de usuario, simplemente abre tu Elasticfox (con el que levantamos la instancia en el tutorial anterior), y en la pestaña Instances, haz click derecho sobre tu instancia y entra en View Details. Ahí encontraremos un campo llamado Owner ID. Ese es nuestro identificador de usuario !!</p>
<p><img class="aligncenter size-full wp-image-803" title="creatuami-3" src="http://www.fillito.com/blog/wp-content/uploads/creatuami-3.png" alt="creatuami-3" width="500" height="698" /></p>
<p>Una vez guardados los cambios, ya podemos ejecutar el script escribiendo</p>
<div class="igBar"><span id="lcode-20"><a href="#" onclick="javascript:showPlainTxt('code-20'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-20">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">./ec-bundle.<span style="">sh</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Deberíais obtener algo parecidoa a :</p>
<p><img class="aligncenter size-full wp-image-804" title="creatuami-4" src="http://www.fillito.com/blog/wp-content/uploads/creatuami-4.png" alt="creatuami-4" width="465" height="645" /></p>
<p>Si es así , es que todo ha ido bien y ya tenemos nuestra AMI creada. Si te fijas, hay un listado de directorios que son omitidos a la hora de generar el AMI, por lo que procura que tu aplicación no incluya ninguno de esos directorios o ficheros. Si por algún casual la lista de directorios excluidos por defecto no satisficiera tus necesidades, consulta la <a href="http://docs.amazonwebservices.com/AWSEC2/2007-08-29/DeveloperGuide/CLTRG-ami-bundle-vol.html">documentación de ec-bundle-vol</a> para especificar otra lista de directorios o fichero a excluir.</p>
<p><strong>Quinto Paso: Subir nuestro AMI personalizado a S3</strong></p>
<p>Ya sólo nos queda modificar ec-upload.sh con nuestros datos de acceso a S3. Si lo editas verás la linea</p>
<div class="igBar"><span id="lcode-21"><a href="#" onclick="javascript:showPlainTxt('code-21'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-21">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ec2-upload-bundle -b $<span style="color:#800000;color:#800000;">1</span> -m /mnt/ami/image.<span style="">manifest</span>.<span style="">xml</span> -a ******************** -s **************************************** </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>El primer grupo de "*" corresponde a tu Access Key Id, y el segundo a tu Secret Access Key. Ambas las puedes encontrar en tu perfil de usuario AWS en la sección <a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key">Access Identifiers</a>. El parametro siguiente al modificador -b corresponde al nombre del bucket de nuestra cuenta S3 donde queremos almacenar el AMI.<br />
Te habrás fijado que como nombre del bucket he puesto $1. Si no estás familiarizado con el <a href="http://en.wikipedia.org/wiki/Shell_script">Shell Scripting</a>, simplemente tienes que saber que esa es la forma de acceder al primer parámetro que le hayamos pasado al ejecutar el script. Esto lo he dejado así porque es probable que cada vez que quieras rehacer el AMI lo quieras guardar en un bucket distinto (para guardar de forma incremental el ami en buckets que incluyan la fecha  de generación por ejemplo).</p>
<p>De ésta manera, simplemente ejecutaríamos</p>
<div class="igBar"><span id="lcode-22"><a href="#" onclick="javascript:showPlainTxt('code-22'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-22">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">./ec-upload.<span style="">sh</span> nombre-del-bucket </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Y comenzaría el proceso de upload.<br />
Si lo que quisieramos es guardar siempre el AMI en el mismo bucket, simplemente sustituye "$1" por el nombre del bucket y listo.</p>
<p>Nota: ec2-upload-bundle genera el bucket en S3 si no existe, por lo que no es imprescindible crear el bucket previamente para subir nuestro AMI</p>
<p><strong>Sexto y último Paso: Registrar nuestro AMI</strong></p>
<p>Como habrás podido comprobar al lanzar una instancia, siempre se hace utilizando un id de ami. Esto es porque Amazon tiene una base de datos de todas las AMIs generadas y listas para instanciar, lo que nos obliga a registrar nuestro AMI recién creado para que nos asignen un id.</p>
<p>Para ello simplemente abrimos Elasticfox, y nos vamos a la sección de Images. Allí encontrarás un botón de "Registe AMI". Hacemos click en él y nos preguntará el AMI Manifest Path.</p>
<p>Siemplemente tenemos que poner : <strong>nombre-de-nuestro-bucket/image.manifest.xml</strong></p>
<p>En unos pocos segundos veremos como una nueva AMI aparece en nuestra lista de AMIs disponibles, con su nuevo id asignado. Para encontrarla en un futuro podemos apuntarnos su id y utilizarlo, buscarla por el nombre del bucket, o simplemente ordenar por Visibility y aparecerá entre las "private".</p>
<p><strong>Comentarios Finales...</strong></p>
<p>Ya tenemos lista nuestra propia AMI !<br />
Simplemente añadir que cuando registramos un AMI, Amazon asocia el id generado con la ruta del Manifest (el archivo .xml que se genera junto a nuestra AMI). Si queremos rehacer nuestro AMI para incluir nuevos cambios en nuestra aplicación, y lo guardamos en el mismo bucket, sin modificar el nombre del Manifest, no será necesario volver a registrar el AMI.</p>
<p>Bueno, espero que os haya sido útil y os haya gustado</p>
<p>Cualquier comentario, crítica o alguna cosilla más que queráis que añada, no dudéis en avisarme.</p>
<p>Un Saludo !!</p>
<p><strong>Scripts Adjuntos:</strong></p>
<p><a href="http://www.fillito.com/blog/wp-content/uploads/ec-bundle.sh">ec-ubundle</a><br />
<a href="http://www.fillito.com/blog/wp-content/uploads/ec-upload.sh">ec-upload</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/crea-tu-propio-ami-basado-en-ubuntu-para-ec2-05-2009/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Primeros Pasos en EC2</title>
		<link>http://www.fillito.com/blog/primeros-pasos-en-ec2-05-2009</link>
		<comments>http://www.fillito.com/blog/primeros-pasos-en-ec2-05-2009#comments</comments>
		<pubDate>Sat, 09 May 2009 13:39:18 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[keypair]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[puttygen]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=771</guid>
		<description><![CDATA[EC2 (Elastic Computing Cloud) es uno de los productos estrella de Amazon Web Services, y como su nombre claramente anuncia, se trata de un servicio de Cloud Computing para procesamiento bajo demanda. EC2 permite crear instancias de procesamiento (servidores remotos virtuales) a los que podemos tener acceso como si de un servidor remoto cualquiera se [...]]]></description>
			<content:encoded><![CDATA[<p><strong>EC2</strong> (Elastic Computing Cloud) es uno de los productos estrella de Amazon Web Services, y como su nombre claramente anuncia, se trata de un servicio de Cloud Computing para procesamiento bajo demanda.<br />
EC2 permite crear instancias de procesamiento (servidores remotos virtuales) a los que podemos tener acceso como si de un servidor remoto cualquiera se tratase. Podremos instalar servicios web, ssh, de bases de datos, escritorios remotos , etc...</p>
<p>En éste pequeño tutorial voy a exponer los primeros pasos que hay que dar para utilizar EC2, y algunos consejos basados en mi experiencia en éste proceso.</p>
<p>El funcionamiento es muy sencillo.<br />
Una vez hayamos <a href="http://aws.amazon.com/ec2/">creado nuestra cuenta de EC2</a> , tendremos a nuestra disposición un enorme catálogo de AMIs (Amazon Machine Image), que no son otra cosa que imágenes pregeneradas de distintos sistemas operativos, con las que levantar nuestra instancia de procesado EC2.<br />
Existen dos tipos de AMI's :</p>
<p>- <strong>Públicas</strong>: Disponibles para cualquier usuario de forma gratuita y puestas a disposición tanto por Amazon, como por otros usuarios que deseen comprartir su propia AMI con el resto de la comunidad<br />
- <strong>Privadas</strong>: Que solo estarán disponibles para el propietario de esta AMI, o para el resto de la comunidad, previo pago, en el caso de que el usuario haya configurado el servicio de AMIs de pago.</p>
<p>Lo normal cuando trabajemos con EC2, es que nos creemos nuestra propia AMI privada con todas las aplicaciones que necesitemos en nuestras tareas, para así poder levantar instancias de ésta en cualquier momento.</p>
<p><span id="more-771"></span><strong>Ya tengo mi cuenta creada ¿ Ahora qué ?</strong></p>
<p>Amazón pone a disposición una API con la que interactuar para todas las acciones relacionadas con EC2. Con ésta API puedes solicitar una instancia, apagar las que ya tienes levantadas, etc...<br />
Todo ésto nos requeriría un gran trabajo en desarrollo para crearnos nuestra propia interfaz para interactuar con la API de EC2, lo que no es muy grato si lo que quieres es probar el servicio.</p>
<p>Afortunadamente, existen alguna herramientas desarrolladas por Amazon que nos facilitarán todo el trabajo de interacción con las APIs de EC2.  (ojalá hubieran existido cuando yo empecé a trabajar con EC2 ...)</p>
<p>Una de ellas (la que yo utilizo y con la que guiaré este tutorial) es <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609">Elasticfox</a>, una extensión para firefox que incorpora en tu navegador todas las funciones necesarias para administrar tu cuenta de EC2. Yo repasaré las funciones básicas en este tutorial, pero si quieres información más detallada y extendida, consulta la <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1797">guía oficial</a>.</p>
<p>Otra herramienta de muy reciente aparición es <a href="https://console.aws.amazon.com/">AWS Managment Console</a>. Una completa consola de administración de EC2 y otros servicios de AWS (de momento sólo Elastic MapReduce) vía web.</p>
<p><strong>Primer Paso: Autenticación</strong></p>
<p>En nuestro perfil de AWS podemos encontrar nuestras claves de acceso a AWS: el Access Key ID , y el Secret Access Key. Ambas necesarias para todas nuestras autenticaciones.</p>
<p>Una vez hayamos instalado Elasticfox, creamos un perfil introduciendo nuestras dos claves de AWS.<br />
La autenticación para acceder a una instancia de EC2, no se realiza con un usuario y contraseña, sino con un archivo de <a href="http://es.wikipedia.org/wiki/Claves_RSA">claves privada RSA</a>. Si no tienes experiencia con éste tipo de autenticaciones, no te preocupes, porque es muy sencillo.</p>
<p>Lo primero que tenemos que hacer es generar nuestro archivo de clave privada. Para ello, simplemente vamos a la pestaña Keypairs de Elasticfox y hacemos click en el botón verde de "Create new keypair". Elasticfox nos pedirá un nombre para el nuevo keypair. Podéis usar el que más os guste. Yo en mi caso la he llamado "fillito-keypair".<br />
En cuanto aceptemos el nombre, nuestro navegador tratará de descargar el archivo keypair, que debería tener como nombre "id-nombre-de-vuestro-keypair".</p>
<p>Nota : Es muy importante <strong>guardar a buen recaudo</strong> éste archivo, ya que si lo perdemos, perderemos el acceso a todas las instancias que hayamos levantado usando este keypair.</p>
<p><img class="aligncenter size-full wp-image-780" title="ec2tutorial-1" src="http://www.fillito.com/blog/wp-content/uploads/ec2tutorial-1.png" alt="ec2tutorial-1" width="500" height="200" /></p>
<p><strong>Segundo Paso: Security Groups</strong></p>
<p>El siguiente paso es el de crear un security group, o modificar el que viene creado por defecto. Un security group, es un conjunto de reglas de acceso a nuestra instancia. En él definimos los puertos a los que queremos permitir acceso, desde qué máquinas , etc...  Algo así como un firewall, pero más sencillo.</p>
<p><img class="aligncenter size-full wp-image-782" title="ec2tutorial-2" src="http://www.fillito.com/blog/wp-content/uploads/ec2tutorial-2.png" alt="ec2tutorial-2" width="500" height="175" /></p>
<p>Si quieres definir una regla para cualquier máquina externa a la instancia (servicios ssh, web, ftp ... ) tendrás que poner 0.0.0.0/0 en el campo Host.</p>
<p><strong>Tercer Paso: Elegir un AMI para lanzar nuestra instancia</strong></p>
<p>Ya sólo nos queda elegir el AMI que queremos lanzar para nuestra nueva instancia.</p>
<p>Como ya comenté, tienes un amplio catálogo de AMIs entre las que se incluyen imágenes Linux (Fedora, Ubuntu, Gentoo,... ) o Windows, tanto e arquitectura i386 como x64. Incluso encontraremos imágenes con software precargado y preconfigurado.</p>
<p>Yo personalmente prefiero usar una Ubuntu limpia para poder instalar mis aplicaciones. Últimamente estoy usando una Ubuntu 9.04.</p>
<p>La elección del AMI es uno de los puntos más sensibles de todo el proceso, ya que elegir una mala distribución nos puede traer problemas en el futuro por no tener determinados paquetes disponibles.</p>
<p>Después de muchas pruebas, muchos dolores de cabeza, y muchos problemas que me llevaron más de 2 o 3 días solucionar, he encontrado la que para mí es el AMI más compatible con mis necesidades. Su id , por si queréis empezar a trabajar con ella es <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1952&amp;categoryID=101"><strong>ami-bf5eb9d6</strong></a>, y fué generada por <a href="http://alestic.com/">Alestic</a>, un grupo que genera imágenes públicas gratuitas de Ubuntu para EC2. Podéis probar a lanzar cualquiera de sus otras AMIs, pero os recomiendo encarecidamente que lancéis Ubuntu Server si no queréis tener problemas a la hora de generar vuestra propia AMI basada en éstas.</p>
<p><img class="aligncenter size-full wp-image-783" title="ec2tutorial-3" src="http://www.fillito.com/blog/wp-content/uploads/ec2tutorial-3.png" alt="ec2tutorial-3" width="500" height="372" /></p>
<p>Para lanzar una instancia del AMI que hayamos elegido, simplemente nos vamos a la pestaña Images de Elasticfox, introducimos el id del AMI en el buscador de AMIs (o seleccionamos de la lista inferior). Una vez tengamos localizada el AMI que queremos, la seleccionamos y hacemos click en el botón verde "Launch Instance(s)" y nos aparecerá la ventana que vemos en la captura.</p>
<p>Si os fijáis, aquí tendremos que seleccionar el Keypair y el Security Group con el que queremos lanzar la instancia.</p>
<p>Dependiendo de dónde esté alojada el AMI, podremos lanzar la instancia en una u otra Availability Zone (USA o Europe). Yo he dejado seleccionado &lt;any&gt; para que escoja él mismo cualquiera de las zonas disponibles (en éste caso, el AMI está en USA, por lo que las instancias estarán en USA). Existe la posibilidad de traspasar un AMI de una zona a otra, para poder lanzar instancias en otra zona. Pero eso ya lo explicaré en otro tutorial <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Unos pocos segundos después de hacer click en Launch, ya tendremos disponible nuestra instancia para poder acceder a ella.</p>
<p><img class="aligncenter size-full wp-image-784" title="ec2tutorial-4" src="http://www.fillito.com/blog/wp-content/uploads/ec2tutorial-4.png" alt="ec2tutorial-4" width="500" height="231" /></p>
<p>Cuando nuestra instancia haya cambiado su status a "running", ya estará lista para acceder a ella.</p>
<p>Para ello simplemente hacemos click derecho sobre la instancia, y seleccionamos "Copy Public DNS Name to clipboard", para obtener el nombre de dominio que se nos ha asignado y así poder acceder por ssh.</p>
<p><strong>¿ Cómo hago para acceder por ssh, intento acceder y me da Access Denied ?</strong></p>
<p>Si has intentado acceder vía ssh y no has podido, lo más probable es que no estés accediendo usando la keypair para autenticarte.</p>
<p>Lo normal, es que el usuario de acceso sea root (lo suele especificar la documentación que hay publicado el que creó la instancia).  Como estamos usando una clave privada para acceder, no tenemos que usar  ningún password.</p>
<p><strong>Accediendo con clave privada desde Windows</strong></p>
<p>La mejor forma de acceder con clave privada por ssh, es usando <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">Putty</a>. Tenéis que fijaros que Putty no utiliza el RSA que nos ha generado Amazon, sino que utiliza un archivo propio de claves (.ppk). En la propia página de descarga de Putty, podéis encontrar una aplicación llamada puttygen, con la que crear un .ppk a partir de vuestro archivo keypair.</p>
<p><a href="http://www.aota.net/Telnet/puttykeyauth.php4">Aquí</a> podéis ver los pasos necesarios para generar vuestro ppk y crear una conexión que la use.</p>
<p><strong>Accediendo con clave privada desde MAC OSX<br />
</strong></p>
<p>Yo no he encontrado ningún programa que me permita acceder por ssh usando clave privada, así que la mejor manera es la de instalar la propia clave en un gestor de claves ssh. Yo uso <a href="http://www.sshkeychain.org/">SSHKeychain</a>, que es gratuito.</p>
<p>Para añadir nuestro archivo, simplemente vamos al apartado SSH Keys del programa, hacemos click en el "+", y añadimos nuestro archivo.</p>
<p><img class="aligncenter size-full wp-image-785" title="ec2tutorial-5" src="http://www.fillito.com/blog/wp-content/uploads/ec2tutorial-5.png" alt="ec2tutorial-5" width="518" height="730" /></p>
<p>Esto habilitará de forma global en nuestra máquina el keypair , para que podamos acceder utilizando cualquier programa sin tener que especificarle dónde está situado el archivo.<br />
Si abres una consola de terminal, puedes acceder a la instancia simplemente escribiendo <strong>ssh root@dns-name-de-nuestra-instancia</strong></p>
<p><strong>Próximamente más...</strong></p>
<p>En breve publicaré una nueva entrega, explicando paso a paso cómo crear tu propia AMI, con todo el software y configuraciónes que hayamos hecho, desde una instancia que ya hayamos levantado.</p>
<p>Espero que sea útil.</p>
<p>Un saludo !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/primeros-pasos-en-ec2-05-2009/feed</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>Abiquo visita minube</title>
		<link>http://www.fillito.com/blog/abiquo-visita-minube-02-2009</link>
		<comments>http://www.fillito.com/blog/abiquo-visita-minube-02-2009#comments</comments>
		<pubDate>Fri, 27 Feb 2009 00:42:49 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Minube]]></category>
		<category><![CDATA[Trabajos/Proyectos]]></category>
		<category><![CDATA[abiquo]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[nubeblog]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=497</guid>
		<description><![CDATA[Esta tarde hemos recibido la visita de dos miembros del equipo de Abiquo, que nos venían a contar un poco sobre su proyecto. Hasta hace unas semanas, que recibimos información sobre ellos y charlamos sobre la posibilidad de conocernos, no conocía su proyecto, y la verdad es que nos hemos quedados totalmente maravillados. Para el [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-499 alignleft" style="margin-left: 5px; margin-right: 5px;" title="abiquo" src="http://www.fillito.com/blog/wp-content/uploads/abiquo.png" alt=" " width="207" height="230" /></p>
<p>Esta tarde hemos recibido la visita de dos miembros del equipo de <a href="http://www.abiquo.com/">Abiquo</a>, que nos venían a contar un poco sobre su proyecto.<br />
Hasta hace unas semanas, que recibimos información sobre ellos y charlamos sobre la posibilidad de conocernos, no conocía su proyecto, y la verdad es que nos hemos quedados totalmente maravillados.</p>
<p>Para el que no conozca Abiquo, se trata de una plataforma destinada a facilitar la gestión y configuración de entornos de Cloud Computing. Entre sus muchas posibilidades, nos ofrece la posibilidad de montar nuestro propio Cloud Computing con nuestras máquinas basandonos en sistemas de virtualización, y tener conexiones con otros servicios de Cloud Computing (como Amazon Web Services) y/o data centers, que nos permita contar con sistemas de alta disponibilidad, muy muy fácilmente escalables.<br />
En resumidas cuentas: Si nuestras máquinas se quedan cortas por un inesperado pico de tráfico o de carga, nuestro sistema podrá levantar de forma transparente y  automatizada nuevas máquinas usando servicios de Cloud Computing externos, para posteriormente reestablecer la configuración original pasada la tormenta.</p>
<p>Nos impresionó la aparente (aún no he tenido ocasión de probarla) fácilidad de uso de la interfaz de gestión, y la sencillez y comodidad que supone a la hora de escalar nuestros sistemas.</p>
<p>Otra de sus grandes bazas, es que es un proyecto que ha sido <a href="http://loogic.com/abiquo-libera-su-plataforma/">liberado como Open Source</a>, por lo que podéis probarlo gratuitamente y jugar tanto como queráis con él.</p>
<p>Como dato curioso de la reunión, y que me hizo especial ilusión al enterarme cuando ya nos despedíamos. Es que junto a Helena Torras (Partner &amp; Interim Manager de Abiquo),  vino Diego Parrilla (Business Development Manager and Technology Strategist de Abiquo),  que es fundador de <a href="http://www.nubeblog.com">nubeblog</a>. Un gran blog  sobre Cloud Computing que sigo hace bastante.</p>
<p>Espero poder probar pronto su plataforma y comprobar todas sus ventajas</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/abiquo-visita-minube-02-2009/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Evitar links externos con Amazon S3</title>
		<link>http://www.fillito.com/blog/evitar-links-externos-con-amazon-s3-09-2008</link>
		<comments>http://www.fillito.com/blog/evitar-links-externos-con-amazon-s3-09-2008#comments</comments>
		<pubDate>Sun, 14 Sep 2008 18:47:21 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[links externos]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=287</guid>
		<description><![CDATA[Si hemos elegido Amazon S3 como sistema de almacenamiento virtual , quizás nos interese tener almacenados archivos que se puedan descargar libremente por cualquier usuario, y que además puedan ser linkados desde cualquier sitio. Pero en la mayoría de los casos tendremos almacenados nuestros archivos y no nos gustará que nadie nos enlace directamente y [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fillito.com/blog/wp-content/uploads/100014192753_v46777512_.gif"><img class="alignleft size-medium wp-image-265" style="border: 0pt none; margin: 5px;" title="Evitar Links Externos con Amazon S3" src="http://www.fillito.com/blog/wp-content/uploads/100014192753_v46777512_.gif" alt="" width="170" height="69" /></a>Si hemos elegido Amazon S3 como sistema de almacenamiento virtual , quizás nos interese tener almacenados archivos que se puedan descargar libremente por cualquier usuario, y que además puedan ser linkados desde cualquier sitio. Pero en la mayoría de los casos tendremos almacenados nuestros archivos y no nos gustará que nadie nos enlace directamente y tener que soportar los gastos de transferencia y almacenamiento por él.</p>
<p>Voy a explicar cómo, con un sencillo script en php conseguiremos que nuestros archivos de S3 estén totalmente protegidos y que sólo puedan ser accesibles desde nuestro dominio.</p>
<p>Lo primero de todo, es conocer dos características que Amazon nos prové con sus <a title="S3 API Docs : Acojonante que la última actualización sea del 03 de 2006" href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/">APIs</a>:<br />
- Los ACL (Access Control List) : que nos permite definir los permisos de lectura-escritura-ejecución de nuestros bucket y objetos.<br />
- Las URLs Firmadas : que nos permite acceder temporalmente a nuestros archivos protegidos, a través de una url que incluye una firma y un tiempo de expiración de los permisos. Éstas URLs las podremos generar con nuestro script, y llevarán como parámetro nuestra firma generada en tiempo de ejecución, que lleva implicita el tiempo de caducidad de la url.</p>
<p>La primera medida es aplicar permisos exclusivo de lectura para nuestro usuario (usando los ACLs) a todos los archivos que queramos proteger, para que sea imprescindible una validación al acceder a ellos.<br />
Para generar nuestro script , necesitaremos echar mano de la clase <a title="Crypt/HMAC" href="http://pear.php.net/package/Crypt_HMAC/download">Crypt/HMAC</a> para construir el hash en <a href="http://es.wikipedia.org/wiki/SHA">sha1</a> que Amazon S3 requiere.<br />
Lo primero será crear nuestra función para  generar nuestra <a title="S3 Authentication" href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/S3_Authentication.html">firma</a>:</p>
<div class="igBar"><span id="lphp-26"><a href="#" onclick="javascript:showPlainTxt('php-26'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-26">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">require_once</span> <span style="color:#FF0000;">'Crypt/HMAC.php'</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> hex2b64<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$raw</span> = <span style="color:#FF0000;">''</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">for</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$i</span>=<span style="color:#CC66CC;color:#800000;">0</span>; <span style="color:#0000FF;">$i</span> &amp;lt;strlen<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <span style="color:#0000FF;">$i</span>+=<span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$raw</span> .= <a href="http://www.php.net/chr"><span style="color:#000066;">chr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/hexdec"><span style="color:#000066;">hexdec</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/substr"><span style="color:#000066;">substr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span>, <span style="color:#0000FF;">$i</span>, <span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span> <a href="http://www.php.net/base64_encode"><span style="color:#000066;">base64_encode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$raw</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> makeSig<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$secretKey</span>=<span style="color:#FF0000;">"Llave secreta que nos proporciona Amazon para nuestra cuenta"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$hasher</span> =&amp; <span style="color:#000000; font-weight:bold;">new</span> Crypt_HMAC<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$secretKey</span>, <span style="color:#FF0000;">"sha1"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$signature</span> = hex2b64<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$hasher</span>-&amp;gt;hash<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$str</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$signature</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Lo siguiente, será crearnos una función para construir nuestra URL firmada :</p>
<div class="igBar"><span id="lphp-27"><a href="#" onclick="javascript:showPlainTxt('php-27'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-27">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> getSignedURL<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$bucket</span>, <span style="color:#0000FF;">$key</span>, <span style="color:#0000FF;">$expires</span>=<span style="color:#CC66CC;color:#800000;">120</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$accessKeyId</span>=<span style="color:#FF0000;">"accessKeyId que nos proporciona Amazon con nuestra cuenta"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$expires</span> = <a href="http://www.php.net/time"><span style="color:#000066;">time</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color:#0000FF;">$expires</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$resource</span> = <span style="color:#0000FF;">$bucket</span>.<span style="color:#FF0000;">"/"</span>.<a href="http://www.php.net/urlencode"><span style="color:#000066;">urlencode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$key</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$stringToSign</span> = <span style="color:#FF0000;">"GETnnn$expiresn/$resource"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$signature</span> = <a href="http://www.php.net/urlencode"><span style="color:#000066;">urlencode</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>makeSig<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$stringToSign</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$signedUrl</span>=<span style="color:#FF0000;">"http://s3.amazonaws.com/$resource?AWSAccessKeyId=$accessKeyId&amp;Expires=$expires&amp;Signature=$signature"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span> <span style="color:#0000FF;">$signedUrl</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Ésta función nos devolverá la url firmada, que estará disponible durante el tiempo (en segundos) que hayamos establecido en el parametro $expires (120seg por defecto)</p>
<p>Ahora ya sólamente nos falta un script que nos lance al contenido, pero que nos proteja de links externos a nuestro dominio.<br />
Para ésto simplemente comprobaremos si existe el campo HTTP_REFERER en nuestra variable $_SERVER , que nos indicará que estamos accediendo a ésta url desde otra url de referencia , y que nuestro dominio (extraido desde $_SERVER['HTTP_HOST']) esté contenido en él.</p>
<div class="igBar"><span id="lphp-28"><a href="#" onclick="javascript:showPlainTxt('php-28'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-28">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> get_amazon_url<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$amazon_bucket</span>,<span style="color:#0000FF;">$amazon_object</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/isset"><span style="color:#000066;">isset</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_SERVER</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'HTTP_REFERER'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> &amp;&amp; <a href="http://www.php.net/strstr"><span style="color:#000066;">strstr</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_SERVER</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'HTTP_REFERER'</span><span style="color:#006600; font-weight:bold;">&#93;</span>,<span style="color:#0000FF;">$_SERVER</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'HTTP_HOST'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>&nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$url</span>=getSignedURL<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$amazon_bucket</span>,<span style="color:#0000FF;">$amazon_object</span>,<span style="color:#CC66CC;color:#800000;">60</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/header"><span style="color:#000066;">header</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'Location:'</span>.<span style="color:#0000FF;">$url</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#616100;">else</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/echo"><span style="color:#000066;">echo</span></a> <span style="color:#FF0000;">'Éste contenido ha sido enlazado ilegalmente'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Al llamar a ésta función, seremos automáticamente redirigidos al contenido en amazon siempre que el link provenga desde nuestro mismo dominio. Por supuesto, si quisieramos permitir el acceso desde una determinada lista de dominios, simplemente tendríamos que modificar un poco la condición if , para que compruebe que cada uno de los dominios están incluido en el HTTP_REFERER.</p>
<p>Espero que sea útil.<br />
Un Saludo !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/evitar-links-externos-con-amazon-s3-09-2008/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Amazon lanza Elastic Block Store</title>
		<link>http://www.fillito.com/blog/amazon-lanza-elastic-block-store-08-2008</link>
		<comments>http://www.fillito.com/blog/amazon-lanza-elastic-block-store-08-2008#comments</comments>
		<pubDate>Thu, 21 Aug 2008 19:10:37 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[EBS]]></category>
		<category><![CDATA[EC2]]></category>

		<guid isPermaLink="false">http://www.fillito.com/blog/?p=237</guid>
		<description><![CDATA[Amazon no deja de trabajar para seguir ofreciendo los mejores servicios web, y después de lanzar Elastic IPs, lanza ahora EBS (Elastic Block Store), un servicio complementario a EC2 (Elastic Computing Cloud) que nos permite mantener nuestros datos de forma persistente. Dos de los inconvenientes más grandes del servicio de procesamiento EC2 eran que al [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin: 5px;" title="Amazon Web Services" src="http://www.fillito.com/blog/wp-content/uploads/100014192753_v46777512_.gif" alt="" width="170" height="69" />Amazon no deja de trabajar para seguir ofreciendo los mejores servicios web, y después de lanzar <strong>Elastic IPs</strong>, lanza ahora EBS (<a href="http://www.amazon.com/gp/browse.html/ref=pe_2170_10160930?node=689343011"><strong>Elastic Block Store</strong></a>), un servicio complementario a EC2 (Elastic Computing Cloud) que nos permite mantener nuestros datos de forma persistente.</p>
<p>Dos de los inconvenientes más grandes del servicio de procesamiento EC2 eran que al arrancar una instancia de procesado, ésta no disponía de una IP (sino que accedíamos a ella a través de un nombre de domino), y que al apagarla, toda la información que no formara parte de la imagen que instanciamos se volatilizaba. Esto era un problema grande, ya que en caso de un fallo en el servicio y caida perderíamos toda la información de la instancia, y hacía EC2 un servicio totalmente inútil si lo que buscamos es montar por ejemplo un servidor de bases de datos.<br />
Todo ésto queda solventado con EBS, que nos permite instanciar múltiples bloques de entre 1GB y 1TB de almacenamiento que pueden ser montados como un dispositivo en nuestro sistema operativo. Cada bloque instanciado se monta como una unidad RAW sin formato, por lo que serán perfectamente compatible con cualquier sistema operativo que estemos usando en nuestra instancia y formatearla con el sistema de gestión de ficheros que mejor nos venga.<br />
Además Amazon asegura la replicación automática de los datos dentro de la "Zona de Disponibilidad" de nuestra instancia, lo que garantiza la preservación de nuestros datos en caso de fallo hardware en las máquinas.<br />
Otra de las características que me ha sorprendido gratamente es que cada bloque de datos es autónomo e independiente de la instancia, lo que los hace accesible desde cualquiera de nuestras intancias (aunque sólo a una de ellas al mismo tiempo).</p>
<p>En cuanto a los costes, Amazon mantiene su política de varios criterios de tarificación según transferencia, accesos y datos almacenados. Aunque como dato orientativo el almacenamiento nos costará 0,10$/GB cada mes.</p>
<p>Una gran mejora para EC2 que lo hace aún más útil. Esperemos que Amazon siga con el ritmo de mejoras para sus servicios, que están revolucionando el desarrollo web y facilitando que pequeños proyectos puedan crecer y crear grandes aplicaciones con unos costes más que asequibles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/amazon-lanza-elastic-block-store-08-2008/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>S3 Amazon &#8211; Articulo en Maestros del Web</title>
		<link>http://www.fillito.com/blog/s3-amazon-articulo-en-maestros-del-web-03-2008</link>
		<comments>http://www.fillito.com/blog/s3-amazon-articulo-en-maestros-del-web-03-2008#comments</comments>
		<pubDate>Wed, 05 Mar 2008 09:24:43 +0000</pubDate>
		<dc:creator>fillito</dc:creator>
				<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Trabajos/Proyectos]]></category>
		<category><![CDATA[S3]]></category>

		<guid isPermaLink="false">http://www.fillito.com/2008/03/s3-amazon-articulo-en-maestros-del-web/</guid>
		<description><![CDATA[En el pasado evento sobre Facebook nos encontramos con Christian Van Der Henst, fundador de Maestros del Web, y nos comentó que querían publicar un artículo sobre el servicio S3 de Amazon y me ofrecieron escribirlo. Me encantó la idea, ya  que es un servicio con el que  llevo meses trabajando y me ilusionaba mucho [...]]]></description>
			<content:encoded><![CDATA[<p>En el pasado evento sobre Facebook nos encontramos con <a href="http://www.cvander.com">Christian Van Der Henst</a>, fundador de <a href="http://www.maestrosdelweb.com">Maestros del Web</a>, y nos comentó que querían publicar un artículo sobre el servicio S3 de Amazon y me ofrecieron escribirlo.<br />
Me encantó la idea, ya  que es un servicio con el que  llevo meses trabajando y me ilusionaba mucho la idea de que un artículo mio fuese publicado  <img src='http://www.fillito.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Y vaya sitio... para el que no conozca Maestros del Web, es la comunidad de desarrolladores web de habla hispana más importante del mundo.</p>
<p>Aquí podeis <a href="http://www.maestrosdelweb.com/editorial/por-que-utilizar-s3-el-sistema-de-almacenamiento-de-amazon/">leer el artículo sobre S3 de Amazon</a> . Se aceptan críticas y todo tipo de comentarios.</p>
<p>Gracias desde aquí a Christian y a todo su equipo por la oportunidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fillito.com/blog/s3-amazon-articulo-en-maestros-del-web-03-2008/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

