Problema entre módulo de AWS EKS y Terraform 14

Hice el upgrade a la versión 14 de Terraform y me encontré con un problema a la hora de intentar levantar un cluster en EKS de AWS, el error es el siguiente:

Error: Unsupported Terraform Core version
on .terraform/modules/vpc/versions.tf line 2, in terraform:
2: required_version = ">= 0.12.7, > 0.14"

Revisando el código encontré el culpable

module "vpc" {
   source  = "terraform-aws-modules/vpc/aws"
   version = "2.47.0"

...
}

La versión del módulo de AWS no era compatible con Terraform 14, asi que me puse a buscar una nueva versión que la soportará y resultó ser la versión 2.58 https://github.com/terraform-aws-modules/terraform-aws-vpc/releases/tag/v2.58.0

Y con eso el problema fué resuelto, espero les sirva 🙂

Lo bueno, lo malo y lo feo del 2020

El año 2020 fué un año que todo el mundo quiere olvidar porque ha sido un año nefasto y terrible, por primera vez en la historia hemos tenido una pandemia de escala global, incluso cuando ya se sabía que el virus del COVID19 se extaba expandiendo en China pocos creíamos que esto iba a salirse de control, este 2021 es el año en el que esperamos las vacunas, de cualquier forma quise hacer un resumen del 2020 en un formato que ya he usado antes en el blog.

Lo bueno
– Ningún miembro de mi familia cercana a enfermado de COVID, todos estamos sanos felizmente.
– Tengo un nuevo y fantástico trabajo como SRE (Site Reliability Engineer)
– Saqué 2 certificaciones: LFSA (Linux Foundation Certified System Administrator) y Terraform
– He estudiado mucho e incluso inicié un curso de Data Science en HarvardX
– La pandemia ha hecho que este más cerca de mi amada esposa
– La pandemia ha provocado que tenga menos gastos y pueda ahorrar un poco más
– Invertí en criptomonedas por primera vez

Lo malo
– La pandemia
– Las muertes de Eddie Van Halen, Sean Malone(Cynic), Sean Reinert (Cynic), Diego Maradona, Chadwick Boseman (Black Panther), Seann Connery, Enio Morricone, Neil Peart (Rush)
– La gente crédula que cree en conspiraciones y los antivacunas
-´Subí de peso en vez de bajar
– La U tuvo todo para campeonar pero nuevamente Gremco nos saboteó al contratar a Comizzo como entrenador.

Lo feo
– La gran cantidad de muertos por COVID19
– Las fake news, demasiada desinformación, especialmente desde el lado de la extrema derecha.
– La poca responsabilidad de la gente para seguir los cuidados propios de la pandemia, demasiado egoísmo y falta de sentido común ha campeado a escala global.
– La forma totalmente desorganizada e irresponsable en la que el gobierno peruano, encabezado por Martin Vizcarra, manejó la pandemia luego del confinamiento inicial.
– La vacancia de Vizcarra, presidencia temporal de Merino y nueva presidencia de Sagasti, todo por culpa de nuestro nefasto congreso.
– La codicia y especulación de precios durante la etapa inicial de la pandemia, hubo mucha gente que se llenó de dinero aprovechandose de la desgracia y necesidad del resto.
– Las vacunas van a tardar en llegar al Perú fruto de la ineficiencia del gobierno.

Venta de Libros

La necesidad de espacio me ha forzado a vender varias cosas, entre ellas muchos libros, dejo la lista de todos los libros que he puesto a la venta, la mécanica es sencilla:
– No los vendo individualmente, los vendo todos juntos o por lotes (ya los he separado)
– La venta es para residentes en Lima, porque envíarlos a provincias o el extranjero va a ser complicado por el peso.
– No separo ni guardo, al primero que me pagué se los entrego, me pueden pagar vía Yape, Paypal o a mi cuenta bancaria
– Me pueden contactar por DM a mi cuenta de twitter @Slayer_X

Aquí la lista completa de los libros en venta

