En la entrada AWS Instance Scheduler indicaba cómo configurar AWS Instance Scheduler en una cuenta. Sin embargo, una de las capacidades más interesantes de esta solución de Amazon es la posibilidad de programar el encendido (y/o apagado) de instancias en diferentes cuentas.

Esto permite configurar la programación en una cuenta -que llamaremos primaria- y gestionar instancias de otras cuentas secundarias.

Configuración en la cuenta primaria

La configuración de AWS Instance Scheduler consiste en aplicar el fichero CloudFormation y dejar que la automatización haga su magia.

Si estás interesado en algo más de detalle, revisa la entrada AWS Instance Scheduler.

A grandes rasgos, Instance Scheduler realiza las siguientes acciones:

  1. El fichero cloudformation genera una regla en CloudWatch de manera que se dispare un evento cada 5 minutos (este es el intervalo por defecto).

  2. Como respuesta al evento, se lanza una función lambda.

  3. La función lambda conecta a una base de datos DynamoDB, de donde obtiene la configuración.

  4. La función lambda consulta las etiquetas aplicadas a las instancias; si coincide con la definida en la configuración, arranca (o detiene) la instancia de acuerdo con el periodo y la programación almacenada en la tabla de DynamoDB.

  5. La función lambda aplica una etiqueta informativa en la instancia (opcionalmente) y guarda el resultado en la base de datos.

La función lambda requiere permisos para poder consultar la base de datos y para actuar sobre las instancias EC2.

La plantilla de CloudFormation permite crear las políticas y roles de forma automática, lo que resulta muy conveniente.

Configuración en la cuenta secundaria

Amazon proporciona un fichero cloudformation específico para la configuración de Instance Scheduler en cuentas secundarias.

Cuando ejecutas CloudFormation en una cuenta secundaria, lo único que debes proporcionar es el ID de la cuenta primaria.

Esto permite a CloudFormation crear una relación de confianza con la cuenta primaria en el rol con permisos para actuar sobre las instancias EC2 en la cuenta secundaria.

Actualización del stack en la cuenta primaria

En IAM de la cuenta secundaria, anota el ARN del rol Scheduler.

Cambia a la cuenta primaria y en CloudFormation, actualiza el stack usando la plantilla existente.

Revisa los diferentes campos hasta encontrar uno en el que debes indicar el ARN en la cuenta secundaria.

Al informar del ARN del rol con permisos para arrancar las instancias, se modifica la política asociada a la lambda en la cuenta primaria de manera que pueda asumir el rol en la cuenta secundaria.

De esta forma, extendemos la capacidad de gestionar instancias EC2 de la lambda a la cuenta secundaria.

Ventajas de la configuración multi-cuenta

Puedes repetir el proceso indicado para la cuenta secundaria en tantas cuentas como quieras.

De esta forma puedes tener toda la gestión de arrancada y parada de máquinas centralizada, almacenada en una única tabla de DynamoDB y aplicar diferentes schedules en tantas cuentas como quieras, simplificando el mantenimiento.