Posts

Instalación y configuración de Windows Terminal y Powershell

Microsoft se está poniendo un poco las pilas, y entre otros muchos proyectos, lanzó hace unos meses Windows Terminal, una nueva terminal en Windows con unas funcionalidades que eran necesarias desde hace mucho tiempo (pestañas, perfiles, integración con WSL, soporte Unicode y UTF-8, temas, estilos, etc.).

Aunque no uso mucho Windows, en ocasiones tengo que iniciarlo, y determinadas tareas de consola se hacen bastante pesadas. Con Windows Terminal, la verdad es que la sensación a la hora de trabajar es bastante cómoda. Por eso, he decidido crear este post para futuras referencias, así como con instrucciones para instalar utilidades útiles a la hora de usar Windows Terminal.

En primer lugar, para instalar Windows Terminal, simplemente ejecutaremos este comando desde una consola de Powershell estándar, con permisos de administrador (teniendo el gestor de paquetes Chocolatey instalado previamente):

choco install microsoft-windows-terminal

Como alternativa, si no podemos instalar Windows Terminal porque el sistema no cumple los requisitos (es necesaria una compilación de Windows Windows 10 1903, build 18362, o posterior), podemos optar por usar ConEmu o Cmder:

choco install conemu
choco install cmder

También instalaremos gsudo, que será necesario en pasos posteriores:

choco install gsudo

Leer más...

Obtener la fecha de creación de las instancias de AWS EC2

AWS, al listar las instancias de EC2, no devuelve ninguna propiedad que diga cuándo se creó una instancias; esto puede sernos útil en determinadas ocasiones. Podríamos pensar que nos podría valer la propiedad “LaunchTime”, pero eso en realidad nos indica cuándo se encendió por última vez la instancia, no cuándo se creó.

Aunque directamente este dato no lo proporciona directamente AWS, podemos deducirlo indirectamente a través de otros parámetros:

  • La fecha más antigua de vinculación de las tarjetas de red
  • La fecha más antigua de vinculación de los discos

Esto debe ser válido, ya que por ejemplo, la tarjeta de red principal no se puede desvincular de la instancia (You cannot detach a primary network interface from an instance), y su fecha de vinculación permanece siempre igual, aún entre reinicios. También suele ser válido que normalmente, el disco principal de una instancia no suele cambiar, aunque esto no siempre es cierto.

Con estos datos, podemos lanzar una consulta de la CLI de AWS y mediante el parámetro query (que es una expresión JMESPath), obtener dichos valores:

aws ec2 describe-instances --output table --query 'sort_by(Reservations[].Instances[?State.Name!=`terminated`][].{Name: Tags[?Key==`Name`].Value | [0], InstanceId: InstanceId, CreationTime: min([min(NetworkInterfaces[].Attachment.AttachTime), min(BlockDeviceMappings[].Ebs.AttachTime)]), State: State.Name, InstanceType: InstanceType, PublicIpAddress: PublicIpAddress, PrivateIpAddress: PrivateIpAddress}, &CreationTime)'

Leer más...

Configurar Microk8s para usar repositorios de AWS ECR

Continuando con un post anterior de cómo probar Ansible AWX con Microk8s (en AWS EC2). Bueno, pues resulta que me creé una imagen personalizada para el contener awx_task para instalar una serie de librerías y comandos que necesitaba para lanzar unos playbooks; el fichero Dockerfile es similar a éste:

FROM ansible/awx_task:9.1.1

# Switch user to become root
USER 0

# Additional software
RUN cd && \
    set -x && \
    dnf install -y nmap-ncat htop && \
    dnf clean all

# Ansible venv additional dependencies
RUN cd && \
    source /var/lib/awx/venv/ansible/bin/activate && \
    umask 0022 && \
    pip install --upgrade pypsrp pysocks && \
    deactivate

# Restore the original user
# https://github.com/ansible/awx/blob/devel/installer/roles/image_build/templates/Dockerfile.task.j2
USER 1000

Leer más...

Monitorizar memoria y errores de funciones Lambda

A la hora de monitorizar estadísticas sobre la ejecución de nuestras funciones Lambda, Cloudwatch ya nos ofrece algunas builtin como:

  • Cantidad de throttles
  • Número de invocaciones
  • Número de errores “genéricos”
  • Duración (media y total)