Noticias de Ninguna ParteWilliam Morris
Crónica de San GabrielJulio Ramón Ribeyro
Memorias de AdrianoMarguerite Yourcenar
DianéticaRonnald Hubbard
HotelArthur Hailey
Bunker13Aniruddha Bahal
Las Horas DistantesKate Morton
La Cuarta DimensiónBob Frissel
El Habla CultaMartha Hildebrandt
1000 Palabras y Frases PeruanasMartha Hildebrandt
Historia CeroWilliam Gibson
Grupo 1

Opiniones de un PayasoHeinrich Boll
El Secreto del FuegoFarah Karimi
Las Dudas de SalaiMonaldi & Sorti
Gato RojoPeter Spiegelman
Luz de AgostoWilliam Faulkner
Corazón de UlisesJavier Reverte
El Nombre de la RosaUmberto Eco
CementoFedor Gladkov
En el País de la Nube BlancaSarah Lark
El Siglo de las LucesAlejo Carpentier
Grupo 2

El Viejo y el MarErnest Hemingway
El Código Da VinciDan Brown
La Casa de los EspiritusIsabel Allende
Crimen y CastigoFedor Dostoeivski
FiccionesJorge Luis Borges
Abaddon el ExterminadorErnesto Sábato
Ël Cazaba HalconesJavier Arevalo
Guerra Mundial ZMax Brooks
No se lo digas a NadieJaime Bayly
Don CamiloGiovanni Guareschi
Grupo3

La Décima RevelaciónJames Redfield
La Novena RevelaciónJames Redfield
El Espejismo de DiosRichard Dawkins
CaínJosé Saramago
Dando la NotaJose Luis Campuzzano
Nosotras que nos queremos tantoMarcela Serrano
La ColmenaCamilo José Cela
Historia de dos CiudadesCharles Dickens
Ensayos Frankenstein
The Gospel of the FSMBobby Henderson
Grupo 4

Primero voy a escuchar ofertas por todo el lote, si nadie me ofrece algo razonable le pondré precios por grupos.

Agradecería mucho si pudieran difundir este post para que llegue a más gente.

Posible cambio de idioma

Tengo un nivel de inglés que se puede considerar decente, puedo sostener conversaciones sin mayores problemas, puedo leer libros en inglés, sin embargo me falta mejorar mi escritura, cuando uno habla muchas veces puede decir o pronunciar de forma incorrecta sin embargo la otra persona puede entendernos, es como cuando un extranjero nos dice “dame una poquita de agua”, no es correcto, pero le entendemos. La escritura es mucho más meticulosa y es por ello que es muy importante escribir correctamente.

Asi que estoy pensando en cambiar el idioma del blog y empezar a escribir todo en inglés, es un cambio un poco radical pero creo que será un buen ejercicio.

Stay tunned 🙂

Solucionar error en Docker para Centos8: client version 1.40 is too new

Llevo usando Centos 8 hace varios meses para hacer laboratorios y pruebas, estaba armando un Dockerfile y cuando quise probarlo encontré este mensaje de error:

Docker: “Error response from daemon: client version 1.40 is too new. Maximum supported API version is 1.39”

Lo curioso era que si podía levantar contenedores, el problema radica cuando invocas cualquier comando que quiera comunicarse con el daemon de docker, me puse a investigar y encontré el problema:
This is known issue with docker client 19.03.09. It happens if the daemon version supports only max api-version 1.39. Client is not downgrading the API version to match the server supported version automatically. It should be fixed in 19.03.10.
https://github.com/docker/cli/issues/2533

Tal y como refieren en el issue hay un problema conocido y se puede solucionar de 2 maneras, la forma rápida es exportar una variable de entorno especificando la version de API que quieres usar

export DOCKER_API_VERSION=1.39

Pero yo prefiero la solución permanente que es hacer el upgrade y asi no tengo que lanzar esa variable de entorno cada vez que quiera usar el daemon o meter una línea más en mi .bashrc

En centos uso el repo oficial de docker, pero al querer hacer el update encontré este error

[root@behemoth ~]# yum update
Last metadata expiration check: 0:00:07 ago on Sat 11 Jul 2020 12:35:05 PM -05.
Error:
 Problem: package docker-ce-3:19.03.12-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best update candidate for package docker-ce-3:18.09.1-3.el7.x86_64
  - package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering

