Debugando mensajes de error en terraform con CloudTrail

Hoy me he encontrado con un mensaje de error al aplicar terraform para crear un ASG y su Launch Template en AWS que no me ha parecido intuitivo.

Bueno, en realidad era un «Access Denied». ¿Fácil, no? Pues no, o por lo menos no para mí. El usuario que aplicaba terraform ya tenía los permisos que a priori parecía que necesitaba para poder crear ese recurso y sus asociados.

Entonces… ¿cómo saber de qué permisos se me está quejando? Aquí es donde entra CloudTrail. Lo que he hecho es básicamente buscar los eventos para el usuario con el que estaba ejecutando el comando, pues no he encontrado la forma de usar la request-id que nos devuelve el error. Recuerda que pueden tardar varios minutos hasta que aparezcan los eventos en CloudTrail, así que paciencia.

Continuar leyendo «Debugando mensajes de error en terraform con CloudTrail»

introducción a JQ con ejemplos

Hoy rescato un borrador que ha estado desde siempre en el blog. Básicamente quería empezar un post de introducción a jq que tuviera ejemplos prácticos, pues todo lo que he visto por ahí no me ha parecido muy práctico si estás empezando.

Lo primero, decir que jq pone a nuestra disposición una herramienta online para trastear con jq en jqplay.org, que nos puede venir bien.

Empezamos con el siguiente ejemplo:

Continuar leyendo «introducción a JQ con ejemplos»

Kubernetes – Apuntes del CKA

Bueno, aquí dejo algunos apuntes (ojo, ésto no es una guía ni una biblia; son sólo eso, apuntes) tras repasarme los cursos «Kubernetes Quick Start» y «Cloud Native Certified Kubernetes Administrator (CKA)» de LinuxAcademy.com

Cómo instalar Docker + Kubernetes from scratch en CentOS

Usando Flannel para la gestión de la red.

Dejo un copy&paste de las instrucciones originales de LinuxAcademy.

Nota:
Al final k8s es una capa encima de docker que usa la API de docker para manipularlo. Puedes correr un docker ps en las instancias para ver exactamente qué está pasando por debajo de k8s (en docker)

Continuar leyendo «Kubernetes – Apuntes del CKA»

Yaml essentials

YAML

Inicialmente llamado «Yet Another Markup Language» (YAML), que sin embargo no es un Markup Language, si no que ha acabado siendo un lenguage de serialización de datos fácilmente legible por humanos, razón por la que cambió su nombre a «YAML Ain’t Markup Language».

Pensado para ser fácilmente legible por humanos, por lo que sus casos de uso son:
– Ficheros de configuración
– Almacenage de datos

Sintáxis
– Usa (2) espacios para indentar (nunca tabs!)
– La indentación agrupa cosas que van juntas
– Guiones para listas
– Dos puntos para key: values (atención al espacio tras los dos puntos)
– Usa comentarios con # seguido de un espacio en blanco (o tab)

Estilos:
– Block: el habitual
– Flow: es una extensión de JSON

Tipos
– Mappings: key:values
– Secuencias: array o lista de items, uno por línea precedido de un guión
– Escalares: strings, números o booleanos

Podemos partir un string en múltiples líneas (preservando el salto de línea) mediante «|» o sin preservarlo (pese a tener salto de línea dentro del yaml para facilitar la lectura) con «>»

Estructuras:
– Opcionalmente, un yaml file puede empezar con tres guiones. Ésto es obligatorio cuando usas herramientas como «Ansible».
– Los tres guiones también se pueden usar para separar diferentes documentos dentro de un mismo fichero.

Los anchors sirven para reutilizar datos dentro del fichero yaml. Seteamos la línea o el bloque con &anchorname y hacemos referencia a él con *anchorname.

Más info
https://yaml.org/start.html
Linux Academy: Yaml essentials

Site Reliability Engineering (SRE): principios

He querido resumir en un post, los principios que se explican en el libro «Site Reliability Engineer» de Google (gratis y online).

CAPITULO 1 & 2 – INTRO

Además de programar, a un SRE se le pide conocimientos avanzados de cómo funciona el sistema UNIX a nivel interno, y de networking (capas de la 1 a la 3)

La clave está en dedicar al menos un 50% del tiempo en automatizar las tareas de operaciones o a hacer tareas de ingeniería (mejorar la fiabilidad, el performance, etc.). De esta manera, evitas tener un equipo que crezca a la vez que crece la infraestructura (y por tanto, las tareas de operaciones si no estuvieran automatizadas).

También es clave dedicarle tiempo a los postmortem para aquellos incidentes relevantes. En caso contrario, no se estará aprovechando la oportunidad de mejorar nuestros sistemas.

El concepto de «error budget» es (1 – disponibilidad_acordada). Si se establece 99.99% de disponibilidad acordada, el error budget será de 0.01%. Este error budget se podrá usar para lo que se quiera, pero típicamente se usará para tomar riesgos deployando nuevas funcionalidades lo antes posible.

Aprox un 70% de las caídas son debidas a cambios en producción. Los SREs deben aplicar best practices para automatizar completamente los cambios (progresivos) en producción así como el rollback.

Las alertas del sistema de monitorización deberían interpretarse y solucionarse de forma automática, y a partir de ahí, únicamente deberían notificar a un humano cuando éstos necesiten tomar parte.

Continuar leyendo «Site Reliability Engineering (SRE): principios»

Site Reliability Engineer

