<?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>AWS archivos - Geko Cloud</title>
	<atom:link href="https://geko.cloud/es/etiqueta/aws/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Servicios de consultoría cloud y devops</description>
	<lastBuildDate>Thu, 28 Jul 2022 07:34:48 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://geko.cloud/wp-content/uploads/2021/08/cropped-geko-fav-150x150.png</url>
	<title>AWS archivos - Geko Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Nodos dinámicos en Jenkins vía AWS Spot Fleet</title>
		<link>https://geko.cloud/es/nodos-dinamicos-en-jenkins-via-aws-spot-fleet/</link>
					<comments>https://geko.cloud/es/nodos-dinamicos-en-jenkins-via-aws-spot-fleet/#respond</comments>
		
		<dc:creator><![CDATA[Miguel]]></dc:creator>
		<pubDate>Tue, 07 Jun 2022 07:27:14 +0000</pubDate>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Jenkins]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=8406</guid>

					<description><![CDATA[<p>Nodos dinámicos en Jenkins vía AWS Spot Fleet Provisionar nodos slave de jenkins dinámicamente gracias a aws spot fleet. Hace unas semanas, un cliente contactó con el equipo de Geko Cloud. Su petición era simple: ¿Qué podemos hacer para optimizar aún más nuestro proceso automatizado de CI/CD en Jenkins? Tras estudiar cuidadosamente las necesidades y [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/nodos-dinamicos-en-jenkins-via-aws-spot-fleet/">Nodos dinámicos en Jenkins vía AWS Spot Fleet</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>Nodos dinámicos en Jenkins <span style="font-size: 18.72px;">vía</span> AWS Spot Fleet</h3>
<p>Provisionar nodos slave de jenkins dinámicamente gracias a aws spot fleet.</p>
<p>Hace unas semanas, un cliente contactó con el equipo de Geko Cloud. Su petición era simple: ¿Qué podemos hacer para optimizar aún más nuestro proceso automatizado de CI/CD en Jenkins?</p>
<p>Tras estudiar cuidadosamente las necesidades y la infraestructura actual del cliente, nos decidimos por cambiar de paradigma en cuanto a ejecución de tareas se refiere. Hasta ahora <strong><a href="https://www.jenkins.io/" target="_blank" rel="noopener">Jenkins</a> </strong>ejecutaba las tareas en su nodo principal (La máquina en la que se está ejecutando Jenkins), al cambiar este paradigma a uno basado en el aprovisionamiento dinámico de nodos subordinados ganaríamos los siguientes beneficios:</p>
<ul>
<li>Ahorro de costes &#8211; Al mover todo el esfuerzo computacional de la compilación fuera del nodo principal. Este puede estar alojado en una maquina de menor rendimiento, y por lo tanto menor coste. Los nodos subordinados solo estarían en funcionamiento durante la ejecución de una tarea, ahorrando también dinero mientras no se ejecuta ninguna tarea.</li>
<li>Seguridad &#8211; Al no ejecutar ningún tipo de código en el nodo principal, aseguramos su integridad aunque el código haya sido comprometido, y como este solo se ejecuta en una instancia efímera el atacante estará aislado.</li>
<li>Rendimiento &#8211; El nodo subordinado existe solamente para ejecutar la tarea y puede dedicar todos los recursos del nodo para ella.</li>
</ul>
<p>&nbsp;</p>
<h2><strong>Requisitos</strong></h2>
<p>Para este cambio, realizaremos las siguientes tareas:</p>
<ul>
<li>Creación de Spot Fleet en AWS</li>
<li>Instalación y configuración del plugin de Jenkins</li>
<li>Adaptación de Jenkinsfile</li>
</ul>
<p>Para esta publicación haremos las siguientes suposiciones:</p>
<ul>
<li>Contamos con una cuenta de AWS configurada</li>
<li>Alojamos Jenkins en un servidor EC2</li>
<li>Contamos con conocimiento sobre algunos conceptos base de Jenkins y AWS</li>
</ul>
<p>Dicho esto, pongámonos manos a la obra.</p>
<p>&nbsp;</p>
<p>En este artículo sobre «Nodos dinámicos en Jenkins vía AWS Spot Fleet» desarrollaremos todos los pasos necesarios para poder obtener un buen resultado.</p>
<h3><strong>Creación de launch template y spot fleet</strong></h3>
<p>Un Spot Fleet de AWS no es más que un AutoScaling Group de máquinas EC2 pero con instancias de tipo spot &#8211; excedente de Amazon que nadie está usando y que AWS deja a un precio económico. El primer paso consistirá en la creación de el Launch Template que utilizara el Spot Fleet:</p>
<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" class="wp-image-8409 aligncenter" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-0.png" alt="" width="795" height="413" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-0.png 1541w, https://geko.cloud/wp-content/uploads/2022/05/Spot-0-300x156.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-0-1024x532.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-0-768x399.png 768w, https://geko.cloud/wp-content/uploads/2022/05/Spot-0-1536x797.png 1536w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>Los puntos importantes a rellenar serán:</p>
<ol>
<li>Nombre y descripción</li>
<li>AMI a usar &#8211; Por ejemplo Ubuntu 22</li>
<li>Tipo de instancia a usar &#8211; Elegir una adecuada al desempeño</li>
<li>Key Pair &#8211; Lo necesitaremos introducir mas adelante en Jenkins</li>
<li>Network &#8211; Utilizar la misma Subnet que Jenkins si es posible</li>
<li>Security Group &#8211; Para que se establezca la conexión entre nodos, es importante que demos acceso al puerto 22 desde el nodo principal. La manera mas fácil es crear una regla que permita el acceso o bien desde la IP del nodo principal (Si la tenemos estática) o desde su Security Group</li>
<li>Storage &#8211; Asignar el almacenamiento que vayamos a necesitar</li>
<li>User data &#8211; Para que el worker de Jenkins se ejecute en el nodo subordinado, tendremos que instalar JRE, nosotros además instalamos Docker como requisito:</li>
</ol>
<p>&nbsp;</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:true,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}">#!/bin/bash
# Install docker
apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
apt-get update
apt-get install -y docker-ce
usermod -aG docker ubuntu

# Install docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

#Install JRE
sudo apt install -y default-jre</pre>
</div>
<p>&nbsp;</p>
<p>Una vez creado tendremos un Launch template parecido a este:</p>
<p>&nbsp;</p>
<p><img decoding="async" class="aligncenter wp-image-8413" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-2.png" alt="" width="795" height="501" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-2.png 1543w, https://geko.cloud/wp-content/uploads/2022/05/Spot-2-300x189.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-2-1024x646.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-2-768x484.png 768w, https://geko.cloud/wp-content/uploads/2022/05/Spot-2-1536x969.png 1536w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>&nbsp;</p>
<p>Ahora es momento de crear el Spot fleet como tal:</p>
<p>&nbsp;</p>
<p><img decoding="async" class="aligncenter wp-image-8411" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-1.png" alt="" width="795" height="383" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-1.png 1407w, https://geko.cloud/wp-content/uploads/2022/05/Spot-1-300x144.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-1-1024x493.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-1-768x370.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>&nbsp;</p>
<p>En este caso, los puntos a rellenar son:</p>
<ol>
<li>Launch parameters &#8211; Seleccionar nuestro Launch Template creado arriba<img loading="lazy" decoding="async" class="aligncenter wp-image-8415" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-3.png" alt="" width="795" height="245" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-3.png 1054w, https://geko.cloud/wp-content/uploads/2022/05/Spot-3-300x93.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-3-1024x316.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-3-768x237.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></li>
<li>Target Capacity &#8211; Asignar total a 0 por ahora, ya que lo controlará el plugin de Jenkins. Habilitar Maintain Target Capacity<img loading="lazy" decoding="async" class=" wp-image-8417 aligncenter" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-4.png" alt="" width="760" height="388" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-4.png 915w, https://geko.cloud/wp-content/uploads/2022/05/Spot-4-300x153.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-4-768x392.png 768w" sizes="(max-width: 760px) 100vw, 760px" /></li>
<li>Network &#8211; Asignar la VPC en la que está alojado el nodo principal</li>
<li>Instance type requirements &#8211; Elegir los tipos de instancia deseados en Manually select instance types, una mayor cantidad da una mejor pool entre la que iniciar instancias Spot<img loading="lazy" decoding="async" class="aligncenter wp-image-8419" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-5.png" alt="" width="795" height="347" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-5.png 1060w, https://geko.cloud/wp-content/uploads/2022/05/Spot-5-300x131.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-5-1024x446.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-5-768x335.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></li>
<li>Allocation strategy &#8211; Capacity Optimized</li>
</ol>
<p>Y listo, ya tenemos creado nuestro Spot Fleet.</p>
<p>&nbsp;</p>
<h3><strong>Instalacion y configuracion del plugin de Jenkins</strong></h3>
<p>Antes de instalar el plugin, tendremos que crear y asignar un nuevo rol de IAM a la instancia que aloja el nodo principal para que sea capaz de administrar nuestro Spot fleet:</p>
<p>&nbsp;</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;application/json&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:true,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}">{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "ec2:DescribeSpotFleetInstances",
            "ec2:ModifySpotFleetRequest",
            "ec2:CreateTags",
            "ec2:DescribeRegions",
            "ec2:DescribeInstances",
            "ec2:TerminateInstances",
            "ec2:DescribeInstanceStatus",
            "ec2:DescribeSpotFleetRequests"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "autoscaling:DescribeAutoScalingGroups",
            "autoscaling:UpdateAutoScalingGroup"
         ],
         "Resource":"*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "iam:ListInstanceProfiles",
            "iam:ListRoles",
            "iam:PassRole"
         ],
         "Resource":"*"
      }
   ]
}</pre>
</div>
<p>&nbsp;</p>
<p>Una vez hecho esto, instalaremos el plugin <a href="https://plugins.jenkins.io/ec2-fleet/">ec2-fleet-plugin</a> y nos dirigiremos a configurar desde Administrar Jenkins &gt; Administrar nodos &gt; Configure Clouds &gt; Añadir nueva nube &gt; Amazon EC2 Fleet.</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8425" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-6.png" alt="" width="795" height="429" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-6.png 2102w, https://geko.cloud/wp-content/uploads/2022/05/Spot-6-300x162.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-6-1024x552.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-6-768x414.png 768w, https://geko.cloud/wp-content/uploads/2022/05/Spot-6-1536x829.png 1536w, https://geko.cloud/wp-content/uploads/2022/05/Spot-6-2048x1105.png 2048w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>&nbsp;</p>
<ol>
<li>Asignamos un nombre</li>
<li>AWS Credentials &#8211; Lo dejamos en blanco, ya que nuestra maquina ya tiene el rol descrito más arriba</li>
<li>Region &#8211; Seleccionamos la región en la que alojamos nuestros servidores.</li>
<li>EC2 Fleet &#8211; <b>Solo aparecerá cuando asignemos la región y el rol esté asignado a la máquina correctamente</b>. Una vez rellenado, seleccionamos nuestro Spot fleet<img loading="lazy" decoding="async" class="aligncenter wp-image-8427" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-7.png" alt="" width="795" height="443" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-7.png 2100w, https://geko.cloud/wp-content/uploads/2022/05/Spot-7-300x167.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-7-1024x571.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-7-768x428.png 768w, https://geko.cloud/wp-content/uploads/2022/05/Spot-7-1536x856.png 1536w, https://geko.cloud/wp-content/uploads/2022/05/Spot-7-2048x1141.png 2048w" sizes="(max-width: 795px) 100vw, 795px" /></li>
<li>Subimos la Private key generada en el Launch template como <strong>SSH Username with private key</strong></li>
<li>Private IP &#8211; Seleccionar si queremos que el nodo maestro se conecte al subordinado usando la IP privada en vez de la publica</li>
<li>Always Reconnect &#8211; Recomendamos no habilitarlo, ya que las instancias Spot son efímeras por naturaleza</li>
<li>Restrict Usage &#8211; Restringirá el uso de este Spot Fleet solo a tareas que indiquen la etiqueta asignada, indistintamente de la configuración global de Jenkins</li>
<li>Label &#8211; La etiqueta que identifica esta nube de nodos, útil para asignar qué tareas se ejecutarán en el Fleet<img loading="lazy" decoding="async" class="aligncenter wp-image-8429" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-8.png" alt="" width="795" height="287" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-8.png 2074w, https://geko.cloud/wp-content/uploads/2022/05/Spot-8-300x108.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-8-1024x370.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-8-768x278.png 768w, https://geko.cloud/wp-content/uploads/2022/05/Spot-8-1536x555.png 1536w, https://geko.cloud/wp-content/uploads/2022/05/Spot-8-2048x741.png 2048w" sizes="(max-width: 795px) 100vw, 795px" /></li>
<li>Number of executors &#8211; La cantidad de trabajos simultáneos que podrá albergar cada instancia del Spot Fleet</li>
<li>Max Idle Minutes Before Scaledown &#8211; La cantidad de minutos que Jenkins mantendrá una instancia activa sin tareas pendientes. <strong>Si se deja a 0 Jenkins jamás apagará instancias, aunque estén sin uso</strong></li>
<li>Minimum/Maximum cluster Size &#8211; El tamaño mínimo y máximo de instancias que queremos que tenga el Spot fleet. Lo ideal es dejar el mínimo a 0 para abaratar costes</li>
</ol>
<p>Una vez guardada la configuración, tendremos una nueva sección en el dashboard de Jenkins, que nos indica el estado actual de nuestro Spot Fleet.</p>
<p><img loading="lazy" decoding="async" class=" wp-image-8431 aligncenter" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-9.png" alt="" width="336" height="349" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-9.png 700w, https://geko.cloud/wp-content/uploads/2022/05/Spot-9-289x300.png 289w" sizes="(max-width: 336px) 100vw, 336px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3><strong>Adaptación de Jenkinsfile</strong></h3>
<p>Ahora que tenemos nuestro Spot fleet configurado, es hora de realizar unos pequeños cambios para que Jenkins use este nuevo tipo de nodo a su disposición. Si queremos que se use de manera sistemática a nivel global, podemos deshabilitar la ejecución de tareas en el nodo principal (el único otro nodo en nuestro caso) desde la pantalla de configuración de nodos.</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8433" src="https://geko.cloud/wp-content/uploads/2022/05/Spot-10.png" alt="" width="795" height="408" srcset="https://geko.cloud/wp-content/uploads/2022/05/Spot-10.png 1826w, https://geko.cloud/wp-content/uploads/2022/05/Spot-10-300x154.png 300w, https://geko.cloud/wp-content/uploads/2022/05/Spot-10-1024x526.png 1024w, https://geko.cloud/wp-content/uploads/2022/05/Spot-10-768x395.png 768w, https://geko.cloud/wp-content/uploads/2022/05/Spot-10-1536x789.png 1536w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>&nbsp;</p>
<p>Si por el contrario, queremos que ciertas tareas sean las que se ejecuten en los nodos subordinados, tendremos que especificarlos a nivel de JenkinsFile, a continuación un ejemplo de cómo hacerlo:</p>
<p>&nbsp;</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;groovy&quot;,&quot;mime&quot;:&quot;text/x-groovy&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:true,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}">#!groovy
pipeline {
//Especificamos agente a nivel de Pipeline
  agent {
    label 'ec2-fleet'
  }

  stages {
        stage('Test') {
          agent {
            dockerfile {
              // Si usamos un agente en concreto, tendremos que volver a especificar la etiqueta
              label 'ec2-fleet'
              filename 'Dockerfile'
              dir 'docker/images/tests'
              args '-u root'
            }
          }
          steps {
            sh 'Hello World'
          }
        }
  }
}</pre>
</div>
<p>Con este último paso, estamos listos para ejecutar cualquier tarea en nodos provisionados dinámicamente dentro de instancias Spot Fleet.</p>
<p>&nbsp;</p>
<p>Desde Geko Consultoría Cloud, esperamos que este post te hayan gustado y sobre todo que te resulten útiles, nada nos alegraría más.<br />
Te invitamos a que si necesitas información sobre el mundo <strong><a href="https://geko.cloud/es/" target="_blank" rel="noopener">Cloud y DevOps</a></strong>, nos contactes y sigas revisando <strong><a href="https://geko.cloud/es/blog/labs/" target="_blank" rel="noopener">nuestro blog</a></strong> para encontrar otras publicaciones útiles.</p>
<p>La entrada <a href="https://geko.cloud/es/nodos-dinamicos-en-jenkins-via-aws-spot-fleet/">Nodos dinámicos en Jenkins vía AWS Spot Fleet</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/nodos-dinamicos-en-jenkins-via-aws-spot-fleet/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo recuperar una IP elástica de AWS que se ha borrado por accidente</title>
		<link>https://geko.cloud/es/como-recuperar-una-ip-elastica-de-aws-que-se-ha-borrado-por-accidente/</link>
					<comments>https://geko.cloud/es/como-recuperar-una-ip-elastica-de-aws-que-se-ha-borrado-por-accidente/#respond</comments>
		
		<dc:creator><![CDATA[Geko Cloud]]></dc:creator>
		<pubDate>Mon, 07 Feb 2022 17:31:52 +0000</pubDate>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Especialista DevOps]]></category>
		<category><![CDATA[Soporte DevOps]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=7171</guid>

					<description><![CDATA[<p>Introducción Recuperar una IP elástica de AWS. Quizás no sea lo más habitual para el usuario promedio de AWS, pero para los que se dedican al sector cloud es corriente administrar varias cuentas de AWS. Ya sea mediante un catálogo de enlaces de login o mediante un listado de IDs de cuentas (y sus correspondientes [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/como-recuperar-una-ip-elastica-de-aws-que-se-ha-borrado-por-accidente/">Cómo recuperar una IP elástica de AWS que se ha borrado por accidente</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introducción</h2>
<p style="text-align: justify;">Recuperar una IP elástica de AWS. Quizás no sea lo más habitual para el usuario promedio de AWS, pero para los que se dedican al sector cloud es corriente administrar varias cuentas de AWS. Ya sea mediante un catálogo de enlaces de login o mediante un listado de IDs de cuentas (y sus correspondientes credenciales), o mediante un gestor de impersonación de roles; el caso es que antes o después puede suceder que por error se confunda una cuenta con otra, y se termine realizando una acción no deseada.</p>
<p style="text-align: justify;">Este es el caso que se expone hoy, en el que se estaba trabajando con una cuenta nueva, y en el que toda la infraestructura creada era de usar y tirar. Sucedió que por error se confundió esta cuenta con la cuenta base, la de Geko, donde se aloja la IP elástica que apunta al bastión de la compañía. Sí, efectivamente, ese punto clave que se usa para acceder a otras infraestructuras de manera segura, y que precisamente estas otras infraestructuras consideran seguro. Es decir, esa IP era usada como una de las medidas de seguridad a la hora de verificar la procedencia de las conexiones. Una IP que se encontraba en múltiples configuraciones, y que no era trivial cambiar. Pues bien, dicha IP se liberó por error. En AWS se emplea la palabra «liberar» (o «release» en Inglés) para referirse a la acción de eliminarla de una cuenta, dejándola disponible para el resto de usuarios del proveedor.</p>
<p style="text-align: justify;">No hace falta describir los momentos de máxima alerta que sucedieron a la liberación de la IP, pero la posibilidad de haber perdido esa dirección para siempre porque se hubiera asignado a otro usuario, comenzaba a apoderarse de la tensión del momento. Sin embargo, para algo están los gabinetes de crísis y, por encima de todo, para algo está el poder contar con un equipo de profesionales del sector. La lluvia de ideas empañaba las ventanas cuando, de repente, un fulminante rayo de esperanza hizo que todo se parase en seco. Había esperanza. AWS había previsto este catastrófico caso, y Geko encontró como recuperar lo que siempre había sido suyo, pero que nunca había valorado tanto.</p>
<p style="text-align: justify;">¿Te ha pasado? ¿Quieres saber cómo se solucionó? ¡Sigue leyendo y no te pierdas cómo terminó esta épica historia!</p>
<h2>Recuperar la IP elástica de AWS que se ha borrado por accidente</h2>
<p style="text-align: justify;">Recuperar una IP elástica de AWS. Como se comentaba anteriormente, una vez se libera una dirección IP elástica ésta pasa a formar parte del grupo de IPs disponibles para el resto de usuarios, por lo que recuperarla podría llegar a ser imposible si se diese el caso de que ya hubiera sido reasignada. Sin embargo, AWS se dio cuenta de que esto podría representar un problema, y <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-eip-recovering">estableció un método de recuperación para este escenario</a>. Aunque no es algo que se pueda realizar desde la consola web, recuperar la dirección IP perdida se puede realizar mediante <a href="https://docs.aws.amazon.com/cli/latest/reference/ec2/allocate-address.html">un único comando</a>.</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;lineWrapping&quot;:true,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}">MY_IP=48.151.62.342
aws ec2 allocate-address --domain vpc --address $MY_IP</pre>
</div>
<p style="text-align: justify;">Si bien es cierto que es necesario conocer la dirección IP a recuperar, si es crítica como para necesitar recuperarla, debería ser algo que se pueda averiguar.</p>
<p><img loading="lazy" decoding="async" class="n3VNCb aligncenter" src="https://c.tenor.com/A-ozELwp694AAAAC/thumbs-thumbs-up-kid.gif" alt="Thumbs Up Kid" width="498" height="373" data-noaft="1" /></p>
<h2>¿Qué más podría salir mal?</h2>
<p style="text-align: justify;">Se da la casualidad de que en este caso había un factor adicional que podía entorpecer las cosas, y de hecho lo hizo. En Geko, para disponer de credenciales para el CLI de AWS, se generan unas claves temporales después de pasar por un proceso de verificación multi-factor (que además pueden ser revocadas en cualquier momento), y dichas credenciales se obtienen mediante el bastión anteriormente mencionado. Atando cabos se puede concluir que la situación había caído en una dependencia cíclica, ya que para arreglar el problema eran necesarias credenciales que el propio problema no permitía crear. Por supuesto existían métodos alternativos para salir del bucle, pero finalmente fue suficiente con usar unas credenciales aún no caducadas.</p>
<h2>Conclusión</h2>
<p style="text-align: justify;">A lo largo de esta corta (pero intensa) historia se ha visto la importancia de contar con el equipo que tienes a tu alrededor. Dejar a un lado el orgullo y dar la voz de alarma fue lo que consiguió que la solución apareciese en cuestión de minutos. Como se suele decir, dos pares de ojos ven más que uno.</p>
<p style="text-align: justify;">Por otra parte, aprendimos y reforzamos una serie de buenas prácticas que podrían ser la clave la siguiente vez. Las enumeramos a continuación.</p>
<ol>
<li style="text-align: justify;">Asegúrate de tener unas credenciales de emergencia para el caso de que suceda algo en el bastión.</li>
<li style="text-align: justify;">Asegúrate de que la cuenta que estás tratando de modificar, es la que de verdad quieres modificar. Es mejor perder un poco de tiempo en comprobar las cosas dos veces, que lamentarse luego.</li>
<li style="text-align: justify;">Protege los recursos valiosos a toda costa, como por ejemplo creando políticas de IAM para denegar cualquier acción dañina.</li>
</ol>
<p>&nbsp;</p>
<p style="text-align: justify;">Desde <strong>Geko Consultoría Cloud,</strong> esperamos que este artículo te haya servido de ayuda para aprender algo nuevo y seguir ampliando tus conocimientos. Te invitamos a que si necesitas información sobre el mundo <a href="https://geko.cloud/es/" target="_blank" rel="noopener"><strong>Cloud y DevOps</strong></a>, <strong><a href="https://geko.cloud/es/contacto/" target="_blank" rel="noopener">nos contactes</a> </strong>y sigas revisando <strong><a href="https://geko.cloud/es/blog/labs/" target="_blank" rel="noopener">nuestro blog</a></strong> para encontrar otras publicaciones útiles. ¡Hasta la próxima!</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://geko.cloud/es/como-recuperar-una-ip-elastica-de-aws-que-se-ha-borrado-por-accidente/">Cómo recuperar una IP elástica de AWS que se ha borrado por accidente</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/como-recuperar-una-ip-elastica-de-aws-que-se-ha-borrado-por-accidente/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Logs de AWS SES a Opensearch mediante AWS Kinesis</title>
		<link>https://geko.cloud/es/logs-de-aws-ses-a-opensearch-mediante-aws-kinesis/</link>
					<comments>https://geko.cloud/es/logs-de-aws-ses-a-opensearch-mediante-aws-kinesis/#respond</comments>
		
		<dc:creator><![CDATA[Iván González]]></dc:creator>
		<pubDate>Thu, 16 Dec 2021 10:09:13 +0000</pubDate>
				<category><![CDATA[Destacado LABS]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Elasticsearch]]></category>
		<category><![CDATA[Kinesis]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=6727</guid>

					<description><![CDATA[<p>Introducción Logs de AWS SES a Opensearch mediante AWS Kinesis. Por defecto, el servicio de AWS Simple Email Service (SES) no nos ofrece poder visualizar logs de sus acciones/eventos, tan solo podemos ver algunas métricas en Cloudwatch. Desde Geko nos hemos encontrado más de una vez con la necesidad de ver logs de SES, ya [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/logs-de-aws-ses-a-opensearch-mediante-aws-kinesis/">Logs de AWS SES a Opensearch mediante AWS Kinesis</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Logs de AWS SES a Opensearch mediante AWS Kinesis.<br />
Por defecto, el servicio de AWS Simple Email Service (SES) no nos ofrece poder visualizar logs de sus acciones/eventos, tan solo podemos ver algunas métricas en Cloudwatch. Desde Geko nos hemos encontrado más de una vez con la necesidad de ver logs de SES, ya sea para diagnosticar incidencias o para conocer mejor el estado del servicio. Pues bien, para que esto sea posible, hacemos uso de AWS Kinesis. Vamos a explicar como lo montamos. Empecemos!</p>
<h2>Configuración en Kinesis</h2>
<p>Kinesis es un recolector, procesador y transmisor de datos. El primer paso es crear un Delivery Stream. Accedemos al servicio de <a href="https://aws.amazon.com/kinesis/">Kinesis</a>, Delivery Streams y creamos un Delivery Stream<br />
<img loading="lazy" decoding="async" class="alignnone wp-image-6731 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/1.png" alt="" width="1920" height="438" srcset="https://geko.cloud/wp-content/uploads/2021/12/1.png 1920w, https://geko.cloud/wp-content/uploads/2021/12/1-300x68.png 300w, https://geko.cloud/wp-content/uploads/2021/12/1-1024x234.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/1-768x175.png 768w, https://geko.cloud/wp-content/uploads/2021/12/1-1536x350.png 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /></p>
<p>En «Source» eleccionamos «Direct PUT» y en Destination «Amazon OpenSearch Service». Existen otras opciones de destino como Redshift, S3, Dynatrace.. En el desplegable aparecen todas las disponibles.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6742 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/2.png" alt="" width="914" height="522" srcset="https://geko.cloud/wp-content/uploads/2021/12/2.png 914w, https://geko.cloud/wp-content/uploads/2021/12/2-300x171.png 300w, https://geko.cloud/wp-content/uploads/2021/12/2-768x439.png 768w" sizes="(max-width: 914px) 100vw, 914px" /></p>
<p>Añadimos un nombre al objeto «Delivery Stream» y añadimos nuestro OpenSearch. En nuestro caso, al ya tener un OpenSearch creado y operativo simplemente accediendo a «Browse» nos ha aparecido para seleccionarlo.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6772 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/4.png" alt="" width="896" height="779" srcset="https://geko.cloud/wp-content/uploads/2021/12/4.png 896w, https://geko.cloud/wp-content/uploads/2021/12/4-300x261.png 300w, https://geko.cloud/wp-content/uploads/2021/12/4-768x668.png 768w" sizes="(max-width: 896px) 100vw, 896px" /></p>
<p>Ponemos el nombre de índice que queremos que nos cree</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6746 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/6.png" alt="" width="897" height="768" srcset="https://geko.cloud/wp-content/uploads/2021/12/6.png 897w, https://geko.cloud/wp-content/uploads/2021/12/6-300x257.png 300w, https://geko.cloud/wp-content/uploads/2021/12/6-768x658.png 768w" sizes="(max-width: 897px) 100vw, 897px" /></p>
<p>Y por defecto nos selecciona VPC, Subnet y Security Group en base a nuestro OpenSearch.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6744 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/7.png" alt="" width="899" height="685" srcset="https://geko.cloud/wp-content/uploads/2021/12/7.png 899w, https://geko.cloud/wp-content/uploads/2021/12/7-300x229.png 300w, https://geko.cloud/wp-content/uploads/2021/12/7-768x585.png 768w" sizes="(max-width: 899px) 100vw, 899px" /></p>
<p>Finalmente creamos el objeto «Delivery Stream»</p>
<h2>Configuración SES</h2>
<p>Ahora accedemos al servicio <a href="http://console.aws.amazon.com/ses">SES,</a> accedemos a «Configuration Sets» y «Create Set»</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6740 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/9.png" alt="" width="1917" height="523" srcset="https://geko.cloud/wp-content/uploads/2021/12/9.png 1917w, https://geko.cloud/wp-content/uploads/2021/12/9-300x82.png 300w, https://geko.cloud/wp-content/uploads/2021/12/9-1024x279.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/9-768x210.png 768w, https://geko.cloud/wp-content/uploads/2021/12/9-1536x419.png 1536w" sizes="(max-width: 1917px) 100vw, 1917px" /></p>
<p>Ponemos un nombre al «Configuration Set» y lo creamos.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6766 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/10.png" alt="" width="903" height="487" srcset="https://geko.cloud/wp-content/uploads/2021/12/10.png 903w, https://geko.cloud/wp-content/uploads/2021/12/10-300x162.png 300w, https://geko.cloud/wp-content/uploads/2021/12/10-768x414.png 768w" sizes="(max-width: 903px) 100vw, 903px" /></p>
<p>Una vez creado el «Configuration Set» vamos a «Event Destionation» y «Add Destination» para crear uno.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6764 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/11.png" alt="" width="1921" height="522" srcset="https://geko.cloud/wp-content/uploads/2021/12/11.png 1921w, https://geko.cloud/wp-content/uploads/2021/12/11-300x82.png 300w, https://geko.cloud/wp-content/uploads/2021/12/11-1024x278.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/11-768x209.png 768w, https://geko.cloud/wp-content/uploads/2021/12/11-1536x417.png 1536w" sizes="(max-width: 1921px) 100vw, 1921px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6762 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/12.png" alt="" width="1537" height="512" srcset="https://geko.cloud/wp-content/uploads/2021/12/12.png 1537w, https://geko.cloud/wp-content/uploads/2021/12/12-300x100.png 300w, https://geko.cloud/wp-content/uploads/2021/12/12-1024x341.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/12-768x256.png 768w" sizes="(max-width: 1537px) 100vw, 1537px" /></p>
<p>Seleccionamos el tipo de evento que queremos y vamos al siguiente paso</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6760 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/13.png" alt="" width="825" height="783" srcset="https://geko.cloud/wp-content/uploads/2021/12/13.png 825w, https://geko.cloud/wp-content/uploads/2021/12/13-300x285.png 300w, https://geko.cloud/wp-content/uploads/2021/12/13-768x729.png 768w" sizes="(max-width: 825px) 100vw, 825px" /></p>
<p>Seleccionamos «Amazon Kinesis Data Firehose», ponemos un nombre y seleccionamos el «Delivery Stream» que hemos creado anteriormente.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6758 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/14.png" alt="" width="818" height="744" srcset="https://geko.cloud/wp-content/uploads/2021/12/14.png 818w, https://geko.cloud/wp-content/uploads/2021/12/14-300x273.png 300w, https://geko.cloud/wp-content/uploads/2021/12/14-768x699.png 768w" sizes="(max-width: 818px) 100vw, 818px" /></p>
<p>&nbsp;</p>
<p>Cuidado! Ahora hay que crear un «IAM Role» para que SES pueda escribir en Firehose, nosotros lo hemos creado así:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6756 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/15.png" alt="" width="1596" height="539" srcset="https://geko.cloud/wp-content/uploads/2021/12/15.png 1596w, https://geko.cloud/wp-content/uploads/2021/12/15-300x101.png 300w, https://geko.cloud/wp-content/uploads/2021/12/15-1024x346.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/15-768x259.png 768w, https://geko.cloud/wp-content/uploads/2021/12/15-1536x519.png 1536w" sizes="(max-width: 1596px) 100vw, 1596px" /></p>
<p>Con esta Policy</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6754 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/16.png" alt="" width="1305" height="498" srcset="https://geko.cloud/wp-content/uploads/2021/12/16.png 1305w, https://geko.cloud/wp-content/uploads/2021/12/16-300x114.png 300w, https://geko.cloud/wp-content/uploads/2021/12/16-1024x391.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/16-768x293.png 768w" sizes="(max-width: 1305px) 100vw, 1305px" /></p>
<p>Y esta Trust Relationship</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6752 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/17.png" alt="" width="609" height="327" srcset="https://geko.cloud/wp-content/uploads/2021/12/17.png 609w, https://geko.cloud/wp-content/uploads/2021/12/17-300x161.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></p>
<p>Finalmente creamos la «Configuration Set»</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6750 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/18.png" alt="" width="822" height="780" srcset="https://geko.cloud/wp-content/uploads/2021/12/18.png 822w, https://geko.cloud/wp-content/uploads/2021/12/18-300x285.png 300w, https://geko.cloud/wp-content/uploads/2021/12/18-768x729.png 768w" sizes="(max-width: 822px) 100vw, 822px" /></p>
<p>&nbsp;</p>
<p>Ahora, para testearlo, se puede enviar un email de test desde SES asignando a nuestro test la «Configuration Set» que hemos creado. Esta «Configuration Set» se puede aplicar a cualquier Identity que tengamos en SES. De hecho vamos a hacer una prueba enviado un email de test. Vemos el log de test que hemos generado en nuestro OpenSearch:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6786 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/20.png" alt="" width="1580" height="303" srcset="https://geko.cloud/wp-content/uploads/2021/12/20.png 1580w, https://geko.cloud/wp-content/uploads/2021/12/20-300x58.png 300w, https://geko.cloud/wp-content/uploads/2021/12/20-1024x196.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/20-768x147.png 768w, https://geko.cloud/wp-content/uploads/2021/12/20-1536x295.png 1536w" sizes="(max-width: 1580px) 100vw, 1580px" /></p>
<p>Y en el monitoring de Delivery de Kinesis:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-6748 size-full" src="https://geko.cloud/wp-content/uploads/2021/12/19.png" alt="" width="483" height="364" srcset="https://geko.cloud/wp-content/uploads/2021/12/19.png 483w, https://geko.cloud/wp-content/uploads/2021/12/19-300x226.png 300w" sizes="(max-width: 483px) 100vw, 483px" /></p>
<p>Desde Geko esperamos que si has llegado hasta aquí, esta entrada sea justo lo que andabas buscando! Te invitamos también a que leas otros de nuestros <a href="https://geko.cloud/es/blog/labs/">posts de labs</a>.</p>
<p>La entrada <a href="https://geko.cloud/es/logs-de-aws-ses-a-opensearch-mediante-aws-kinesis/">Logs de AWS SES a Opensearch mediante AWS Kinesis</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/logs-de-aws-ses-a-opensearch-mediante-aws-kinesis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>¿Qué es AWS?</title>
		<link>https://geko.cloud/es/que-es-aws/</link>
					<comments>https://geko.cloud/es/que-es-aws/#respond</comments>
		
		<dc:creator><![CDATA[Xènia Adan]]></dc:creator>
		<pubDate>Thu, 26 Aug 2021 10:23:10 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Proveedor cloud]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/es/?p=5211</guid>

					<description><![CDATA[<p>El siglo XXI se ha definido como la era de la tecnología, en la que empresas de todos los tamaños, regiones e industrias se están pasando a los servicios en la nube. La adopción de la nube se ha incrementado en los últimos años con el objetivo de mejorar la eficiencia, la flexibilidad y reducir [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/que-es-aws/">¿Qué es AWS?</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="font-size: 18px;">El siglo XXI se ha definido como la era de la tecnología, en la que empresas de todos los tamaños, regiones e industrias se están pasando a los servicios en la nube. La adopción de la nube se ha incrementado en los últimos años con el objetivo de mejorar la eficiencia, la flexibilidad y reducir los costes de gestión. </span></p>
<p><span style="font-size: 18px;">Hoy en día, millones de organizaciones están aprovechando los servicios en la nube de <b>AWS</b> para crear aplicaciones sofisticadas que les ayudan a aumentar su fiabilidad, flexibilidad y escalabilidad. Este post sobre «¿Qué es AWS?» está diseñado para ayudarte a comprender en profundidad esta popular plataforma en la nube, sus ventajas, servicios y mucho más.</span></p>
<h3><span style="font-size: 25px;"><strong>¿Qué es y para qué sirve AWS?</strong></span></h3>
<p><span style="font-size: 18px;"><b>Amazon Web Services</b> (<b>AWS</b>) es una plataforma de servicios de nube que ofrece una mezcla de paquetes de software como servicio (SaaS), plataforma como servicio (PaaS) e infraestructura como servicio (IaaS), desde decenas de centros de datos y múltiples zonas de disponibilidad (AZ) repartidas por regiones del mundo. Cada AZ contiene varios centros de datos. Los clientes pueden configurar máquinas virtuales y replicar sus datos en varias zonas de disponibilidad para disponer de un sistema altamente resistente al fallo de un servidor o centro de datos.</span></p>
<p><span style="font-size: 18px;"><b>AWS</b> tiene como objetivo permitir a las organizaciones crecer y obtener beneficios a través de su amplia gama de servicios. Gracias a esta plataforma, pueden almacenar, acceder y gestionar los datos de su empresa al tiempo que los protegen de accesos no autorizados. </span></p>
<p><iframe loading="lazy" title="What is AWS? | Amazon Web Services" width="800" height="450" src="https://www.youtube.com/embed/a9__D53WsUs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<h3><span style="font-size: 25px;"><strong>¿Qué servicios/productos ofrece AWS?</strong></span></h3>
<p>Dentro de todos los servicios que ofrece <b>AWS</b> encontramos diversos productos <i>cloud computing</i>, base de datos, <i>blockchain</i>, integración de aplicaciones, internet de las cosas, migración y transferencia, redes y entrega de contenido, y muchos más. Algunas de las tecnologías más utilizadas de <b>Amazon Web Services</b> son:</p>
<p><b>1. Amazon EC2</b></p>
<p>La interfaz web de <b>Amazon EC2</b> se utiliza para reducir los costosos servidores físicos mediante la creación de máquinas virtuales y administración de otras características de los servidores, como su almacenamiento, seguridad, puertos, etc. Con <b>Amazon EC2</b> podrás crear servidores en cuestión de minutos con tu sistema operativo preferido.</p>
<p><b>2. Amazon RDS</b><br />
<b>Amazon</b> nos ayuda en todo lo que puede para que nuestra infraestructura sea menos complicada, es por esto que nos provee el servicio de <b>RDS</b>. Al utilizar este servicio de AWS, se pueden crear instancias dedicadas de bases de datos en cuestión de minutos, totalmente administradas por el equipo de soporte de <b>AWS</b> y capaz de soportar múltiples motores de bases de datos como MySQL, PostgreSQL, SQL Server, MariaDB, y muchos más.</p>
<p><b>3. Amazon Simple Storage Service (S3)</b><br />
<b>Amazon S3</b> es el servicio principal de <b>AWS</b> para el almacenamiento y recuperación de archivos mediante un API (<em>Application Programming Interface</em>). <b>Amazon S3</b> ofrece un servicio de almacenamiento de archivos y también de integraciones de alta calidad como PCI-DSS, HIPAA/HITECH y FedRAMP para que los datos no sean comprometidos. Además, el servicio <strong>S3</strong> te ofrece distintos tipos de almacenaje para optimizar el coste.</p>
<p><b>4. Amazon CloudFront</b><br />
<b>Amazon CloudFront</b> te ayuda a mejorar la velocidad del sitio web y el acceso a los datos que se encuentran en la nube. Además, gestiona todo el contenido de los usuarios de manera eficaz a través de un servicio de entrega de contenido global.</p>
<p><b>5. Amazon VPC</b><br />
Si está listo para aislar toda su infraestructura de TI de la exposición, entonces la única manera de hacerlo es con <strong>Amazon VPC</strong>. Este servicio crea una red virtual privada a la que no puede acceder nadie ni nada excepto las personas y los sistemas que se autorice. Estas redes están lógicamente aisladas de otras redes virtuales en las nubes de <b>AWS</b>.</p>
<p><b>6. Amazon SNS</b><br />
<b>SNS</b> es un <b>Servicio de Notificación Simple</b> que alerta a los servicios de los suscriptores para que realicen tareas automáticamente en respuesta a desencadenantes especificados. <b>Amazon SNS</b> es un sistema de notificaciones que ofrece integración con cualquier tipo de aplicación, llámese PHP, Python, Node, etc; y las notificaciones pueden ser enviadas a todo tipo de usuarios ya sea en la web o en el móvil.</p>
<p><b>7. AWS Lambda</b><br />
¿Tu servidor se satura con muchas <i>requests</i>? <b>AWS Lambda</b> está diseñado para escalar, y así soportar cualquier carga de tráfico. Posiblemente sea uno de los servicios más innovadores de <b>AWS</b>, puesto que te permite ejecutar tu código de forma <i>serverless</i>, es decir, sin necesidad de gestionar servidores. Además, es compatible con los principales lenguajes de programación como Node.js, Python, Java, y más.</p>
<p><b>8. AWS Autoscaling</b><br />
Si estás pensando en crecer o expandir tu aplicación para millones de usuarios entonces <strong>AWS Autoscaling</strong> es la solución. Esta herramientas permite administrar una flota de servidores cuando la aplicación lo demande, creándose múltiples instancias cuando se necesitan. El servicio es gratuito, únicamente se cobra por el número de instancias utilizadas.</p>
<p><b>9. AWS Beanstalk</b><br />
<b>AWS Beanstalk</b> se creó para ayudar a los desarrolladores a administrar la infraestructura del sitio web y ahorrar tiempo. Esta herramienta automatiza la instalación, la configuración y el aprovisionamiento de otros servicios de <b>AWS</b> como <b>EC2</b>, <b>RDS</b> y <b>S3</b>.</p>
<p>Como ves, <b>AWS</b> dispone de una gran cantidad de servicios relacionados con la infraestructura en la nube, relacionada con los datos y el aprovechamiento de estos de cara a cualquier negocio, de cualquier tamaño y sector. Si quieres conocer más sobre todos los productos que ofrece <strong>AWS</strong> en el siguiente enlace obtendrás toda la información: <a href="https://aws.amazon.com/es/products/">Beneficios de cloud computing | Seguridad en la nube | AWS (amazon.com)</a></p>
<h3><span style="font-size: 25px;"><strong>Ventajas de utilizar AWS</strong></span></h3>
<p>Muchas empresas, pequeñas o grandes, confían en <strong>AWS</strong> por el amplio abanico de servicios que ofrece. A continuación explicaremos algunas de las ventajas más destacables que lo diferencian de otras empresas. Estas son:</p>
<p><b>SEGURIDAD</b><br />
La seguridad es uno de los puntos más importantes a la hora de trabajar en entornos cloud. <strong>AWS</strong> cuenta con docenas de centros de datos en todo el mundo que se supervisan continuamente, las 24 horas del día, los 7 días de la semana, y reciben un mantenimiento estricto. Además, <strong>AWS</strong> dispone de certificaciones y acreditaciones, cifrado de datos en reposo y en tránsito, módulos de seguridad hardware y una fuerte seguridad física.</p>
<p><b>PAY PER USE</b><br />
Una de las ventajas más importantes es el modelo de facturación de pago por uso de <strong>AWS</strong>. No hay un coste inicial para construir un sistema de almacenamiento y no es necesario estimar el uso. Para las organizaciones que tienen picos diarios o estacionales, esto es una verdadera ventaja.</p>
<p><b>AMPLIA VARIEDAD DE SERVICIOS</b><br />
<strong>AWS</strong> con el tiempo ha ido ampliando su gama de productos y servicios hasta tener más de 175 productos que van desde el almacenamiento y la computación básicos hasta los servicios más especializados como por ejemplo la robótica. En resumen, <strong>AWS</strong> ofrece una variedad tan amplia de servicios que seguramente algún producto o servicio encaje perfectamente a las necesidades de tu empresa.</p>
<p><b>COST-EFFECTIVE</b><br />
Tanto si se trata de una <em>start-up</em> como de una gran organización empresarial, podrás beneficiarte de las ventajas económicas que ofrece <strong>AWS</strong>, como por ejemplo, que no se requiere pagar por adelantado para utilizar sus servicios o recursos.</p>
<p><b>GLOBAL LEADER</b><br />
<b>Amazon Web Services</b> cuenta con redes en casi 190 países de todo el mundo y da soporte a más de un millón de clientes activos. Entre sus clientes se encuentran grandes empresas y organizaciones del sector público. A medida que las empresas siguen migrando al cloud, las alternativas de servicios basados en la nube siguen multiplicándose. Sin embargo, sólo un puñado de opciones logran satisfacer las diferentes necesidades empresariales que existen como <strong>Amazon Web Services</strong> (<strong>AWS</strong>).</p>
<h3><span style="font-size: 25px;"><strong>¿Cómo funciona AWS?</strong></span></h3>
<p>Primero de todo, necesitas registrarte en <strong>AWS</strong>. Cuando vayas a crearte la cuenta, te pedirán los detalles de la tarjeta de crédito. Una vez creada la cuenta, puedes empezar a explorar la consola de gestión de <strong>AWS</strong> y ver sus servicios. Además, en <strong>Amazon</strong> puedes ver tutoriales de 10 minutos para conocer el funcionamiento de cada uno de sus productos.</p>
<h3><span style="font-size: 25px;"><strong>AWS y Geko Cloud</strong></span></h3>
<p>Esperamos que este post te haya ayudado a entender un poco más qué es <strong>Amazon Web Services</strong>. Como ves, <strong>AWS</strong> es algo que debes de tener en cuenta si te estás planteando migrar a la nube tu infraestructura.</p>
<p>En Geko Cloud somos expertos <a href="https://geko.cloud/es/que-es-cloud/">cloud</a> y trabajamos con metodología <a href="https://geko.cloud/es/devops/">DevOps</a>, acompañando a nuestros clientes en todo el proceso desde la <a href="https://geko.cloud/es/servicios-cloud/migracion/">migración</a> hasta la <a href="https://geko.cloud/es/servicios-cloud/gestion-cloud/">gestión en el cloud</a>. ¡<a href="https://geko.cloud/es/contacto/">Contáctanos sin ningún compromiso</a>! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>La entrada <a href="https://geko.cloud/es/que-es-aws/">¿Qué es AWS?</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/que-es-aws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Error al utilizar AWS EFS para MySQL</title>
		<link>https://geko.cloud/es/error-al-utilizar-aws-efs-para-mysql/</link>
					<comments>https://geko.cloud/es/error-al-utilizar-aws-efs-para-mysql/#respond</comments>
		
		<dc:creator><![CDATA[Geko Cloud]]></dc:creator>
		<pubDate>Wed, 26 May 2021 14:02:03 +0000</pubDate>
				<category><![CDATA[Destacado LABS]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/es/?p=4663</guid>

					<description><![CDATA[<p>Introducción En este post vamos a ver cómo solucionar el siguiente error que nos encontramos al trabajar con bases de datos MySQL utilizando el servicio EFS de AWS para el almacenamiento: ERROR 1030 (HY000) at line 1744: Got error 168 from storage engine Situación de partida Nuestro caso de uso consistía en un cluster de [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/error-al-utilizar-aws-efs-para-mysql/">Error al utilizar AWS EFS para MySQL</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<div style="display: none;"></div>
<h3>Introducción</h3>
<p class="p1">En este post vamos a ver cómo solucionar el siguiente error que nos encontramos al trabajar con bases de datos <em><strong>MySQL</strong></em> utilizando el servicio <em><strong>EFS</strong></em> de <em><strong>AWS</strong></em> para el almacenamiento:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">ERROR 1030 (HY000) at line 1744: Got error 168 from storage engine</pre>
</div>
<h3>Situación de partida</h3>
<p class="p1">Nuestro caso de uso consistía en un cluster de <em>Kubernetes</em> <em>EKS</em>, en el que necesitábamos crear y destruir nuevos entornos para desarrollo lo más rápido posible. Cada uno de estos entornos debían contener varias <strong>bases de datos <em>MySQL</em></strong>, además de otras herramientas como <em>Redis</em>, <em>RabbitMQ</em>, etc.</p>
<p class="p1">Para ello decidimos utilizar <em>Charts</em> de <em>Helm</em> que levantasen estas herramientas como <em>StatefulSets</em>. En un primer momento, no especificamos ningún <em>StorageClass</em>, por lo que se utilizaba la de por defecto de <em>EKS</em>, que levanta volúmenes <em>EBS gp2</em> (<em>General Purpose SSD</em>) al crear los <em>PersistentVolumeClaims</em>.</p>
<p class="p1">El problema de usar <strong>volúmenes <em>EBS</em></strong>, es que cada volumen se encuentra disponible en una zona de disponibilidad concreta, por lo que si el cluster de <a href="https://geko2.factoryfy.com/es/que-es-kubernetes/"><em>Kubernetes</em></a> necesita mover un <em>pod</em> de, por ejemplo, <em>MySQL</em>, no podrá levantarlo a no ser que encuentre recursos disponibles en otro nodo <em>worker</em> que este en la misma zona de disponibilidad que dicho volumen <em>EBS</em>.</p>
<p class="p1">Por este motivo, decidimos utilizar un nuevo <strong><em>StorageClass</em> que utilizase <em>EFS</em></strong> en lugar de <em>EBS</em>. De esta forma, teniendo el <em>EFS</em> montado en cada nodo <em>worker</em> del cluster de <a href="https://geko2.factoryfy.com/es/que-es-kubernetes/"><em>Kubernetes</em></a>, los <em>pods</em> podían moverse sin ningún problema entre nodos, aunque estos estuviesen en distintas zonas de disponibilidad.</p>
<h3>Error con <em>EFS</em></h3>
<p class="p1">Dado que nuestro caso de uso requería crear nuevos entornos de la forma mas rápida posible, al levantar una nueva base de datos <em>MySQL</em>, también ejecutábamos un importado de datos a partir de ficheros <em>sql</em> para disponer de un set de datos inicial por defecto.</p>
<p class="p1">Fue en este momento en el que empezamos a detectar el error, ya que al importar estos datos iniciales, empezamos a ver de forma continuada el siguiente error en los logs:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">ERROR 1030 (HY000) at line 1744: Got error 168 from storage engine
ERROR 1030 (HY000) at line 1744: Got error 168 from storage engine
ERROR 1030 (HY000) at line 1744: Got error 168 from storage engine
...</pre>
</div>
<p class="p1">Este error comenzaba a aparecer a partir de un determinado número de instrucciones <em>sql</em> ejecutadas, y a partir de ese momento, se repetía hasta terminar de leer el fichero <em>sql</em>.</p>
<h3>Resolución</h3>
<p class="p1">Tras realizar una investigación, descubrimos que el problema residía en un límite del servicio <em>EFS</em>. Concretamente era el límite de 256 ficheros únicos bloqueados. Podemos ver este límite en las cuotas descritas en la documentación de <em>AWS</em>:</p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-4667 aligncenter" src="https://geko2.factoryfy.com/wp-content/uploads/captura-de-pantalla-2021-05-25-a-las-13.47.29.png" alt="" width="1144" height="54" /></p>
<p><a href="https://docs.aws.amazon.com/efs/latest/ug/limits.html#limits-client-specific">https://docs.aws.amazon.com/efs/latest/ug/limits.html#limits-client-specific</a></p>
<p>Debido a que nuestro importado de datos intentaba crear más de 256 tablas, este límite se alcanzaba y comenzaba a aparecer el error. Este límite no puede modificarse, pero pudimos evitarlo modificando los parámetros de <em>MySQL</em> para, en la medida de lo posible, no alcanzar esos 256 ficheros bloqueados.</p>
<p>El parámetro MySQL a modificar es <strong><em>innodb_file_per_table</em></strong>. En nuestras bases de datos <em>MySQL</em>, este parámetro venía <strong>activado por defecto</strong>. Esto hace que se cree un fichero de datos <em>.idb</em> por cada tabla de la base de datos en lugar de crear un solo fichero de datos. Podemos modificar este parámetro en el fichero de configuración de <em>MySQL</em> de la siguiente forma:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">[mysqld]
innodb_file_per_table=OFF</pre>
</div>
<p><a href="https://dev.mysql.com/doc/refman/5.7/en/innodb-file-per-table-tablespaces.html">https://dev.mysql.com/doc/refman/5.7/en/innodb-file-per-table-tablespaces.html</a></p>
<p class="p1">Tras desactivar este parámetro, no volvimos a encontrarnos con el error.</p>
<p>Queremos agradecer al <em>blog</em> <em>ops.tips</em> su trabajo realizando el <em>post </em>que os enlazamos, ya que nos ayudó mucho a entender este error, de forma que pudimos encontrar esta solución.</p>
<p><a href="https://ops.tips/blog/limits-aws-efs-nfs-locks/">https://ops.tips/blog/limits-aws-efs-nfs-locks/</a></p>
<h3>Conclusión</h3>
<p class="p1">Al trabajar con bases de datos <strong><em>MySQL</em> usando <em>EFS</em></strong> para el almacenamiento, podemos encontrarnos errores al alcanzar el límite de 256 ficheros bloqueados siempre que tengamos esquemas con gran cantidad de tablas o en definitiva cualquier sistema que requiera bloquear simultáneamente grandes cantidades de ficheros como por ejemplo seria el caso de <em>MongoDB</em>, <em>Oracle</em>, etc.</p>
<p class="p1">Para evitar alcanzar ese límite, podemos desactivar el parámetro de <em>MySQL</em> <strong><em>innodb_file_per_table</em></strong> para que no se cree un fichero de datos por cada tabla.</p>
<p>&nbsp;</p>
<hr />
<p>Espero que hayas disfrutado de este post y te animo a que <a href="https://geko.cloud/es/blog/labs/">revises nuestro blog para leer otros posts</a> que puedan ser de tu interés. <a href="https://geko.cloud/es/contacto/">No dudes en contactarnos</a> si deseas que te ayudemos en tus proyectos.</p>
<p>¡Nos vemos en la próxima entrada!</p>
<p>La entrada <a href="https://geko.cloud/es/error-al-utilizar-aws-efs-para-mysql/">Error al utilizar AWS EFS para MySQL</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/error-al-utilizar-aws-efs-para-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS vs Azure, cuál elijo para migrar al cloud</title>
		<link>https://geko.cloud/es/aws-vs-azure/</link>
					<comments>https://geko.cloud/es/aws-vs-azure/#respond</comments>
		
		<dc:creator><![CDATA[Xènia Adan]]></dc:creator>
		<pubDate>Mon, 01 Mar 2021 15:54:35 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Microsoft Azure]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/es/?p=3833</guid>

					<description><![CDATA[<p>¿AWS o Azure, cuál elegir para migrar a la nube? Introducción Migrar al cloud es cada vez más común y ventajoso para la mayor parte de empresas que operan en Internet, dado que ofrece ventajas como la escalabilidad, agilidad, reducción de costes, disponibilidad, etc. Pero, a la hora de decidir proveedor cloud, ¿cómo decidimos cuál [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/aws-vs-azure/">AWS vs Azure, cuál elijo para migrar al cloud</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>¿AWS o Azure, cuál elegir para migrar a la nube?</h2>
<h3>Introducción</h3>
<p style="text-align: justify;"><a href="https://geko.cloud/es/servicios-cloud/migracion/"><strong>Migrar al cloud</strong></a> es cada vez más común y ventajoso para la mayor parte de empresas que operan en Internet, dado que ofrece ventajas como la escalabilidad, agilidad, reducción de costes, disponibilidad, etc. Pero, a la hora de decidir proveedor cloud, ¿cómo decidimos cuál es más conveniente?</p>
<p style="text-align: left;">Vamos a hablar de los proveedores más populares, que ofrecen un servicio con ciertas similitudes pero funcionan bajo esquemas distintos, son <strong>AWS</strong> <strong>(Amazon Web Services) y</strong> <strong>Microsoft Azure</strong>, siendo estos los más elegidos por las empresas que quieren dar el salto a la <a href="https://geko.cloud/es/que-es-cloud/">nube</a>. Pero a la hora de elegir, se ha de tener en cuenta las ventajas y ofertas de servicios de cada uno aplicado a nuestra estrategia de negocio.</p>
<h3>Breve comparación entre AWS y Azure</h3>
<p style="text-align: justify;">Entraremos solo a comparar dos detalles que pueden ser fundamentales para esta elección, la inversión y los recursos que tiene cada uno de estos dos proveedores.</p>
<ul>
<li style="text-align: left;">La <strong>inversión</strong> es una de las principales incógnitas de la ecuación cuando vamos a <a href="https://geko.cloud/es/servicios-cloud/migracion/">migrar a la nube</a>, como cualquier cambio que decidimos hacer en la empresa. El aumento de la oferta de <strong>proveedores cloud</strong>, lo que supone aumento de competencia, ha supuesto un abaratamiento y una adopción de pago por uso (<em>PAYG</em>), con el fin de ofertar la mejor opción al cliente. Algo que anteriormente se ofrecía bajo pago mensual. Lo que sí cambia es el modelo de pago:</li>
</ul>
<p><a href="https://geko2.factoryfy.com/wp-content/uploads/tabla-costes-aws-azure_mesa-de-trabajo-1.svg"><img loading="lazy" decoding="async" class="wp-image-3856 aligncenter" src="https://geko2.factoryfy.com/wp-content/uploads/tabla-costes-aws-azure_mesa-de-trabajo-1.svg" alt="" width="505" height="133" /></a></p>
<ul>
<li>También podemos distinguir entre los <strong>recursos</strong> que ofrecen ambos proveedores:</li>
</ul>
<p>&nbsp;</p>
<p><a href="https://geko2.factoryfy.com/wp-content/uploads/tabla-comparativa-aws-azure_mesa-de-trabajo-1-2.svg"><img loading="lazy" decoding="async" class="wp-image-3855 aligncenter" src="https://geko2.factoryfy.com/wp-content/uploads/tabla-comparativa-aws-azure_mesa-de-trabajo-1-2.svg" alt="" width="473" height="380" /></a></p>
<h3>Otras características a comparar entre AWS y Azure</h3>
<ul>
<li style="text-align: justify;"><strong>Amazon Web Services</strong> proporciona herramientas para dejar a un lado el hardware, licencias y costes añadidos, focalizándose en un <em>modelo serverless</em>.</li>
<li style="text-align: left;">Por otro lado, <strong>Azure</strong> se enfoca en nubes híbridas aprovechando que los modelos <em>on-premise</em> funcionan mejor al tener licencia Microsoft.</li>
<li style="text-align: left;"><strong>AWS</strong> ofrece producto de soluciones de <em>machine learning</em> automatizados.</li>
<li style="text-align: left;"><strong>Azure</strong> también tiene productos de <em><strong>machine learning</strong></em> pero necesitan más desarrollo y puede ocasionar limitaciones para la adaptabilidad.</li>
<li style="text-align: left;">La escalabilidad y la flexibilidad sin un mínimo de consumo es una de las <strong>ventajas de AWS</strong>.</li>
<li style="text-align: left;">En el caso de <strong>Azure</strong>, cuenta con paquete de almacenamiento predeterminado.</li>
</ul>
<h3 style="text-align: left;">Conclusión</h3>
<p style="text-align: left;">Teniendo en cuenta las características mencionadas anteriormente y otras que podemos encontrar para realizar una <strong>comparación entre AWS y Azure</strong>, podemos establecer los siguientes motivos para elegir un proveedor u otro:</p>
<ul style="text-align: left;">
<li>
<h4>¿Por qué elegir AWS?</h4>
</li>
</ul>
<p style="text-align: left;">Si tu empresa necesita aumentar notablemente su escalabilidad, tiene flexibilidad en modelos de pago y necesita de consultoría para migrar a la nube sí o sí.</p>
<ul style="text-align: left;">
<li>
<h4>¿Por qué elegir Azure?</h4>
</li>
</ul>
<p style="text-align: left;">Si tu empresa ya utiliza o tiene relación con Microsoft y, además, necesita una infraestructura robusta y muy segura.</p>
<h4 style="text-align: left;">En Geko te ayudamos a migrar al cloud</h4>
<p style="text-align: left;">Si buscas un proveedor de servicios que migre o gestione tu plataforma en la nube, no dudes en consultar con nosotros, en <a href="https://geko.cloud/es/"><strong>Geko</strong> </a>elegimos el proveedor que más se adapte a tus necesidades o tecnologías, y adaptamos la <strong>consultoría DevOps</strong> a tus metodologías de trabajo.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="https://geko.cloud/es/contacto/"><strong>¡Contáctanos sin compromiso!</strong></a></p>
<p><a href="https://geko.cloud/es/contacto/"><img loading="lazy" decoding="async" class="aligncenter wp-image-3265" src="https://geko2.factoryfy.com/wp-content/uploads/geko-1-300x297.png" alt="" width="64" height="63" /></a></p>
<p>La entrada <a href="https://geko.cloud/es/aws-vs-azure/">AWS vs Azure, cuál elijo para migrar al cloud</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/aws-vs-azure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Una vista rápida de los módulos de Terraform</title>
		<link>https://geko.cloud/es/una-vista-rapida-de-los-modulos-de-terraform/</link>
					<comments>https://geko.cloud/es/una-vista-rapida-de-los-modulos-de-terraform/#respond</comments>
		
		<dc:creator><![CDATA[Jose Luis Sánchez]]></dc:creator>
		<pubDate>Mon, 18 Jan 2021 17:35:09 +0000</pubDate>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Terraform]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/?p=3446</guid>

					<description><![CDATA[<p>Introducción Los módulos en Terraform son una colección de recursos que se pueden vincular o simplemente crear individualmente. Cuando llamamos a un módulo, estamos llamando a un archivo con una serie de recursos y algunos parámetros, los cuales necesitamos especificar o bien en el propio recurso o en otro archivo que almacene nuestras variables. ¿Por [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/una-vista-rapida-de-los-modulos-de-terraform/">Una vista rápida de los módulos de Terraform</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Los módulos en <strong>Terraform</strong> son una colección de recursos que se pueden vincular o simplemente crear individualmente. Cuando llamamos a un módulo, estamos llamando a un archivo con una serie de recursos y algunos parámetros, los cuales necesitamos especificar o bien en el propio recurso o en otro archivo que almacene nuestras variables.</p>
<h2>¿Por qué usar Terraform?</h2>
<ul>
<li>Es una herramienta muy útil para desarrollar, cambiar y tener un <em>versioning</em> de nuestra infraestructura de manera eficiente y segura.</li>
<li>Es una herramienta que permite definir infraestructura como código y habilita cambiar y hacer un seguimiento de la infraestructura con facilidad.</li>
<li>Es independiente de la plataforma o ‘<em>cloud agnostic</em>’ y permite trabajar con múltiples <strong>proveedores cloud</strong>.</li>
</ul>
<h3>¿Qué necesitamos para este lab?</h3>
<ul>
<li><strong>Terraform</strong> instalado. En este caso, ejecutamos la v.0.12.7.</li>
<li>En nuestro caso, utilizamos <strong>AWS</strong> como nuestro proveedor de servicios en la nube, por lo que necesitamos un usuario con acceso mediante programación. También necesitamos dar acceso a este usuario con la Política de IAM adecuada.</li>
<li>Tu editor de código preferido.</li>
</ul>
<p>¡Empecemos!</p>
<p>Por lo general, primero deberíamos configurar un módulo <strong>Terraform</strong> con nuestros parámetros requeridos o simplemente obtener algún módulo oficial de la red. En nuestro caso, estamos usando un módulo propio con un <strong>Bucket S3</strong> y su propia política y, por lo tanto, especificamos qué parámetros queremos en nuestro módulo.</p>
<div class="wp-block-codemirror-blocks code-block">
<pre class="CodeMirror" data-setting="{">resource "aws_s3_bucket" "this" {
  bucket            = var.bucket_name
  acl               = var.type_acl
  force_destroy     = var.destroy

  tags = {
    Name            = var.tag_name
  }
  versioning {
    enabled         = var.versioning
  } 
}

resource "aws_s3_bucket_policy" "this" {
  bucket = var.bucket_name
  policy = templatefile("${path.module}/templates/s3_origin_access_identity.json", {
    origin_access_identity_arn         = aws_cloudfront_origin_access_identity.this.iam_arn,
    origin_access_identity_bucket_name = var.bucket_name
  })
}</pre>
</div>
<p>Como veis, hay algunos valores que los introducimos con variables por lo tanto, necesitaremos un fichero llamado «variables.tf» en el cuál introduciremos los valores.</p>
<p>En la misma carpeta que tenemos nuestro archivo “main.tf”, creamos nuestro fichero “variables.tf”:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">### S3 VARIABLES

variable "bucket_name"      { }
variable "tag_name"         { }
variable "type_acl"         { }
variable "versioning"       { }
variable "destroy"          { }
variable "aliases"          { }
variable "certificate_arn"  { }</pre>
</div>
<p>En este caso particular, puede que os preguntéis por qué estas variables no tienen ningún valor almacenado. Y la respuesta es que estamos usando un archivo principal llamado «terragrunt.hcl» el cuál almacenará todos nuestros valores cuando llamemos al módulo.</p>
<p>Otra cosa que puede resultar confusa es cómo especificar la política del <strong>Bucket</strong>. Podemos especificarla o bien con un archivo heredoc (EOF) o directamente con una función de <strong>Terraform</strong> llamada «templatefile».</p>
<p>El primer ejemplo está en la <a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs">documentación oficial de Terraform</a>, una web que os sugiero visitar para entender el verdadero poder de los módulos y sus recursos.</p>
<p>En nuestro caso usamos el segundo ejemplo y necesitamos que en la misma carpeta, haya otra llamada «templates» y dentro de ella, la política del <strong>Bucket</strong> como un archivo JSON.</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">{
    "Version": "2012-10-17",
    "Id": "PolicyForCloudFrontPrivateS3Content",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "${origin_access_identity_arn}"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::${origin_access_identity_bucket_name}/*"
        }
    ]
  }</pre>
</div>
<p>Como seguramente os habréis dado cuenta, hemos introducido varias variables ${origin_access_identity_arn} y ${origin_access_identity_bucket_name} y eso es porque así, introduciremos los valores desde fuera de esa política, desde el propio archivo &#8216;main.tf».</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">policy = templatefile("${path.module}/templates/s3_origin_access_identity.json", {
    origin_access_identity_arn         = aws_cloudfront_origin_access_identity.this.iam_arn,
    origin_access_identity_bucket_name = var.bucket_name
  })</pre>
</div>
<p>Así, introducimos el <em>arn </em>llamando a otro recurso llamado «<em>aws_cloudfront_origin_access_identity»</em> y el nombre del bucket lo introducimos como hemos visto antes con nuestro archivo de variables.</p>
<p>Ahora solo necesitamos especificar el proveedor de <strong>Terraform</strong> y llamar al módulo con otro archivo que llamaremos «provider.tf» con los valores que hemos especificado:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">provider "aws" {
  region     = var.region
  version    = "~&gt; 2.0"
}

provider "aws" {
  alias  = "aws_us_east_1"
  region = "us-east-1"
}
module "s3" {
    source               = "../../../../../../modules/s3-cloudfront/"
    bucket_name          = var.bucket_name
    tag_name             = var.tag_name
    type_acl             = var.type_acl
    versioning           = var.versioning
    destroy              = var.destroy
    aliases              = var.aliases
    certificate_arn      = var.certificate_arn    
}</pre>
</div>
<p>Y por último, desplegar nuestro módulo con los comandos <strong>terraform init</strong>, <strong>terraform plan</strong> y <strong>terraform apply</strong>.</p>
<h2 class="western"><span style="color: #404040;"><span style="font-family: Open Sans, sans-serif;"><span style="font-size: xx-large;">Conclusión</span></span></span></h2>
<p>En este post, hemos visto como <strong>desplegar un Bucket S3</strong> con su respectiva política con <strong>Terraform</strong>. Os sugiero que visitéis la documentación oficial de <strong>Terraform</strong> para seguir aprendiendo sobre los módulos, recursos y sus parámetros.</p>
<p>También os invito a <a href="https://geko.cloud/es/contacto/">contactar con nosotros</a> en caos de que necesitéis información acerca del mundo <a href="https://geko.cloud/es/devops/">DevOps</a> y no dudéis en seguir nuestro <a href="https://geko.cloud/es/blog/labs/">blog</a> para descubrir otros posts útiles.</p>
<p><a href="https://geko.cloud/es/contacto/"><img loading="lazy" decoding="async" class="aligncenter wp-image-3265" src="https://geko2.factoryfy.com/wp-content/uploads/geko-1-150x150.png" alt="" width="82" height="82" /></a></p>
<p>La entrada <a href="https://geko.cloud/es/una-vista-rapida-de-los-modulos-de-terraform/">Una vista rápida de los módulos de Terraform</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/una-vista-rapida-de-los-modulos-de-terraform/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Volúmenes NFS en contenedores Docker</title>
		<link>https://geko.cloud/es/volumenes-nfs-contenedores-docker/</link>
					<comments>https://geko.cloud/es/volumenes-nfs-contenedores-docker/#respond</comments>
		
		<dc:creator><![CDATA[Jose Luis Sánchez]]></dc:creator>
		<pubDate>Mon, 16 Nov 2020 10:14:52 +0000</pubDate>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/es/?p=3057</guid>

					<description><![CDATA[<p>En muchas ocasiones nos encontramos con la necesidad de tener que usar en docker un volumen que esté compartido desde otro servidor mediante NFS. Para esto docker incluye su propio driver de NFS que nos permitirá directamente usar ese volumen sin tener que montarlo dentro de la máquina host. Tenemos diferentes formas de usar estos [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/volumenes-nfs-contenedores-docker/">Volúmenes NFS en contenedores Docker</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="font-weight: 400;">En muchas ocasiones nos encontramos con la necesidad de tener que <strong>usar en docker un volumen que esté compartido desde otro servidor mediante NFS</strong>. Para esto docker incluye su propio driver de NFS que nos permitirá directamente usar ese volumen sin tener que montarlo dentro de la máquina host.</span></p>
<p><span style="font-weight: 400;">Tenemos diferentes formas de usar estos volúmenes NFS en nuestros contenedores:</span></p>
<ul>
<li><span style="font-weight: 400;"><span style="font-weight: 400;"> En primer lugar, podemos crear un volumen que podremos usar tanto en <strong>docker compose</strong> como usando un <strong>docker run</strong>. Para esto usaremos el siguiente comando: </span></span>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">  $ docker volume create --driver local 
      --opt type=nfs 
      --opt o=nfsvers=4,addr=nfs.example-domain.com,rw 
      --opt device=:/path/to/dir 
      volume-name</pre>
</div>
<p><span style="font-weight: 400;"><span style="font-weight: 400;"> Una vez que tenemos creado el volumen, podremos montarlo dentro de nuestro contenedor </span></span></p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">  $ docker run -it --rm 
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,"volume-opt=o=nfsvers=4,addr=nfs.example-domain.com",volume-opt=device=:/host/path 
    volume-name</pre>
</div>
</li>
<li>Esta misma configuración <strong><strong>podemos aplicarlas dentro de nuestro docker-comper</strong></strong>. Dentro de nuestro <strong>docker-compose.yaml </strong>tendremos que crear el volumen y montarlo dentro de nuestro contenedor.
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{"># Container conf
  ...
  container-conf:
    container_name: foo/bar
    image: imagename:tag
    ports:
      - 80:80
    volumes:
      - new_volume:/path/inside/container
  ...
# Create volume
  ...
  volumes:
    new_volume:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=nfs.example-domain.com,rw
        device: ":/host/path/to/dir"
  ...</pre>
</div>
<p>Esta misma situación nos la hemos encontrado teniendo la necesidad de montar al contenedor un <strong>EFS </strong>(Elastic File System) de Amazon Web Services. Este servicio de AWS proporciona almacenamiento escalable, elástico y concurrente y podremos añadirlo usando el mismo driver de NFS en docker.</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{"># Container conf
 ...
  container-conf:
    container_name: foo/bar
    image: imagename:tag
    ports:
      - 80:80
    volumes:
      - new_volume:/path/inside/container
 ... 
# Create volume
 ...
  volumes:
    efs_volume:
      driver: local
      driver_opts:
        type: nfs
        o: addr=[EFS_DNS],nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2
        device: [EFS_DNS]:/
 ...</pre>
</div>
<p>Hay que tener en cuenta que si acabamos de crear este <strong>EFS</strong>, puede ser que cuando intentemos crear este volumen <strong>nos dé un error avisando de que no encuentra el <em>endpoint</em> de EFS</strong>. Esto se debe a que esas <strong>DNS</strong> tardaran unos minutos en propagarse. En el caso de que no podáis añadirlo mediante el <em>endpoint</em>, podremos hacerlo directamente desde la IP del <strong>EFS</strong>.</li>
</ul>
<p>Esperamos que esta explicación te haya sido de utilidad y no olvides que en <a href="https://geko.cloud/es/">Geko cloud</a> estamos a tu disposición para la gestión de <a href="https://geko.cloud/es/servicios-cloud/gestion-cloud/">infraestructuras cloud</a> y microservicios.</p>
<p>Si tienes otras dudas relacionadas con <a href="https://geko.cloud/es/servicios-cloud/arquitectura-de-microservicios-y-docker/">docker</a> o <a href="https://geko.cloud/es/que-es-kubernetes/">Kubernetes</a>, quizá puedas encontrar respuestas en otras de las entradas de nuestro <a href="https://geko.cloud/es/blog/">blog</a>.</p>
<p>¡Hasta la próxima!</p>
<h4 style="text-align: center;"><a href="https://geko.cloud/es/contacto/">¡Contacta con nosotros y charlemos sobre cómo podemos ayudarte a hacer tu plataforma más ágil y segura!</a></h4>
<p><a href="https://geko.cloud/es/contacto/"><img loading="lazy" decoding="async" class="aligncenter wp-image-3265" src="https://geko2.factoryfy.com/wp-content/uploads/geko-1-300x297.png" alt="" width="65" height="64" /></a></p>
<p>La entrada <a href="https://geko.cloud/es/volumenes-nfs-contenedores-docker/">Volúmenes NFS en contenedores Docker</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/volumenes-nfs-contenedores-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Problemas de rendimiento en RDS por IOPS en GP SSD</title>
		<link>https://geko.cloud/es/problemas-rendimiento-rds-iops-gp-ssd/</link>
					<comments>https://geko.cloud/es/problemas-rendimiento-rds-iops-gp-ssd/#respond</comments>
		
		<dc:creator><![CDATA[Jose Luis Sánchez]]></dc:creator>
		<pubDate>Mon, 14 Sep 2020 11:37:09 +0000</pubDate>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[MySQL]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/es/?p=2602</guid>

					<description><![CDATA[<p>Queremos compartir con vosotros un problema que hemos resuelto recientemente con uno de nuestros proyectos. RDS es el servicio de BBDD gestionadas que ofrece AWS, con el que resuelven los principales problemas de gestión, operación y mantenimiento que comporta tener una plataforma de bases de datos relacional. Con RDS todo es muy sencillo, garantizas el [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/problemas-rendimiento-rds-iops-gp-ssd/">Problemas de rendimiento en RDS por IOPS en GP SSD</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Queremos compartir con vosotros un problema que hemos resuelto recientemente con uno de nuestros proyectos.</p>
<p>RDS es el servicio de BBDD gestionadas que ofrece AWS, con el que resuelven los principales problemas de gestión, operación y mantenimiento que comporta tener una plataforma de bases de datos relacional. Con RDS todo es muy sencillo, garantizas el servicio y la operativa permitiendo crecer y decrecer según necesidad.</p>
<p>Además, Amazon tiene su propio motor basado en Mysql, Aurora, que incluso permite tener una plataforma de base de datos serverless, de la cual hablaremos en otro post más adelante.</p>
<p>&nbsp;</p>
<h3>El escenario que enfrentamos</h3>
<p>Un cliente, con su plataforma full basada en AWS, con todas sus BBDD relacionales usando RDS, manifiesta en una de sus plataformas problemas de rendimiento, caídas, comportamiento errante y poco predecible, etc.</p>
<p>Dicho problema no ocurre desde el inicio del proyecto, sino que en cierto momento empezó a degradar hasta convertirse en un problema real. Apreciamos que RDS estaba desplegado usando instancia de bursting T3, dónde los créditos parecían decrecer de forma periódica.</p>
<p>Se opta por cambiar la instancia al tipo M5 para tener un mejor rendimiento y disponibilidad de recursos, tras lo cual la performance mejora muy sensiblemente hasta que advertimos lo siguiente:</p>
<p><a href="https://geko2.factoryfy.com/wp-content/uploads/rds-disk-latency.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2603" src="https://geko2.factoryfy.com/wp-content/uploads/rds-disk-latency.png" alt="" width="740" height="262" /></a><a href="https://geko2.factoryfy.com/wp-content/uploads/queuerdsaws.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2604" src="https://geko2.factoryfy.com/wp-content/uploads/queuerdsaws.png" alt="" width="518" height="272" /></a></p>
<p>Las métricas siguen advirtiendo de que existe latencia de escritura/lectura y se encolan IOPS. ¿Cómo es esto posible en un disco SSD de uso general?</p>
<p>La métrica que para nosotros es importante seguir en cualquier RDS es la referente al <strong>Disk QueueDepth</strong>, esta métrica indica el tamaño de la cola que el sistema tiene en espera para ser procesada en operación IO de disco, es decir, la deuda en operaciones a disco que el sistema tiene. La latencia de disco de Read Write no es más que un espejismo de este hecho.</p>
<h3>La solución</h3>
<p>La explicación es simple, AWS RDS provisiona un total de<strong> 3 IOPS/Gb</strong> según el tamaño del disco EBS que se crea. La RDS del cliente se creó con<strong> 20Gb de tamaño total = 60 Provisiones IOPS</strong> , que AWS por defecto provisiona siempre un mínimo de<strong> 100 IOPS</strong> .</p>
<p>Esto explicaba el por qué la CPU y RAM no se veían afectados pero sí el rendimiento como tal.</p>
<p>En cuanto detectamos el cuello de botella, procedemos a ampliar mediante Terraform el tamaño del volumen EBS asociado a <strong>100Gb, con sus correspondientes 300IOPS (el triple que antes)</strong>.</p>
<p>El resultado lo tenéis aquí:</p>
<p><a href="https://geko2.factoryfy.com/wp-content/uploads/readwritelatencyafterebs.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2605" src="https://geko2.factoryfy.com/wp-content/uploads/readwritelatencyafterebs.png" alt="" width="756" height="270" /></a><a href="https://geko2.factoryfy.com/wp-content/uploads/rdsquesolvedissue.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2606" src="https://geko2.factoryfy.com/wp-content/uploads/rdsquesolvedissue.png" alt="" width="519" height="274" /></a></p>
<p>Nada más que añadir, se acabaron la latencias, los bloqueos y en general los problemas con esta plataforma, os dejamos el <a href="https://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/CHAP_Storage.html">enlace a la documentación oficial de AWS sobre RDS y EBS</a></p>
<p>Recordad que para entornos productivos, la recomendación es siempre provisionar al menos de 100Gb el disco (aunque no nos hagan falta), para obtener esos 300 IOPS mínimo.</p>
<p>Recordad que<a href="https://geko.cloud/es/contacto/"> en Geko seguimos a vuestra disposición para ayudaros</a> con cualquier problema de rendimiento que tengáis con vuestra plataforma.</p>
<p>La entrada <a href="https://geko.cloud/es/problemas-rendimiento-rds-iops-gp-ssd/">Problemas de rendimiento en RDS por IOPS en GP SSD</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/problemas-rendimiento-rds-iops-gp-ssd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kubernetes backups con Velero</title>
		<link>https://geko.cloud/es/kubernetes-backups-con-velero/</link>
					<comments>https://geko.cloud/es/kubernetes-backups-con-velero/#comments</comments>
		
		<dc:creator><![CDATA[Jose Luis Sánchez]]></dc:creator>
		<pubDate>Mon, 25 May 2020 08:43:16 +0000</pubDate>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://geko2.factoryfy.com/?p=1943</guid>

					<description><![CDATA[<p>Hablar sobre la copia de seguridad en un clúster de Kubernetes puede sonar extraño y es posible que no sea necesario, ya que puede recrear en cualquier momento y de manera muy rápida cualquiera de sus implementaciones o recursos simplemente aplicando un archivo yaml &#8230; pero en algunos casos una copia de seguridad de sus [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/kubernetes-backups-con-velero/">Kubernetes backups con Velero</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Hablar sobre la copia de seguridad en un clúster de <a href="https://geko.cloud/es/que-es-kubernetes/">Kubernetes</a> puede sonar extraño y es posible que no sea necesario, ya que puede recrear en cualquier momento y de manera muy rápida cualquiera de sus implementaciones o recursos simplemente aplicando un archivo yaml &#8230; pero en algunos casos una copia de seguridad de sus recursos puede ser muy útil y puede ser nuestro salvavidas.</p>
<p><a href="https://velero.io" target="_blank" rel="noopener noreferrer">Velero</a> es una herramienta de código abierto para realizar copias de seguridad y restaurar de forma segura, realizar recuperación ante desastres y migrar recursos de clúster de <a href="https://geko.cloud/es/que-es-kubernetes/">Kubernetes</a> y volúmenes persistentes.</p>
<p>Dicho esto, enumeremos en qué situaciones Velero puede ayudarnos:</p>
<ul>
<li>Copia de seguridad de aplicaciones con estado</li>
<li>Aplicaciones de respaldo instaladas de manera no declarativa</li>
<li>Copia de seguridad de información de PVC</li>
<li>Migraciones de clúster</li>
<li>Replicar configuraciones de clúster (por ejemplo, desde producción hasta pruebas o clústeres de desarrollo.</li>
</ul>
<p>&nbsp;</p>
<p>Después de la aburrida introducción, comenzaremos con la parte divertida. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h2>Instala Velero en tu clúster de kubernetes</h2>
<p>Para este ejemplo, utilizaremos AWS EKS como nuestro proveedor cloud.</p>
<p>En primer lugar, debes instalar el cliente Velero en tu estación de trabajo. Para hacerlo, simplemente ve <a href="https://github.com/vmware-tanzu/velero/releases">aquí</a> y descarga el último tarball de acuerdo con el sistema operativo de tu estación de trabajo y extrae el tarball:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">tar -xvf RELEASE-TARBALL-NAME.tar.gz</pre>
</div>
<p>Mueve el binario Velero a algún lugar de tu $ PATH. En MacOS simplemente ejecuta esto:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">brew install velero</pre>
</div>
<div class="tlid-input input">
<div class="source-wrap">
<div class="input-full-height-wrapper tlid-input-full-height-wrapper">
<div class="source-input">
<div class="source-footer-wrap source-or-target-footer">
<div class="character-count tlid-character-count"></div>
</div>
</div>
</div>
</div>
</div>
<div class="tlid-results-container results-container">
<div class="tlid-result result-dict-wrapper">
<div class="result tlid-copy-target">
<div class="result-header">
<div class="starbutton jfk-button-flat jfk-button unstarred" tabindex="0" role="button" aria-label="Destacar traducción" data-tooltip="Destacar traducción" data-tooltip-align="t,c">
<div class="jfk-button-img"><span class="" title="">Una vez que tenemos el cliente Velero instalado en nuestro sistema, podemos proceder a instalar Velero en nuestro clúster de <a href="https://geko.cloud/es/que-es-kubernetes/">kubernetes</a>.</span> <span title="">Simplemente, ejecuta esto:</span></div>
<div></div>
</div>
</div>
</div>
</div>
</div>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">velero install 
    --provider aws 
    --bucket where-to-store-velero-backups 
    --use-restic 
    --secret-file ~/.aws/credentials 
    --use-volume-snapshots=false 
    --plugins=velero/velero-plugin-for-aws:v1.0.0 
    --backup-location-config region=eu-west-1</pre>
</div>
<p>De forma predeterminada, Velero se instala en el namespace velero, pero puedes cambiarlo agregando el indicador &#8211;namespace. Velero utiliza restic para almacenar los datos de los volúmenes adjuntos. Cuando finalices la instalación, deberías ver algo como ésto en su clúster k8s:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">$ kubectl get all -n velero
NAME                          READY   STATUS    RESTARTS   AGE
pod/restic-4xr6v              1/1     Running   0          157d
pod/restic-bg58w              1/1     Running   0          157d
pod/restic-hf2fm              1/1     Running   0          157d
pod/restic-w4rvh              1/1     Running   0          157d
pod/velero-57cd659988-bd6nd   1/1     Running   0          73d

NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/restic   4         4         4       4            4                     157d

NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/velero   1/1     1            1           157d

NAME                                DESIRED   CURRENT   READY   AGE
replicaset.apps/velero-57cd659988   1         1         1       157d
</pre>
</div>
<p>En nuestro caso, tenemos 4 nodos de trabajo y restic está instalado en cada nodo que tenemos (se configurará un daemonset).</p>
<p>Por defecto, Velero no incluirá los volúmenes en la copia de seguridad. Para respaldarlos, debes agregar una anotación. Puedes agregarla así:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">$ kubectl -n annotate pod/your_pod backup.velero.io/backup-volumes=volume_1,volume_2</pre>
</div>
<p>(agregua volúmenes separados por comas) o simplemente agrégalo en su definición de implementación, por ejemplo:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
      annotations:
        backup.velero.io/backup-volumes: myapp-logs
    spec:
      volumes:
        - name: myapp-logs
          persistentVolumeClaim:
           claimName: myapp-logs
      containers:
      - image: myapp:latest
        name: myapp
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/var/log/myapp"
            name: myapp-logs
            readOnly: false</pre>
</div>
<p><em>Nota</em>: los volúmenes hostPath no son compatibles, pero sí se admite el nuevo tipo de volumen local.</p>
<p>Y, por último, algunos ejemplos de utilización para crear, restaurar y mostrar copias de seguridad:</p>
<p>Backup manual:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{"># Copia de seguridad de TODOS los recursos en el clúster (todo el clúster)
$ velero backup create my-backup-20200515

# Copia de seguridad de un namespace
$ velero backup create my-backup-20200515 --include-namespaces namespace_to_backup

# Copia de seguridad de TODOS los namespaces excepto los especificados
$ velero backup create my-backup-20200515 --exclude-namespaces namespace_1_to_exclude,namespace_2_to_exclude
</pre>
</div>
<p>Backup Programado:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">$ velero create schedule myapp-backup-daily --schedule="0 7 * * *" --include-namespaces namespace_to_backup</pre>
</div>
<p>Velero respaldará todos los recursos incluidos en tu selección (pods, implementaciones, servicios, &#8230;)</p>
<p>La retención de copia de seguridad predeterminada es de 30 días. Si deseas cambiarla, agregue la bandera &#8211;ttl. Este indicador te permite especificar el período de retención de la copia de seguridad con el valor especificado en horas, minutos y segundos en la forma &#8211;ttl 24h0m0s. Si no se especifica, se aplicará un valor TTL predeterminado de 30 días.</p>
<p>Restaurar Backup:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{">$ velero restore create --from-backup backup_name</pre>
</div>
<p>Otros comandos que te serán muy útiles de conocer:</p>
<div class="wp-block-codemirror-blocks code-block ">
<pre class="CodeMirror" data-setting="{"># Para mostrar todas las listas de copias de seguridad almacenadas (nombre, estado, fecha de creación y caducidad)
$ velero get backups

# Para mostrar detalles de una copia de seguridad específica
$ velero describe backup backup_name
</pre>
</div>
<p>Velero es bastante fácil de instalar y ejecutar y puede salvarte la vida en algunas circunstancias. <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<hr />
<p>Espero que hayas disfrutado de este post y te animo a que <a href="https://geko.cloud/es/blog/">revises nuestro blog para leer otrosposts</a> que puedan ser de tu interés. <a href="https://geko.cloud/es/contacto/">No dudes en contactarnos</a> si deseas que te ayudemos en tus proyectos.</p>
<p>¡Nos vemos en la próxima entrada!</p>
<p>La entrada <a href="https://geko.cloud/es/kubernetes-backups-con-velero/">Kubernetes backups con Velero</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/kubernetes-backups-con-velero/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