Tenía que hacer upgrade al paquete containerd pero la versión que necesito no esta disponible a traves del repo, asi que busqué y encontré el rpm que necesitaba, para instalarlo ejecutan

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Y luego de eso ya podrán hacer el upgrade de la versión de Docker sin problemas

# yum update
Last metadata expiration check: 0:02:13 ago on Sat 11 Jul 2020 12:35:05 PM -05.
Dependencies resolved.
=============================================================================
 Package          Arch      Version                Repository           Size
=============================================================================
Upgrading:
 docker-ce        x86_64    3:19.03.12-3.el7       docker-ce-stable     24 M
 docker-ce-cli    x86_64    1:19.03.12-3.el7       docker-ce-stable     38 M

Transaction Summary
=============================================================================
Upgrade  2 Packages

Total download size: 62 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): docker-ce-19.03.12-3.el7.x86_64.rpm   1.3 MB/s |  24 MB     00:17
(2/2): docker-ce-cli-19.03.12-3.el7.x86_64.r 1.7 MB/s |  38 MB     00:21

Espero les resulte útil

100 días de cuarentena en el Perú

Hoy 23 de Junio del 2020 se cumplen 100 días de la cuarentena impuesta por el gobierno peruano. Quiero recordar este momento para la posteridad porque estamos viviendo algo impensado, un evento para el que no estabamos preparados.

Desde finales del 2019 sabíamos que había un nuevo virus bastante peligroso llamado COVID19 y que era sumamente contagioso, pero hasta febrero nadie pensó que sería la primera vez en la historia que tendríamos una pandemia de escala totalmente global. El Perú no estuvo preparado, sin embargo, el presidente Vizcarra sorprendió tomando medidas que fueron consideradas muy duras, lo criticaron duramente diciendo que exageraban. El tiempo le dió la razón, se actuó con celeridad, se ganó tiempo pero este fué terriblemente administrado, la ineficiencia y corrupción generalizada del país han hecho que hoy vivamos una situación terrible.

Nunca podré criticar a la gente que vive del día a día, gente que ha tenido que aguantar 100 días y que hoy no tiene que comer, se ven forzados a salir a vender lo que sea para no morir de hambre. Pero hay mucha gente irresponsable, que no tiene esas necesidades y sin embargo sale a hacer su vida como si nada hubiera pasado, se reunen a beber alcohol, visitan prostíbulos clandestinos, salen a comprar en grupo, andan sin mascarilla.

Tengo que mencionar en un párrafo aparte a toda esa gente miserable que se ha aprovechado de la coyuntura para especular con los precios y aprovecharse de la necesidad de la gente. Desde luego que hay mucha gente solidaria, pero es penoso y desalentador ver tanta gente que se aprovecha de la desgracia ajena.

Otra cosa que quiero recordar para el futuro son los conspiranoicos que creen que las antenas 5G propagan el COVID19 y que serán usadas para controlarnos a través de los chips que nos van a implantar con las vacunas, si, por muy loco que suene hay gente que realmente cree esas tonterías.

Por mi parte he optado por mantener una cuarentena estricta, no salgo de mi casa a menos que sea absolutamente indispensable, tengo una pequeña red de comerciantes conocidos que me proveen de víveres y todo lo necesario para subsistir. Ocupo mi tiempo estudiando, he empezado a estudiar Data Science y me tiene entusiasmado. A pesar de las dificultades porque en estos momentos no tengo un trabajo estable me siento afortunado porque no me falta comida y tengo un techo seguro, lo mejor de todo es contar con mi esposa, sin ella esta situación hubiera sido insostenible para mí. La amo demasiado y junto con ella aprovechamos nuestro tiempo libre haciendo maratones de nuestras series favoritas.

Todos estamos esperanzandos en una vacuna, pero seguramente tardará por lo menos un año en aparecer, mientras tanto tenemos que seguir luchando contra la pandemia y asumiendo nuestra responsabilidad. Toca cuidarse y sobrevivir.

Pyenv para tener distintas versiones de Python

Python Cuando programas en Python es común que hagas uso de muchas librerías y en algún momento necesites una versión muy específica de Python para tu desarrollo. Muchos de estos problemas se pueden solucionar con Docker, sin embargo, no siempre podemos encontrar exactamente lo que buscamos o resulta complicado construirlo si no tenemos una buena base sobre lo que es contenedores.