Bueno, ha llegado el día en el que publico un resumen (muy básico y que seguramente iré actualizando) de lo que entiendo es un SRE y sus funciones básicas. Allá vamos.

¿Qué es un SRE?

Hay muchas definiciones de lo que es un SRE, pero me quedo con ésta de Microsoft:

Site Reliability Engineering is an engineering discipline devoted to helping an organization achieve the appropriate level of reliability in their systems, services, and products.

Y que complemento con esta frase sacada del libro de SRE de Google:

In general, an SRE team is responsible for the availability, latency, performance, efficiency, change management, monitoring, emergency response, and capacity planning of their service(s).

Hago especial hincapié en lo de conseguir los niveles de fiabilidad apropiados. El 100% de uptime no es el objetivo de un SRE. En realidad, una caída del servicio no se ve ya como algo «malo» si no que es una oportunidad para que los desarrolladores y los SREs mejoren los sistemas.

Continuar leyendo «Site Reliability Engineer»

Cómo lidiar con unassigned shards en Elasticsearch


Lo primero es lo primero, saber qué significa el estado del cluster de elasticsearch:

  • Green: Cluster 100% operacional con todos los shards, tanto primarios como réplicas asignados.
  • Yellow: Todos los shards primarios asignados, pero al menos hay problemas con una réplica. El funcionamiento de las búsquedas no se ve afectado, pero la alta disponibilidad del cluster podría estar comprometida.
  • Red: Al menos un shard primario tiene problemas. Tus búsquedas devolverán resultados incompletos y el indexado podría devolver alguna excepción.

Fuentes: [elastic.co] [chrissimpson.co.uk]

Red cluster. ¿Y ahora qué?

En el siguiente ejemplo, vemos un cluster en estado RED, con 2 shards no asignados.

Muchas de las ocasiones en los que me he encontrado con un cluster con unassigned shards ha sido por falta de espacio en disco, ya sea porque el cluster en sí se estaba quedando sin espacio, o porque había caído alguno de los data nodes. Así pues, tras verificar que no haya problemas de espacio, seguramente deberíamos revisar que el cluster tenga el número y tipo de nodos esperados.

Continuar leyendo «Cómo lidiar con unassigned shards en Elasticsearch»

Firma tus commits de git con GPG


El objetivo de esta entrada no es más que resumir los pasos que haríamos para empezar a usar git en nuestro PC. Linux, por supuesto. Básicamente en esta entrada veremos cómo setear los parámetros mínimos de configuración global, y cómo dejarlo listo para poder firmar nuestros commits (en GitHub), para que el resto de compañeros puedan confiar en que nuestros commits han estado hechos, en efecto, por nosotros.

Setear nuestro usuario en la conf global de git

Lo primero para empezar a usar git en nuestro sistema es setear nuestro usuario y email. Lo haremos en la configuración global de git y básicamente seguiremos los pasos aquí descritos.

Vale, ¿pero qué es la configuración global? En git, básicamente, contamos con tres niveles de configuración:

  • /etc/gitconfig: Contiene los valores que se aplican a todos los usuarios del sistema y a sus repositorios. Este es el fichero que se modifica/consulta al pasarle la opción «–system» al hacer «git config». Requiere permisos de superusuario.
  • ~/.gitconfig or ~/.config/git/config: Define los valores configurados para tí, el usuario. Aquí usaríamos la opción «–global» en el «git config».
  • .git/config: finalmente, tenemos el fichero config dentro del propio repo de git. Define los valores específicos para ese repositorio.

Continuar leyendo «Firma tus commits de git con GPG»

EBS/RDS Snapshots

¿Cómo funcionan los EBS snapshots?

Los snapshots de EBS son incrementales (excepto el primero que hagas sobre un volumen EBS); únicamente incluyen los bloques modificados desde el último snapshot. Cada snapshot contiene la información necesaria para hacer un restore completo de tus datos hasta el momento de hacer el snapshot, es decir, contiene referencias a los snapshot anteriores, lo que permite realizar un full restore (hasta el momento de hacer el snapshot) a partir de ese determinado snapshot.

[Fuente]

¿Se puede eliminar un snapshot EBS de forma segura?

Cuando eliminas un snapshot, solamente se eliminan los datos únicos de ese snapshot. Es importante recalcar que aunque el snapshot se elimine, los datos referenciados por otros snapshots se mantendrán. A la práctica ésto significa que si no necesitas poder hacer restores desde las fechas/horas específicas en las que se realizaron los diferentes snapshots, puedes eliminarlos todos excepto el último, que aun así podrás realizar un restore completo.

[Fuente]

Continuar leyendo «EBS/RDS Snapshots»

Un primer vistazo a Puppet


Bueno, hoy traigo un popurrí de conceptos sobre Puppet que espero sirvan para tener una primera idea de algunas de sus características y opciones. Si eres un master of puppets, éste no es tu post.

Puppet es una de las herramientas de gestión centralizada de servidores (y workstations) más conocidas. En su página web, ofrecen varios videos gratuitos que explican con más detalle qué es y cómo funciona.

Bolt y Puppet Tasks

Bolt: standalone, opensource agentless task runner para ejecutar ad-hoc imperative tasks en entornos pequeños.

Puppet tasks: para resolver tareas que no encajan bien en el modelo tradicional puppet. Las Puppet Tasks son una forma simple y rápida de actualizar paquetes al instante, reiniciar servicios o ejecutar cualquier otro tipo de acción similar en tus nodos.

Continuar leyendo «Un primer vistazo a Puppet»