AWS

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...

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...

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...

Parsear MaintenanceWindow de RDS en Python

Para una aplicación que estamos desarrollando, necesitábamos saber cuándo se van a aplicar los mantenimientos en nuestras instancias de RDS. El problema es que según la documentación de Boto3, el método describe_pending_maintenance_actions devuelve la fecha de aplicación de la actualización en el campo CurrentApplyDate, pero esto siempre viene vacío:

$ aws rds describe-pending-maintenance-actions

Leer más...