En algunas distribuciones de Linux es común que tengas instaladas 2 versiones de Python, una de la rama 2.x que por cierto ya va quedando obsoleta y otra versión de la rama 3.x, para descubrir que versión de Python tenemos ejecutamos:

python --version

o

python3 --version

En mi caso estoy corriendo Centos8 y tengo la versión 3.6.8

Pyenv es un programa que nos permite poder instalar distintas versiones de Python y decidir qué versión específica queremos usar en cualquier momento, asi que el primer paso es instalar pyenv, el proceso es bastante sencillo:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Con eso se instalará pyenv en tu home directory, ahora tendrás que añadir unas líneas a tu archivo .bashrc que sirven para aumentar una ruta a tu path y activar pyenv cada vez que inicies una nueva sesión.

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

Con estos pasos tendremos pyenv funcionando, puedes verificar la versión instalada ejecutando

pyenv version

Para ver todas las versiones de Python y programas accesorios (anaconda, stackless, miniconda, etc etc) que puedes instalar ejecutas

pyenv install --list | more

Para nuestro ejemplo vamos a instalar una versióm de Python2 y una de Python3, antes de empezar con la instalación hay un paso muy importante que es asegurarse de que tu distribución tiene instalado todo lo necesario para compilar desde fuentes, hablamos de tener gcc, make, etc etc.

Si usas Ubuntu, Debian o derivados ejecuta:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl

Si usas RedHat/Centos/Fedora o derivados ejecuta:

sudo yum groupinstall "Development Tools"
sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel

Con esto debería ser suficiente para instalar cualquier versión de python, empezaremos con la versión 2.7.9

pyenv install 2.7.9

Una vez que se descargue el código fuente de nuestra versión se compilará en nuestra PC, esto puede tardar un poco dependiendo de la potencia que tengas. Cuando termine puedes verificar que se instalo con el comando

pyenv versions

Eso te mostrará todas las versiones de python instaladas, otra forma de verificar es observando el contenido de nuestro directorio versions en nuestro home directory

ls  ~/.pyenv/versions/

Eso significa que para desinstalar alguna versión bastaría con remover el directorio que le corresponde con un rm, pero prefiero usar pyenv para ese propósito

pyenv uninstall 2.7.9

Ahora voy a instalar la última versión de Python disponible, al momento de escribir este post era la versión 3.8.3

pyenv install 3.8.3

Si todo sale bien debes tener como mínimo 2 versiones de Python, en mi caso

$ pyenv versions
* system
2.7.9
3.8.3

El asterisco señala la versión activa de python, en mi caso es la 3.6.8 que viene por defecto en el sistema, para cambiar la versión activa sólo debes ejecutar:

$pyenv global 3.8.3
system
2.7.9
* 3.8.3

Si quieres probar el shell interactivo de alguna versión de python que tengas instalada debes ejecutar:

pyenv shell 2.7.9

Virtual Enviroments
Una vez resuelto el tema de manejar las distintas versiones de Python ahora viene otra parte importante que es manejar los virtual enviroments, hay varias formas de hacerlas, yo recomiendo instalar un plugin de pyenv que sirve especificamente para este propósito: pyenv-virtualenv

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

De forma opcional pero recomendada, ejecutamos el siguiente comando que lo que hace es agregar una línea a tu archivo .bash_profile que hará que tengas el plugin disponible en todo momento.

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

Para crear un entorno virtual que se llame “proyecto1” con la versión 3.8.3 de python ejecutamos

pyenv virtualenv 3.8.3 proyecto1

Si no especificas la versión de Python se creará el entorno con la versión por defecto

pyenv virtualenv proyecto2

Para ver la lista de entornos virtuales ejecutas:

pyenv virtualenvs

Para activar un entorno virtual

pyenv activate proyecto1

Para desactivar un entorno virtual

pyenv deactivate

Para borrar un entorno virtual

pyenv virtualenv-delete proyecto2

¿Bastante fácil verdad?

He cubierto sólo lo básico para empezar, puedes hacer muchas cosas más, espero que te haya sido de utilidad! Happy hacking 🙂