<?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>Destacado LABS archivos - Geko Cloud</title>
	<atom:link href="https://geko.cloud/es/blog/destacado-labs/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Servicios de consultoría cloud y devops</description>
	<lastBuildDate>Thu, 29 May 2025 09:34:59 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://geko.cloud/wp-content/uploads/2021/08/cropped-geko-fav-150x150.png</url>
	<title>Destacado LABS archivos - Geko Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Cómo migrar a la nube con AWS Well-Architected Framework</title>
		<link>https://geko.cloud/es/como-migrar-con-aws-well-architected-framework/</link>
					<comments>https://geko.cloud/es/como-migrar-con-aws-well-architected-framework/#respond</comments>
		
		<dc:creator><![CDATA[Geko Cloud]]></dc:creator>
		<pubDate>Mon, 10 Mar 2025 08:45:26 +0000</pubDate>
				<category><![CDATA[Destacado LABS]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Sin categorizar]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=10083</guid>

					<description><![CDATA[<p>El AWS Well-Architected Framework proporciona una hoja de ruta para desarrollar soluciones en la nube eficientes y escalables. Además, las mejores prácticas recomendadas garantizan que los servicios en la nube sean rentables, de alto rendimiento y, sobre todo, seguros. El marco permite a los usuarios diseñar y operar sistemas en la nube de AWS que [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/como-migrar-con-aws-well-architected-framework/">Cómo migrar a la nube con AWS Well-Architected Framework</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;">El AWS Well-Architected Framework proporciona una hoja de ruta para desarrollar </span><b>soluciones en la nube eficientes y escalables</b><span style="font-weight: 400;">. Además, las mejores prácticas recomendadas garantizan que los servicios en la nube sean rentables, de alto rendimiento y, sobre todo, seguros. El marco permite a los usuarios </span><b>diseñar y operar sistemas en la nube de AWS que cumplan con los requisitos de los entornos de TI modernos</b><span style="font-weight: 400;">.</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">¿Qué es el AWS Well-Architected Framework?</span></h2>
<p><span style="font-weight: 400;">AWS Well-Architected Framework es una </span><b>herramienta para evaluar y mejorar las arquitecturas de la nube</b><span style="font-weight: 400;">. Se basa en seis pilares: </span><b>excelencia operativa</b><span style="font-weight: 400;">, </span><b>seguridad</b><span style="font-weight: 400;">, </span><b>fiabilidad</b><span style="font-weight: 400;">, </span><b>eficiencia en el desempeño</b><span style="font-weight: 400;">, </span><b>optimización de costes</b><span style="font-weight: 400;"> y </span><b>sostenibilidad</b><span style="font-weight: 400;">. El marco proporciona las mejores prácticas y pautas para diseñar y operar entornos seguros, eficientes y rentables en la nube de AWS.</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">¿Cómo migrar a AWS?</span></h2>
<p><span style="font-weight: 400;">Los desafíos de migrar a la nube de AWS varían desde detalles técnicos hasta requisitos regulatorios. El </span><b>marco de buena arquitectura de AWS permite identificar obstáculos de forma temprana y abordarlos de manera eficaz</b><span style="font-weight: 400;">. Más allá de una simple tarea técnica, el uso de la nube se considera no solo como una tarea técnica, sino también como parte de la estrategia corporativa.</span><b> </b></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Por esta razón, las organizaciones que adoptan una visión holística de la implementación y operación de sus servicios en la nube están mejor posicionadas para afrontar con éxito tanto los desafíos inmediatos como los objetivos comerciales a largo plazo.</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">Los seis pilares de un marco de buena arquitectura AWS  </span></h2>
<p><span style="font-weight: 400;">El AWS Well-Architected Framework se estructura en</span><b> seis pilares centrales</b><span style="font-weight: 400;">, cada uno de los cuales aborda aspectos específicos de la arquitectura en la nube. Gracias a esta división, las empresas pueden crear un entorno robusto y eficiente.</span></p>
<p>&nbsp;</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><b>Excelencia operativa</b><span style="font-weight: 400;">: apoyar y optimizar las operaciones para lograr mejores procesos de negocio a través de la automatización y flujos de trabajo optimizados.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Seguridad</b><span style="font-weight: 400;">: garantizar la protección de los datos y sistemas, con especial atención a la evaluación de riesgos, la integridad de los datos, la confidencialidad y la disponibilidad.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Fiabilidad</b><span style="font-weight: 400;">: sistemas robustos que permanecen estables incluso ante eventos inesperados y pueden recuperarse rápidamente.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Eficiencia en el rendimiento</b><span style="font-weight: 400;">: seleccionar los recursos y tecnologías adecuados y adaptar el rendimiento del sistema a los requisitos cambiantes.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Optimización de costes</b><span style="font-weight: 400;">: controlar el consumo de recursos y los costes para garantizar que las inversiones creen valor.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Sostenibilidad</b><span style="font-weight: 400;">: minimizar el impacto ambiental de las cargas de trabajo en la nube, reduciendo el consumo de energía y las emisiones de carbono.</span></li>
</ul>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Al aplicar estos principios, </span><b>AWS Well-Architected Framework ayuda a las organizaciones a crear un entorno de nube de última generación</b><span style="font-weight: 400;">.</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">¿Cómo debe ser el marco de buena arquitectura de AWS? </span></h2>
<p><b>El marco de buena arquitectura de AWS y el modelo de responsabilidad compartida</b><span style="font-weight: 400;"> son dos caras de la misma moneda. Mientras que el primero proporciona los principios y mejores prácticas para diseñar y operar una arquitectura de nube eficiente, el segundo define claramente las responsabilidades de AWS y sus clientes. </span></p>
<p>&nbsp;</p>
<h3><span style="font-weight: 400;">Responsabilidad de AWS:</span></h3>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Seguridad física de los centros de datos.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Integridad de los dispositivos de red.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Fiabilidad del hardware del host.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Seguridad de la infraestructura global que respalda la disponibilidad de los servicios de AWS.</span></li>
</ul>
<p>&nbsp;</p>
<h3><span style="font-weight: 400;">Responsabilidad del cliente:</span></h3>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Implementación de la gestión del control de acceso.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Cifrado de datos.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Funcionamiento seguro de las aplicaciones.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Gestión eficaz de parches y configuraciones de sistemas operativos y aplicaciones.</span></li>
</ul>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Si se malinterpreta el modelo de responsabilidad compartida, pueden generarse brechas en el cumplimiento y la seguridad. Por el contrario, los clientes que implementan este enfoque reducen los riesgos y logran un alto nivel de seguridad. </span></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">El marco Well-Architected complementa este modelo proporcionando pautas claramente definidas para diseñar las tareas del cliente.</span></p>
<h2></h2>
<h2><span style="font-weight: 400;">El marco Well-Architected para optimizar el rendimiento, la seguridad y los costes</span></h2>
<p><span style="font-weight: 400;">El AWS Well-Architected Framework ha demostrado su eficacia para muchas empresas. Es el punto de partida para conceptos de seguridad mejorados y permite un importante ahorro de costes. Los siguientes ejemplos muestran cómo las empresas optimizan su infraestructura en la nube utilizando el marco.</span></p>
<p>&nbsp;</p>
<h3><span style="font-weight: 400;">Ejemplos de excelencia operacional:</span></h3>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Las empresas pueden implementar pruebas de carga automatizadas para verificar el rendimiento de su arquitectura de nube en diferentes escenarios. Esto ayuda a identificar cuellos de botella de forma temprana y optimizar toda la infraestructura para lograr un rendimiento óptimo bajo alta carga.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Al establecer KPI detallados, las empresas pueden monitorear continuamente el rendimiento de su arquitectura en la nube. Analizar estos datos ayuda a identificar tendencias y realizar optimizaciones proactivas para mejorar continuamente la eficiencia.</span></li>
</ul>
<p>&nbsp;</p>
<h3><span style="font-weight: 400;">Ejemplos de mejoras de seguridad:</span></h3>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">La automatización de pruebas garantiza el cumplimiento de las políticas de seguridad. Los scripts proporcionados por el marco comprueban automáticamente las configuraciones durante las actualizaciones. Las vulnerabilidades se identifican y resuelven rápidamente antes de que lleguen a producción.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Las pruebas de penetración ayudan a las empresas a evaluar la seguridad de su nube. Las pruebas identifican riesgos de seguridad ocultos a través de ataques simulados. De esta forma se mejoran continuamente los mecanismos de protección para hacer frente a las ciberamenazas.</span></li>
</ul>
<p>&nbsp;</p>
<h3><span style="font-weight: 400;">Ejemplos de ahorro de costes:</span></h3>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Dirigir la asignación de recursos a áreas críticas para el negocio aumenta la eficiencia de los costos operativos y mejora el ROI (retorno de la inversión).</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Las directrices marco para la gestión de recursos permiten a las empresas hacer un uso óptimo de sus recursos. Al escalar hacia arriba o hacia abajo según la carga de trabajo, se pueden optimizar los costos y gestionar los picos de carga.</span></li>
</ul>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Los escenarios ilustran cómo el  Well-Architected Framework ayuda a desarrollar enfoques personalizados que se adaptan a las necesidades específicas de las empresas.</span></p>
<p>&nbsp;</p>
<h2><span style="font-weight: 400;">Los partners de AWS como clave del éxito</span></h2>
<p><span style="font-weight: 400;">Al adoptar el AWS Well-Architected Framework, existen obstáculos que pueden obstaculizar el progreso. A pesar de los beneficios del AWS Well-Architected Framework, las empresas pueden enfrentar obstáculos que dificultan su implementación. Por ello, colaborar con un partner de AWS resulta clave para maximizar su aprovechamiento. Además, esto les permite acceder a conocimientos especializados y una serie de otras ventajas:</span></p>
<p>&nbsp;</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><b>Conocimiento experto profundo</b><span style="font-weight: 400;">: los partners de AWS tienen un conocimiento integral de los servicios y arquitecturas de AWS. Están familiarizados con los últimos avances y le ayudarán a crear un entorno de nube preparado para el futuro.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Estrategias de implementación a medida</b><span style="font-weight: 400;">: la implementación no es una solución única para todos, sino que requiere un enfoque individual. Los partners de AWS comprenden los desafíos específicos de cada negocio y ofrecen estrategias personalizadas.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Acceso a los recursos de AWS</b><span style="font-weight: 400;">: los partners de AWS tienen acceso privilegiado a sus recursos, herramientas y opciones de soporte. Esto abarca desde soporte técnico hasta materiales de capacitación y documentación de mejores prácticas.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Aumenta la eficiencia y reduce los costes</b><span style="font-weight: 400;">: con sus muchos años de experiencia en proyectos, los partners de AWS pueden ayudar a aumentar el rendimiento del entorno. Ayudan a identificar y eliminar costos innecesarios.</span></li>
<li style="font-weight: 400;" aria-level="1"><b>Mitigación de riesgos</b><span style="font-weight: 400;">: los partners de AWS están familiarizados con los errores comunes al implementar el marco. Ayudan a identificar problemas antes de que tengan un impacto en el negocio.</span></li>
</ul>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">Como partners de AWS desde hace tiempo, </span><a href="https://www.claranet.com/"><span style="font-weight: 400;">Claranet</span></a><span style="font-weight: 400;"> y </span><a href="https://geko.cloud/"><span style="font-weight: 400;">Geko</span></a><span style="font-weight: 400;"> combinamos experiencia y conocimientos en tecnologías de la nube con un profundo entendimiento del ecosistema de AWS. Esto garantiza una optimización eficiente del entorno y una migración sin problemas a la infraestructura existente.</span></p>
<p><span style="font-weight: 400;">¿Quieres aprovechar al máximo las oportunidades del AWS Well-Architected Framework? <a href="https://geko.cloud/es/contacto/">Contacta</a> con nuestro equipo de expertos. </span></p>
<p>La entrada <a href="https://geko.cloud/es/como-migrar-con-aws-well-architected-framework/">Cómo migrar a la nube con AWS Well-Architected Framework</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/como-migrar-con-aws-well-architected-framework/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 fetchpriority="high" 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 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 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>Cómo actualizar Gitlab</title>
		<link>https://geko.cloud/es/como-actualizar-gitlab/</link>
					<comments>https://geko.cloud/es/como-actualizar-gitlab/#respond</comments>
		
		<dc:creator><![CDATA[Christian]]></dc:creator>
		<pubDate>Tue, 14 Dec 2021 14:57:55 +0000</pubDate>
				<category><![CDATA[Destacado LABS]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Gitlab]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=6555</guid>

					<description><![CDATA[<p>Recientemente, se ha detectado una vulnerabilidad en Gitlab que afecta a las siguientes versiones: 13.10.3 13.9.6 13.8.8 Nos puede suceder que tengamos algún Gitlab aún mas viejo a estas versiones, entonces tendremos que actualizarlo a la versión más reciente pasando por varias versiones intermedias. A continuación, mostraremos los pasos para actualizar Gitlab en Ubuntu 18. [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/como-actualizar-gitlab/">Cómo actualizar Gitlab</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="font-weight: 2000;">Recientemente, se ha detectado una <a href="https://www.rapid7.com/blog/post/2021/11/01/gitlab-unauthenticated-remote-code-execution-cve-2021-22205-exploited-in-the-wild/">vulnerabilidad en Gitlab</a> que afecta a las siguientes versiones:</span></p>
<ul>
<li><strong>13.10.3</strong></li>
<li><strong>13.9.6</strong></li>
<li><strong>13.8.8</strong></li>
</ul>
<p><span style="font-weight: 2000;">Nos puede suceder que tengamos algún Gitlab aún mas viejo a estas versiones, entonces tendremos que actualizarlo a la versión más reciente pasando por varias versiones intermedias.</span></p>
<p><span style="font-weight: 2000;">A continuación, mostraremos los pasos para actualizar Gitlab en Ubuntu 18. Partiremos en el ejemplo de gitlab-ee 12.7.5-ee y lo llevaremos hasta la versión 14.4.2-ee. </span></p>
<p><span style="font-weight: 2000;">Consideramos que Gitlab está instalado previamente desde el repositorio oficial con sus servicios postgresql y redis embebidos.</span></p>
<h2>Pasos previos</h2>
<p><span style="font-weight: 2000;">Si estamos trabajando en el Cloud y tenemos nuestro Gitlab instalado en una instancia EC2&lt;, se recomienda crear una imagen de la instancia y clonarla en una nueva para realizar los pasos de migración.</span></p>
<p><span style="font-weight: 2000;">También necesitaremos acceso a la consola de Linux de dicha instancia y tener permisos de root.</span></p>
<h2>Updates + snapshots</h2>
<p><span style="font-weight: 2000;">Ejecutamos en secuencia los siguientes comandos &lt;apt install&gt; esperando en cada caso que no nos dan ningún error y finalizan correctamente.</span></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;}">sudo apt install gitlab-ee=12.10.14-ee.0
sudo apt install gitlab-ee=13.0.14-ee.0
sudo apt install gitlab-ee=13.1.11-ee.0
sudo apt install gitlab-ee=13.8.8-ee.0
sudo apt install gitlab-ee=13.12.10-ee.0
sudo apt install gitlab-ee=13.12.12-ee.0
</pre>
</div>
<p><span style="font-weight: 2000;">Una vez finalizados estos pasos, tendremos que ejecutar en consola el siguiente comando, ya que gitlab necesita migrar sus proyectos existentes al nuevo sistema de <a href="https://docs.gitlab.com/ee/administration/raketasks/storage.html"><em>hashed_storage</em></a> que utilizan las versiones siguientes.</span></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;}">sudo gitlab-rake gitlab:storage:migrate_to_hashed
</pre>
</div>
<p><span style="font-weight: 2000;">Al finalizar el comando anterior, debemos reiniciar la instancia y volver a conectarnos a ella.</span></p>
<p><span style="font-weight: 2000;">En este punto contamos con <strong>Gitlab 13.12.12</strong></span></p>
<h2>Continuemos con las actualizaciones</h2>
<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;}">sudo apt install gitlab-ee=14.0.11-ee.0
</pre>
</div>
<p><span style="font-weight: 2000;">Al terminar este paso, deberemos comprobar que todas las migraciones han finalizado correctamente.</span></p>
<p><span style="font-weight: 2000;">A partir de esta versión Gitlab nos proporciona una nueva herramienta que nos permite ver si se están ejecutando migraciones. Debemos comprobar que no haya ninguna en cola y que todas hayan finalizado sin errores.</span></p>
<p><span style="font-weight: 2000;">Encontramos esta herramienta en: </span><i>administration&gt;monitoring&gt;Background Migrations</i>.</p>
<p><img loading="lazy" decoding="async" class="wp-image-6569 aligncenter" src="https://geko.cloud/wp-content/uploads/2021/12/migrations-gitlab-1-300x125.png" alt="gitlab" width="1315" height="548" srcset="https://geko.cloud/wp-content/uploads/2021/12/migrations-gitlab-1-300x125.png 300w, https://geko.cloud/wp-content/uploads/2021/12/migrations-gitlab-1-1024x426.png 1024w, https://geko.cloud/wp-content/uploads/2021/12/migrations-gitlab-1-768x320.png 768w, https://geko.cloud/wp-content/uploads/2021/12/migrations-gitlab-1.png 1293w" sizes="(max-width: 1315px) 100vw, 1315px" /></p>
<p><span style="font-weight: 2000;">Además, también comprobaremos en  </span><i>administration&gt;monitoring&gt;healthCheck </i>que Gitlab se encuentra en estado “Healthy”.</p>
<p><span style="font-weight: 2000;">Al finalizar este paso, se recomienda hacer un snapshot</span></p>
<h2>Seguiremos con la siguiente secuencia de updates</h2>
<p><span style="font-weight: 2000;">Al final de cada una, repetiremos el ejercicio de comprobar por cada finalización, <em>Background Migrations</em></span></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;}">sudo apt install gitlab-ee=14.1.6-ee.0
sudo apt install gitlab-ee=14.2.0-ee.0
sudo apt install gitlab-ee=14.2.6-ee.0
sudo apt install gitlab-ee=14.3.0-ee.0
sudo apt install gitlab-ee=14.3.4-ee.0
sudo apt install gitlab-ee=14.4.0-ee.0
sudo apt install gitlab-ee=14.4.2-ee.0
</pre>
</div>
<p><span style="font-weight: 2000;"><u>Otro tip importante</u> a saber es que en algunas versiones, previas a la 14, veremos que el comando <strong>apt</strong> ha terminado, pero al intentar acceder a Gitlab obtenemos un error <strong>502. </strong>Esto sucede porque existen los ya mencionados Background Migrations, pero para estas versiones no existía la herramienta que nos permitía observar su estado. Pero no desesperemos porque podemos ver el log! y observar cuando hayan acabado.</span></p>
<p><span style="font-weight: 2000;">Podemos ver las últimas entradas del log así y comprobar que no se encuentren transacciones en ejecución:</span></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;}">sudo tail -f /varlog/gitlab/gitlab-rails/production.log</pre>
</div>
<p><span style="font-weight: 2000;">Y ya está, lo hemos logrado! Enhorabuena</span></p>
<p><span style="font-weight: 2000;">Espero que este artículo te haya servido de ayuda para aprender algo nuevo y seguir ampliando tus conocimientos.</span></p>
<p><span style="font-weight: 2000;">Te invito a que si necesitas información sobre el mundo <a href="https://geko.cloud/es/devops/"><strong>DevOps </strong></a>, <a href="https://geko.cloud/es/contacto/">nos contactes</a> y sigas revisando <a href="https://geko.cloud/es/blog/">nuestro blog </a>para encontrar otras publicaciones útiles.</span></p>
<p>¡Hasta la próxima!<img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f44b.png" alt="👋" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&nbsp;</p>
<p>→ Post escrito por Christian Tagliapietra y Álvaro Abad.</p>
<p>La entrada <a href="https://geko.cloud/es/como-actualizar-gitlab/">Cómo actualizar Gitlab</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/como-actualizar-gitlab/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Primeros pasos con ArgoCD</title>
		<link>https://geko.cloud/es/primeros-pasos-con-argocd/</link>
					<comments>https://geko.cloud/es/primeros-pasos-con-argocd/#respond</comments>
		
		<dc:creator><![CDATA[Xènia Adan]]></dc:creator>
		<pubDate>Tue, 23 Nov 2021 18:03:18 +0000</pubDate>
				<category><![CDATA[Destacado LABS]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[ArgoCD]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=4988</guid>

					<description><![CDATA[<p>Introducción En este artículo hablaremos de una de las herramientas del momento cuando se habla de procesos de integración y despliegue continuo CICD en Kubernetes, ArgoCD. Y es que, en los últimos meses, son muchas las empresas punteras del sector de internet que han declarado públicamente el uso de ArgoCD para desplegar aplicaciones en sus [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/primeros-pasos-con-argocd/">Primeros pasos con ArgoCD</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introducción</h2>
<p>En este artículo hablaremos de una de las herramientas del momento cuando se habla de procesos de integración y despliegue continuo <a href="https://www.redhat.com/es/topics/devops/what-is-ci-cd">CICD</a> en Kubernetes, <a href="https://argo-cd.readthedocs.io">ArgoCD</a>. Y es que, en los últimos meses, son muchas las empresas punteras del sector de internet que han declarado públicamente el uso de ArgoCD para desplegar aplicaciones en sus clústers. <a href="https://github.com/argoproj/argo-cd/blob/master/USERS.md">Puedes ver una lista aquí.</a></p>
<p>Para empezar, vamos a repasar para qué sirve y hasta dónde llegan las funcionalidades de ArgoCD. Seguidamente, veremos un caso de uso típico de despliegue de aplicaciones usando ArgoCD y las ventajas que nos aporta su implementación. Finalmente, comentaremos las conclusiones que hemos sacado en cuanto a pros y contras, y analizaremos que otras herramientas complementan ArgoCD para optimizar aún más el proceso de integración y despliegue continuo de aplicaciones.</p>
<h2>¿Que es ArgoCD?</h2>
<p>ArgoCD es una herramienta que nos permite adoptar metodologías <a href="https://www.redhat.com/es/topics/devops/what-is-gitops">GitOps</a> para el despliegue continuo de aplicaciones en clústers de kubernetes.</p>
<p>La principal característica es que ArgoCD sincroniza el estado de las aplicaciones desplegadas con sus respectivos manifiestos declarados en git. Permitiendo así a los desarrolladores realizar cambios en la aplicación con solo modificar el contenido de git, ya sea con commits a ramas de desarrollo o modificando main.<br />
Una vez modificado el código en git, ArgoCD detecta, mediante webhook o comprobación periódica cada 3 minutos, que ha habido cambios en los manifiestos de las aplicaciones. Seguidamente, compara los manifiestos declarados en git con los que hay aplicados en los clústers y actualiza estos últimos hasta sincronizarlos.</p>
<p>Su refinada interfaz de usuario permite visualizar muy bien el contenido, estructura y estado de los clústers ademas que deja manipular los recursos.</p>
<p>¿Permite ArgoCD automatizar todo el proceso de CI/CD de una aplicación?</p>
<p>No, ArgoCD se encarga de desplegar la aplicación una vez ya existe el artefacto en un registro de contenedores, como Dockerhub o ECR.  Esto implica que previamente el código de la aplicación ya ha sido testado y «containerizado» en una imagen. Al final de este artículo vamos a hablar sobre qué opciones existen actualmente para llevar a cabo esta tarea.</p>
<p>Como ya hemos explicado, ArgoCD sincroniza el estado de las aplicaciones desplegadas con sus respectivos manifiestos declarados en git. Pero no se refiere al repositorio git del código de la aplicación en sí, sino a otro repositorio separado, como indican las buenas prácticas, que contiene el código de la infraestructura en kubernetes de la aplicación, que puede ser en forma de <a href="https://argo-cd.readthedocs.io/en/stable/#how-it-works">helm charts, aplicación kustomize, ksonnet&#8230; </a></p>
<p>Para explicar mejor los principales beneficios que ofrece ArgoCD veamos un ejemplo de uso.</p>
<h2>Usando ArgoCD</h2>
<p>En este ejemplo vamos a ver cómo ArgoCD puede desplegar ya sea aplicaciones desarrolladas por terceros, que tiene su propio helm chart mantenido por otra organización, o una propia donde hemos definido el chart nosotros mismos.</p>
<p>Para el ejemplo desplegaremos un stack de monitoring compuesto de Prometheus, Grafana y Thanos mediante sus helm charts.</p>
<p>ArgoCD despliega las aplicaciones mediante un objeto custom llamado <a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#applications">Application</a>. Este objeto tiene como atributos un origen y una destinación. El origen puede tener varios formatos, como por ejemplo un helm chart de un repositorio de charts, o un repositorio git que contiene helm charts. La destinación es el cluster al cual será desplegado el contenido del origen. En la configuración del application podemos indicar que ArgoCD mantenga automáticamente sincronizado el estado de los objetos de kubernetes desplegados con la configuración indicada en el origen (charts/git). Esta opción es muy interesante, ya que nos asegura que ArgoCD va a estar pendiente cada pocos minutos de que todo siga en su sitio, por contra, desplegando las aplicaciones directamente con comandos de helm únicamente nos aseguramos la sincronización en el momento de un despliegue.</p>
<p>Ahora que ya hemos explicado que es el objeto Application, para nuestro monitoring-stack, vamos a crear cuatro. ¿Por qué cuatro Applications si solo habrá 3 servicios en el stack? (Prometheus, Grafana y Thanos)</p>
<p>ArgoCD también nos ofrece la posibilidad de generar grupos de aplicaciones que siguen el concepto de <a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/#app-of-apps-pattern">«app of apps pattern»</a> . Se trata de una ArgoCD application que despliega otras aplicaciones y así recursivamente. En el caso de nuestro monitoring stack, vamos a crear una cuarta aplicación que va a desplegar las otras 3 restantes, la aplicación padre la vamos a llamar «monitoring-stack».</p>
<p>Para crear una aplicación podemos definir un manifiesto ArgoCD Application, como se indica en <a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#applications">esta página de la documentación</a>. También podemos mediante <a href="https://argo-cd.readthedocs.io/en/stable/getting_started/#creating-apps-via-cli">línea de comandos.</a> Pero ArgoCD tiene una genial UI que permite crear aplicaciones manualmente también, <a href="https://argo-cd.readthedocs.io/en/stable/getting_started/#creating-apps-via-ui">puede ver cómo aquí.</a></p>
<p>La aplicación «monitoring-stack» apuntará su origen a un repositorio git con un Helm chart. Este chart contendrá los manifiestos de las otras tres aplicaciones en el directorio «templates» en formato yaml. Estos archivos son definiciones de objetos <a href="https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#applications">Application</a> que apuntan al pertinente Helm chart oficial de cada servicio. Mediante los «values files», podremos desplegar diferentes versiones en entornos distintos.</p>
<figure id="attachment_5055" aria-describedby="caption-attachment-5055" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-5055 size-medium" src="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-13.39.28-300x248.png" alt="" width="300" height="248" srcset="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-13.39.28-300x248.png 300w, https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-13.39.28.png 350w" sizes="(max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-5055" class="wp-caption-text">Repositorio git que contiene un Helm chart de monitoring-stack. Este consta de 3 aplicaciones definidas en el directorio monitoring-stack/templates/</figcaption></figure>
<p>&nbsp;</p>
<p>Una vez definidas las templates del chart «monitoring-stack», vamos a crear la ArgoCD Application, y en source vamos a apuntar hacia el repositorio que lo contiene. ArgoCD va a detectar que se trata de un helm chart y podremos indicar el path del values file concreto, por ejemplo «prod-values.yaml».</p>
<p>Al finalizar la configuración manual de la aplicación, en la interfaz de usuario veremos como se representan todos los objetos generados, organizados de forma jerárquica.</p>
<figure id="attachment_5057" aria-describedby="caption-attachment-5057" style="width: 742px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-5057 size-full" src="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-12.35.05.png" alt="" width="742" height="343" srcset="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-12.35.05.png 742w, https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-12.35.05-300x139.png 300w" sizes="(max-width: 742px) 100vw, 742px" /><figcaption id="caption-attachment-5057" class="wp-caption-text">La aplicación monitoring-stack crea las tres aplicaciones definidas en el directorio templates del chart.</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_5065" aria-describedby="caption-attachment-5065" style="width: 800px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-5065 size-large" src="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.40.16-1024x476.png" alt="" width="800" height="372" srcset="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.40.16-1024x476.png 1024w, https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.40.16-300x139.png 300w, https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.40.16-768x357.png 768w, https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.40.16-1536x714.png 1536w, https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.40.16.png 1585w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption id="caption-attachment-5065" class="wp-caption-text">La aplicación grafana ha desplegado el helm chart, mediante la UI podemos ver todos los recursos en funcionamiento. También nos permite interactuar con estos, por ejemplo podemos borrar un pod y ver cómo el deployment despliega otro automáticamente.</figcaption></figure>
<p>Al estar las aplicaciones sincronizadas con nuestro repositorio, y los charts parametrizados con templates y values. Para desplegar una nueva versión de cualquiera de nuestras aplicaciones solo tendremos que modificar el archivo values mediante commits de git.<br />
ArgoCD se encargará de detectar los cambios en el repositorio y aplicarlos en el clúster de kubernetes mediante un despliegue rolling update.</p>
<figure id="attachment_5067" aria-describedby="caption-attachment-5067" style="width: 292px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-5067 size-full" src="https://geko.cloud/wp-content/uploads/2021/10/Screenshot-2021-10-29-at-14.54.37.png" alt="" width="292" height="170" /><figcaption id="caption-attachment-5067" class="wp-caption-text">versiones del chart definidas en el archivo prod_values.yaml</figcaption></figure>
<p>&nbsp;</p>
<p>Como apunte, usando <a href="https://github.com/argoproj-labs/argocd-image-updater">ArgoCD Image Updater</a> nos podemos ahorrar hacer este último paso manualmente, o incluso tener que desarrollar una pipeline compleja para actualizar el fichero values.yaml en git cuando queremos desplegar la nueva imagen.<br />
Esta herramienta consulta periódicamente los últimos tags en nuestro repositorio de imágenes buscando nuevos artefactos para desplegar. De esta forma, una vez ha encontrado uno nuevo, se encarga de automatizar el proceso de despliegue editando la configuración de git con el nombre del nuevo tag.<br />
Hace falta mencionar que aún no hay una versión estable de <a href="https://github.com/argoproj-labs/argocd-image-updater">ArgoCD Image Updater,</a> pero se la espera pronto.</p>
<p>En este ejemplo hemos creado una aplicación que apunta a un repositorio que crea aplicaciones las cuales apuntan a helm charts oficiales, sin embargo este bucle jerárquico se puede extender mucho mas, siguiendo el «app of apps pattern».</p>
<p>Otra característica interesante de ArgoCD es que nos permite desplegar aplicaciones en distintos clústers. Hay varias maneras de hacerlo, no obstante la más directa es mediante el recurso <a href="https://argo-cd.readthedocs.io/en/stable/user-guide/application-set/">Application Set.</a><br />
En su manifiesto podemos especificar una lista de clusters donde desplegar simultáneamente con distintos paths del repositorio. Ya que en nuestro repositorio podemos especificar diferentes versiones para cada clúster.</p>
<p>La relativa facilidad de instalación que tiene ArgoCD supone otro punto positivo a tener en cuenta, aquí puedes consultar <a href="https://argo-cd.readthedocs.io/en/stable/cli_installation/">los pasos</a>.</p>
<h2>Automatización de todo el proceso CICD con Argo</h2>
<p>En el caso de querer ir un paso más allá y automatizar todo el proceso de CICD en kubernetes, podemos complementar ArgoCD con el resto de herramientas que presenta el proyecto <a href="https://argoproj.github.io/">Argo.</a><br />
Combinando Argo Events, Argo Workflows, ArgoCD y Argo Rollouts es posible una mayor automatización siguiendo las mejores prácticas en los estándares actuales de integración continua.<br />
Victor Farcic lo explica de manera muy coherente en este <a href="https://www.youtube.com/watch?v=XNXJtxkUKeY&amp;t=277s&amp;ab_channel=DevOpsToolkit">video</a>.</p>
<p>Como solución a la complejidad añadida que supone instalar y manejar todas estas herramientas de Argo project, ya han salido al mercado algunas aplicaciones que engloban todo este stack y nos permiten configurar los pipelines para la integración y despliegue des de una capa de mas alto nivel mas simplificada. A continuación mencionamos un par de ellas, aun que en este post no vamos a analizar las funcionalidades particulares.</p>
<p><a href="https://devtron.ai/">Devtron</a> es una herramienta open source que instala por debajo todo este paquete de Argo y otras herramientas y promete permitirnos automatizar todo el proceso CICD por completo des de la interfaz gráfica. Devtron simplifica bastante la configuración, ya que interactuamos con las herramientas internas des de una capa de alto nivel. Aunque después de probarlo, no creemos que la herramienta tenga la suficiente madurez como para ser implementada en un entorno productivo, de momento.</p>
<p>Similar al approach de Devtron, <a href="https://codefresh.io/codefresh-argo-platform/">Codefresh</a> engloba todas las aplicaciones del stack de Argo para automatizar toda la integración y despliegue. Pero aparte de que la herramienta aún se encuentra en early-access, una gran diferencia es que el acceso a la herramienta será en formato SaaS. Como podemos ver en el apartado de <a href="https://codefresh.io/pricing/">pricing</a>, la opción de automatización completa será de pago y el precio no se menciona en la web.</p>
<h2>Conclusiones</h2>
<p>ArgoCD es una herramienta muy útil para automatizar el proceso de deploy mediante buenas prácticas GitOps. Gracias a su implementación, los developers pueden probar las nuevas versiones de las aplicaciones más rápidamente y desplegar en producción de forma segura una vez finalizados las pruebas. Además, gracias a la función de auto-sync y su bonita interfaz, ArgoCD nos permite tener controlado en todo momento el estado de las aplicaciones y sus recursos desplegados en Kubernetes. Combinado con las demás herramientas del proyecto Argo podemos automatizar todo el proceso de CICD (y otras muchas utilidades fuera del scope de este post)  siguiendo buenas prácticas para los estándares actuales.</p>
<p>Como punto negativo, usar ArgoCD introducirá una capa extra de complejidad a nuestra configuración, ya que dispone de muchas opciones distintas, introduce «custom objects» y conceptos a los cuales no estamos familiarizados aún. Puede ser «overkill» si tenemos un clúster muy pequeño con solo un puñado de aplicaciones.</p>
<p>&nbsp;</p>
<p>La entrada <a href="https://geko.cloud/es/primeros-pasos-con-argocd/">Primeros pasos con ArgoCD</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/primeros-pasos-con-argocd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Disaster Recovery: espera lo inesperado</title>
		<link>https://geko.cloud/es/disaster-recovery-espera-lo-inesperado/</link>
					<comments>https://geko.cloud/es/disaster-recovery-espera-lo-inesperado/#respond</comments>
		
		<dc:creator><![CDATA[Geko Cloud]]></dc:creator>
		<pubDate>Wed, 17 Nov 2021 10:50:20 +0000</pubDate>
				<category><![CDATA[Destacado LABS]]></category>
		<category><![CDATA[DevSecOps]]></category>
		<category><![CDATA[Labs]]></category>
		<guid isPermaLink="false">https://geko.cloud/?p=6216</guid>

					<description><![CDATA[<p>Ben Franklin una vez dijo que nada es inevitable excepto la muerte y los impuestos. Hoy yo añadiría los incidentes de operaciones a esa lista. En Geko hemos tenido la (mala) fortuna de pasar por nuestra buena cantidad de respuestas de incidentes de operaciones, sistemas y seguridad. Es algo que pasa de forma inevitable por [&#8230;]</p>
<p>La entrada <a href="https://geko.cloud/es/disaster-recovery-espera-lo-inesperado/">Disaster Recovery: espera lo inesperado</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><span style="font-weight: 400;">Ben Franklin una vez dijo que nada es inevitable excepto la muerte y los impuestos. Hoy yo añadiría los incidentes de operaciones a esa lista.</span></p>
<p><img loading="lazy" decoding="async" class=" wp-image-6229 aligncenter" src="https://geko.cloud/wp-content/uploads/2021/11/disaster-recovery.png" alt="disaster recovery" width="728" height="343" srcset="https://geko.cloud/wp-content/uploads/2021/11/disaster-recovery.png 850w, https://geko.cloud/wp-content/uploads/2021/11/disaster-recovery-300x141.png 300w, https://geko.cloud/wp-content/uploads/2021/11/disaster-recovery-768x361.png 768w" sizes="(max-width: 728px) 100vw, 728px" /></p>
<p><span style="font-weight: 400;">En Geko hemos tenido la (mala) fortuna de pasar por nuestra buena cantidad de respuestas de incidentes de operaciones, sistemas y seguridad. Es algo que pasa de forma inevitable por unas razones que son omnipresentes (en las que entraremos más adelante), y como respuesta proactiva a esto hemos adoptado unas prácticas y hábitos que nos permiten </span><b>detectar</b><span style="font-weight: 400;">, </span><b>localizar</b><span style="font-weight: 400;"> y </span><b>resolver</b><span style="font-weight: 400;"> incidentes de todo tipo de manera eficiente. Se vuelve una práctica mucho más manejable una vez asumes que van a ocurrir y te </span><b>preparas</b><span style="font-weight: 400;"> para ello. Nunca se puede ser demasiado cuidadoso cuando estás hablando de la infraestructura crítica que tu equipo y tú usáis para trabajar, o el producto al que acceden tus clientes. Es un escenario de “No podemos permitirnos un desastre” y debes estar preparado para ello.</span></p>
<p style="text-align: justify;"><span style="font-weight: 400;">Hay unas contramedidas y comprobaciones que necesitas introducir en tu infraestructura y ecosistema que hace este escenario mucho más fácil de gestionar:</span></p>
<ul style="text-align: justify;">
<li style="font-weight: 400;"><span style="font-weight: 400;">Una plataforma de </span><a href="https://geko.cloud/es/servicios-cloud/monitorizacion/"><b>monitorización</b></a><span style="font-weight: 400;"> robusta</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Un plan bien diseñado de </span><b>alertas</b></li>
<li style="font-weight: 400;"><b>failover</b><span style="font-weight: 400;"> de servicios</span></li>
<li style="font-weight: 400;"><b>snapshots</b><span style="font-weight: 400;"> y </span><b>backups</b><span style="font-weight: 400;"> de los datos importantes</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">un plan de </span><b>disaster recovery</b></li>
</ul>
<p style="text-align: justify;"><span style="font-weight: 400;">Vayamos de uno en uno para definir qué son y por qué son imprescindibles.</span></p>
<h2 style="text-align: justify;"><b>¿Cómo sé cuándo falla algo?</b></h2>
<p style="text-align: justify;"><span style="font-weight: 400;">El primer paso hacia saber que tu infraestructura está fallando, es saber cómo se ve cuando </span><b>no</b><span style="font-weight: 400;"> está fallando. Necesitas construir un sistema que compruebe constantemente el estado de todas las partes críticas de tu infraestructura, así sabrás cual es su estado normal, y podrás ver cuando se desvía de este estado de funcionamiento correcto. El status drift, si no se vigila, será tu primer paso hacia un estado de fallo: todo funciona bien, luego va fallando poco a poco. Al final llega un día donde tu estado se habrá desviado tanto de su funcionamiento original que tendrás que reconstruirlo todo desde cero. No quieres acabar aquí. Así que para evitarlo, se debe monitorizar anomalías de estado. Si algo se mueve, necesita monitorización. Si algo no se mueve, necesita monitorización por si se mueve.</span></p>
<h2 style="text-align: justify;"><b>¿Siento a alguien a mirar métricas?</b></h2>
<p style="text-align: justify;"><b>No sirve de mucho</b><span style="font-weight: 400;"> un stack de monitorización si éste </span><b>no te grita cuando algo va mal</b><span style="font-weight: 400;">. Por lo tanto, a medida que se configura la infraestructura de monitorización, se añaden al mismo tiempo las </span><b>alertas</b><span style="font-weight: 400;">. La forma de hacerlo depende de la urgencia de la tarea. ¿Es un servidor que tiene el 70% de su disco lleno? quizás vale con que</span><b> envíe un mensaje de <a href="https://slack.com/intl/es-es/" target="_blank" rel="noopener">Slack </a></b><span style="font-weight: 400;">sobre ello a su equipo de TI. ¿Producción no responde a los pings? Probablemente quieras que </span><b>llame a alguien inmediatamente</b><span style="font-weight: 400;"> para que empiece a hacer debugging cuanto antes. Depende de la urgencia del sistema y de lo grande que sea el indicador del problema. </span><b>Tu entorno, tus prioridades</b><span style="font-weight: 400;">.</span></p>
<h2 style="text-align: justify;"><b>¿Pero eso no mantiene el servicio como tal, no?</b></h2>
<p style="text-align: justify;"><span style="font-weight: 400;">¿Necesitas una forma de mantener el servicio incluso en caso de fallo? Mantén un sistema de conmutación por error. Tal vez puedas omitir la llamada sobre el servidor que falla, o puedes mover ese ticket de «cambiar el disco duro fallido» hacia abajo en la lista de prioridades porque de momento tienes otra en el RAID. </span><b>Dos es uno, uno es ninguno</b><span style="font-weight: 400;">. Implementa una conmutación por error en básicamente cualquier cosa importante, incluso si es un sistema de conmutación por error manual. </span><b>Ten algo preparado</b><span style="font-weight: 400;"> para cambiar rápidamente y mantener el servicio.</span></p>
<h2 style="text-align: justify;"><b>¿Qué hago cuando me llega una alarma de fallo?</b></h2>
<p style="text-align: justify;"><span style="font-weight: 400;">Pongámonos en un escenario de desastre por un momento. Supongamos que has ignorado la alerta S.M.A.R.T. un día más de lo que debías. </span><b>Tu máquina principal ha caído</b><span style="font-weight: 400;">, no puedes simplemente pulsar el botón de encender para que vuelva a funcionar y olvidarte de ella, y de alguna manera </span><b>también tenías tu failover en esa misma máquina</b><span style="font-weight: 400;">, por ejemplo un escenario en el que tu máquina proxmox pasa a conocer al creador. Enhorabuena, </span><b>estás ante un incidente</b><span style="font-weight: 400;">. Así que, para este caso, que sabías que podía ocurrir, has preparado copias de seguridad (</span><b><i>espero</i></b><span style="font-weight: 400;">) y puedes intercambiar esa unidad y restaurarla. Puede que pierdas un día de trabajo, pero no es nada comparado con perderlo todo y pasar cientos de horas reconstruyendo tu empresa desde cero. Es especialmente importante recordar la regla básica de las copias de seguridad, conocida generalmente como la regla 3-2-1:</span></p>
<ul style="text-align: justify;">
<li style="font-weight: 400;"><b>3 copias</b><span style="font-weight: 400;"> de tus datos</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">En al menos </span><b>2 dispositivos diferentes</b></li>
<li style="font-weight: 400;"><b>1 de ellos</b><span style="font-weight: 400;"> en una </span><b>localización remota</b></li>
</ul>
<p style="text-align: justify;"><span style="font-weight: 400;">De este modo, incluso en caso de un </span><b>incidente especialmente grave</b><span style="font-weight: 400;">, como un incendio, puedes simplemente </span><b>restaurar a partir de la copia de seguridad externa </b><span style="font-weight: 400;">(aunque eso puede llevar bastante más tiempo dependiendo de tu solución). Además, comprueba que tus copias de seguridad funcionan. </span><b>Por favor</b><span style="font-weight: 400;">. Una copia de seguridad no es una copia de seguridad hasta que la pruebas.</span></p>
<p style="text-align: justify;"><span style="font-weight: 400;">Como extra, no te marques un </span><b>Michael Scott</b><span style="font-weight: 400;"> con tu equipo.</span></p>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="size-full wp-image-6232 aligncenter" src="https://geko.cloud/wp-content/uploads/2021/11/calm-disaster-recovery.png" alt="meme disaster recovery" width="600" height="236" srcset="https://geko.cloud/wp-content/uploads/2021/11/calm-disaster-recovery.png 600w, https://geko.cloud/wp-content/uploads/2021/11/calm-disaster-recovery-300x118.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></p>
<h2 style="text-align: justify;"><b>¿No podemos prepararnos para todo, cierto?</b></h2>
<p style="text-align: justify;"><span style="font-weight: 400;">Pueden ocurrir muchas cosas y, por desgracia, </span><b>no se pueden predecir todas</b><span style="font-weight: 400;">. Puede pasar cualquier cosa y </span><b>cuanto más compleja sea la configuración de tu infraestructura</b><span style="font-weight: 400;">, </span><b>más puntos de fallo habrá </b><span style="font-weight: 400;">en ella, así que </span><b>tienes que prepararte todo lo posible</b><span style="font-weight: 400;">. Tal vez no puedas tener todos los incidentes posibles previstos, pero </span><b>cuantos más planifiques, mejor</b><span style="font-weight: 400;">, de modo que si ocurre algo, tu personal de guardia pueda simplemente repasar un </span><b>runbook</b><span style="font-weight: 400;"> en tu documentación y solucionar el problema sin mucho escalado. Este plan suele incluir </span><b>ejemplos de escenarios</b><span style="font-weight: 400;"> que consideras posibles en función de la configuración de tu infraestructura, los elementos que se ven afectados y la forma de solucionar el problema.</span></p>
<h2 style="text-align: justify;"><b>Suena a que necesito uno de esos planes.</b></h2>
<p style="text-align: justify;"><span style="font-weight: 400;">Si un elemento importante de su infraestructura falla, ¿recibirías una llamada, un correo electrónico o una notificación de Slack? ¿Está </span><b>seguro</b><span style="font-weight: 400;"> de que sus copias de seguridad funcionan? ¿Cómo de resistente es tu plataforma a un fallo de disco? Si estos escenarios suenan como un problema en tu caso, tal vez te resulte útil ponerte en <a href="https://geko.cloud/es/contacto/">contacto</a> con nosotros y hablaremos de cómo ponerlo todo en orden. Sólo tiene que tomar una decisión: ¿lo haces ahora o espera a que se produzca su próximo incidente? Recuerda las palabras de Picard sobre la gestión de incidentes:</span></p>
<p><img loading="lazy" decoding="async" class="size-large wp-image-6234 aligncenter" src="https://geko.cloud/wp-content/uploads/2021/11/frase-disaster-recovery-1024x253.png" alt="frase disaster recovery" width="800" height="198" srcset="https://geko.cloud/wp-content/uploads/2021/11/frase-disaster-recovery-1024x253.png 1024w, https://geko.cloud/wp-content/uploads/2021/11/frase-disaster-recovery-300x74.png 300w, https://geko.cloud/wp-content/uploads/2021/11/frase-disaster-recovery-768x190.png 768w, https://geko.cloud/wp-content/uploads/2021/11/frase-disaster-recovery.png 1486w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>La entrada <a href="https://geko.cloud/es/disaster-recovery-espera-lo-inesperado/">Disaster Recovery: espera lo inesperado</a> se publicó primero en <a href="https://geko.cloud/es/">Geko Cloud</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://geko.cloud/es/disaster-recovery-espera-lo-inesperado/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>
	</channel>
</rss>
