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”

Apuntes de Python 3 (3ª parte)


Tras año y medio desde la segunda entrega de los Apuntes de Python, llega la tercera entrega, con únicamente un par de secciones bastante genéricas (comunes a muchos lenguajes de programación) y unos cuantos snippets a modo de resumen. Pero antes de nada, te recuerdo los enlaces que preceden a este post:

Guía de estilo para Python

  • Usa (4) espacios en lugar de tabular
  • Nombra a tus variables y a tus funciones en minúsculas usando “_” como separador. i.e. return_code
  • Nombra a tus constantes en mayúsculas y de nuevo, usando “_” como separador. i.e. MAX_SIZE
  • Puedes usar comillas simples o dobles para strings [Más info]
  • Para strings con triple comilla, usa siempre comillas dobles. i.e. “”” Aquí el docstring “””
  • Usa 2 líneas en blanco antes de funciones y definiciones de clases
  • Usa 1 línea en blanco antes de métodos dentro de una clase
  • Dentro de las funciones, usa una línea en blanco para separar secciones lógicas
  • Respecto a los comentarios, deben ser frases completas. Dejando un espacio entre la almohadilla y el comentario, empezándo en mayúscula y acabando la frase con un punto.

[Más info] [Y más]

Continuar leyendo “Apuntes de Python 3 (3ª parte)”

Reemplazar un data nodo de Elasticsearch de forma segura

Es probable que en alguna ocasión necesitemos reemplazar uno de nuestros nodos de datos del cluster de Elasticsearch. Una opción (a lo loco, y nada recomendable) sería directamente eliminar el nodo, y añadir uno nuevo, el cual, en algún momento se sincronizará con el cluster. Obviamente lo malo de esta opción, es que el cluster quedará en status yellow o red mientras no termine la sincronización.

Una buena opción (probado en un ES 5.6.3) para hacer de este proceso, un proceso seguro y controlado, es como primer paso, quitar el nodo del cluster, esperar a que los shards (primarios y réplicas) se re-asignen, y una vez tengamos el nodo desacoplado del cluster, reemplazarlo. La idea es continuar con el cluster en “green” durante todo el proceso.

A continuación los pasos.

Continuar leyendo “Reemplazar un data nodo de Elasticsearch de forma segura”

Usa diferentes versiones de terraform con tfenv

Cuando trabajas en grandes entornos gestionados con terraform, es muy probable que tengas que trabajar a su vez con diferentes versiones de terraform, según requieran cada unos de los proyectos.

En lugar de descargar las diferentes versiones que necesitemos, renombrando los ejecutables, moviéndolos a algún directorio dentro del PATH y jugando con enlaces simbólicos, podemos símplemente usar el maravilloso tfenv.

Descarga e instalación

Para empezar a usar tfenv, lo único que necesitaremos será clonar el repositorio (por ejemplo en nuestra home) y crear un enlace simbólico para que tfenv esté disponible en el PATH.

Continuar leyendo “Usa diferentes versiones de terraform con tfenv”

Resumen para el AWS Solutions Architect Associate

Tras casi un año acumulando borradores en el blog, por fín publico algo. Dejo aquí el resumen (con notas en inglés y español) que hice para la certificación de AWS Solutions Architect Associate (que me saqué a través del curso de A Cloud Guru). Hice el examen a finales de Octubre de 2017, así que a día de hoy, debería ser útil para aquellos que quieran subir a examinarse en breve.

El resumen consta de las siguientes secciones
1. IAM
2. S3
3. EC2
4. EFS
5. Lambda
6. Route53
7. Databases
8. VPC
9. Application Services
10. Whitepaper: Security
11. Exam feedback
12. Random notes

Al final del post dejo un enlace al resumen en PDF.

1. IAM


  • Users, Groups (users heritage its policies), Roles (for aws resources) and Policies (json)
  • Global
  • Root Account (never use it) + MFA
  • By default new users have no permissions
    • Programmatic access
    • AWS Management console access
  • IAM password policy
  • Roles:
    • AWS Service Role – The usual one, and the one we are interested in
    • AWS service-linked role: for Alexa
    • Role for cross-account access: allow IAM users to access to another AWS accounts
    • Role for identity provider access: grant access from Cognito, or OpenID (facebook, google, amazon), SAML, etc

Continuar leyendo “Resumen para el AWS Solutions Architect Associate”

Here documents (<<), Here strings (<<<) y el comando "read"

bash

< < (Here documents)

Un here document es un tipo de redirección que le dice al shell que vaya leyendo el input que se le está pasando hasta encontrar una determinada palabra clave (‘TAG’ en el ejemplo).

Consiste, pues, en un bloque de código cuyas líneas se pasan una a una a un comando o programa interactivo (como ftp o cat). Podemos usar cualquier TAG para indicar el final del bloque que compone el here document, pese a que se suele usar “EOF”, pero podríamos usar cualquier cosa, mientras estemos seguros de que será una cadena de carácteres que no se usará dentro del bloque que queremos procesar.

Un posible uso es el de añadir un bloque de líneas a un fichero. Cabe decir que el here document incluirá los espacios/tabs de inicio de cada línea. Si no es lo que quieres, puedes eliminar los tabs de inicio de línea al procesar el here document añadiéndo un “-” justo tras la redirección y antes del tag (quedaría “< <-"). Aquí un ejemplo manteniendo tabs y usando variables dentro del bloque:

Continuar leyendo “Here documents (< <), Here strings (<<<) y el comando "read""

Apuntes de Python 3 (2ª Parte)

python3Ya tenemos aquí el segundo post de apuntes de Python 3, que sigue al primero que publiqué hace ya unos meses. Pincha en el siguiente link si te lo perdiste:

Apuntes de Python3 (1ª Parte)

1. Funciones (continuación)

Argumentos de la función (continuación)

Podemos setear un valor por defecto de uno o más argumentos de la función, de tal manera que si al llamar a la función no le pasamos dichos argumentos, éstos tomarán el valor por defecto. Podemos pasarle como valor por defecto, una variable, pero mucho cuidado pues el valor por defecto se seteará en el momento de la definición, con lo que si modificas la variable después de la definición de la función, no variará el valor por defecto del argumento.

Respecto a los argumentos al llamar a una función, deberíamos usar “keyword arguments” (aka “kwargs”) en lugar de argumentos posicionales. Es más largo pero es mucho más claro.

Podemos usar un único argumento al definir la función para capturar cualquier número de argumentos posicionales (un asterísco) o kwargs (dos asteríscos) que se le pasen a la función.

Continuar leyendo “Apuntes de Python 3 (2ª Parte)”

Bash bang commands y más

bash
A continuación una serie de comandos útiles en bash, que (por lo menos a mí) me viene bien tener a mano, razón por la cual seguramente este post se actualice varias veces a medida que vaya añadiéndo comandos útiles a mi día a día.

“$?”: Exit code

“$?” Muestra el exit code del comando que se acaba de ejecutar.

Ésto se puede usar dentro de scripts en bash, para saber cómo ha acabado la línea anterior del script, lo cual puede resultar muy muy útil.

Continuar leyendo “Bash bang commands y más”