Pero si queremos ver estadísticas sobre memoria o errores según sean por consumo excesivo de memoria o por timeout, no los tenemos disponibles por defecto.

Leer más...

Usando caddy para desarollo local en PHP

Durante el desarrollo en local de nuestra aplicación en PHP (con el framework CakePHP) solíamos usar el servidor que venía por defecto:

bin/cake server

El problema de esto (que por debajo usa el servidor embedido de PHP), es que es mono-hilo, es decir, que sirve sólo una petición a la vez, por lo que a veces la carga de la web se hacía bastante pesada.

Leer más...

Crear usuario y base de datos en Postgres y dar permisos

Una cosa que siempre se me olvida y tengo que buscar (como con MySQL): cómo crear un usuario en Postgres, crear una base de datos, y dar permisos al usuario sobre esa base de datos:

psql -U postgres
create database mydb ENCODING 'UTF8';
create user myuser with encrypted password 'mypass';
grant all privileges on database mydb to myuser;

Leer más...

Probando Ansible AWX con MicroK8s

AVISO: Post largo (intro a Ansible, AWX, MicroK8s)

Actualización 2020-01-14: Actualizado a Ansible AWX 9.1.1

Ansible (/ánsibol/) es el gestor de configuración de moda, y por méritos propios. Aunque no es perfecto (en determinadas ocasiones se puede preferir un modelo cliente/servidor en lugar de una conexión SSH ad-hoc), ofrece una buena combinación entre funcionalidad y simplicidad. Siempre y cuando tengamos conectividad SSH con la máquina a gestionar (o no, a través de bastiones), en el caso de equipos Linux, o conectividad WinRM o o PSRP para equipos Windows, podremos realizar infinidad de acciones o tareas sobre las máquinas a gestionar.

Uno de los problemas de Ansible (hablando correctamente, Ansible Engine) es que no tiene una forma de ejecutar de forma automatizada playbooks, para mantener la configuración sincronizada de forma periódica, ejecutar tareas planificadas o incluso auto-provisionar equipos. Aquí es donde entra Ansible Tower, que es la versión con soporte de Ansible AWX, al estilo de lo que Red Hat hace con Wildfly y JBoss. Ansible Tower/AWX en básicamente una API REST con una interfaz web que se comunica con ella. Utilizando esta API, se pueden definir inventarios, credenciales, equipos, plantillas de trabajo, flujos de trabajo, etc. así como asignar permisos por usarios/grupos mediante su sistema RBAC.

Leer más...

Crear un rol personalizado en Google Cloud para encendido y apagado de máquinas

Es posible que queramos delegar ciertas tareas de administración sobre elementos de Google Cloud a usuarios o departamentos, y que no existan roles predefinidos que hagan exactamente lo que necesitamos. Para eso están los roles personalizados, similar a las políticas de IAM de AWS.

Por ejemplo, para crear un rol que permita a un usuario apagar, encender y reinicar máquinas virtuales, podemos crear un rol como el siguiente:

gcloud iam roles create StartStopVms --project ${GOOGLE_CLOUD_PROJECT} \
    --title StartStopVms --description "Can start, stop, suspend, resume and reset VMs" \
    --stage GA --permissions compute.instances.start,compute.instances.stop,compute.instances.suspend,compute.instances.resume,compute.instances.reset

Leer más...

Python es el lenguaje más popular hoy por hoy

Existe una medida, llamada índice TIOBE, que valora qué lenguajes de programación son más populares. Los datos salen de los foros de discusión técnicos en donde se observan cuantos internautas cambian impresiones sobre los diferentes lenguajes de programación. Ahora, en junio, el índica TIOBE ha sido publicado y revela que Python es el lenguaje más popular.

Leer más...

Crear custom runtime para PHP en AWS Lambda

Actualización 2019-06-27: Añadida extensión para MongoDB.

En el proyecto que estamos desarrollando, tenemos algunas funciones Lambda en Python, con las que no tenemos problemas (por ahora); las dependencias de estas funciones Python las gestionamos con pipenv.

Pero dado que el frontend está desarrollado en PHP, hay veces que necesitamos acceder a determinadas propiedades y funciones desde las funciones Lambda, y nos planteamos migrar o desarrollar nuevas funciones Lambda en PHP. Esto no era posible hasta que hace unos meses, AWS anunció el soporte de custom runtimes, que básicamente consiste en subir el ejecutable con un determinado nombre.

Leer más...