¿Cómo utilizo Instance Scheduler con CloudFormation para programar instancias de EC2?

9 minutos de lectura
0

Quiero usar AWS Instance Scheduler con AWS CloudFormation para programar instancias de Amazon Elastic Compute Cloud (Amazon EC2).

Breve descripción

Utilice las plantillas de CloudFormation para automatizar el despliegue de AWS Instance Scheduler.

Importante: Si utiliza Instance Scheduler para instancias de EC2 con un Amazon Elastic Block Store (Amazon EBS) cifrado, las instancias no se pueden iniciar. Para iniciar las instancias, debe conceder a Instance Scheduler un rol de usuario clave con una política de claves para cifrar o descifrar los volúmenes de EBS. Debe agregar la política de claves a la clave de AWS Key Management Service (AWS KMS) para permitir que el rol de usuario clave utilice esta clave.

Solución

Cómo instalar Instance Scheduler

Si aún no lo ha hecho, siga las instrucciones para instalar la interfaz de la línea de comandos (CLI) de Instance Scheduler.

Para comprobar que la instalación se ha llevado a cabo correctamente, ejecute el siguiente comando:

$ scheduler-cli --version

Cómo crear una pila de CloudFormation con la plantilla de Instance Scheduler

La pila despliega una función de AWS Lambda, una tabla de Amazon DynamoDB, una regla de Amazon EventBridge y métricas personalizadas de Amazon CloudWatch.

  1. Abra la Consola de administración de AWS.
  2. Abra CloudFormation con la plantilla de Instance Scheduler. O bien, vaya a la página Step 1. Launch the instance scheduler hub stack y seleccione Launch Solution.
    Nota: La plantilla se lanza en la región Este de EE. UU. (Norte de Virginia) de forma predeterminada.
  3. En la barra de navegación, seleccione la región de AWS en la que quiere lanzar la pila con la plantilla y, a continuación, seleccione Siguiente.
  4. En Nombre de la pila, asigne un nombre a la pila.
  5. En Instance Scheduler TagName, puede mantener el valor predeterminado de Programar o personalizarlo.
  6. En Frecuencia, elija una frecuencia en minutos para ejecutar su programador. Por ejemplo, puede elegir 5 minutos.
    Nota: La frecuencia es el número de minutos que pasan antes de que EventBridge vuelva a iniciar la función de Lambda para Instance Scheduler. Si tiene un gran número de instancias, use la frecuencia más alta posible para evitar la limitación. Si la frecuencia no es lo suficientemente frecuente para sus necesidades, puede ajustar la propiedad Frecuencia más adelante.
  7. En Habilitar métricas de CloudWatch, elija .
  8. En Habilitar CloudWatch Logs, elija .
  9. (Opcional) En Etiquetas iniciadas, introduzca state=started.
  10. (Opcional) En Etiquetas detenidas, introduzca state=stopped.
  11. Para la programación multicuenta, proporcione el parámetro Cross-account roles. Introduzca los ARN de cada rol de las cuentas secundarias, separados por comas. Si no utiliza la programación multicuenta, deje el parámetro vacío.
  12. Para todos los demás parámetros, personalice la pila según sus necesidades.
  13. Seleccione Siguiente.
  14. En la página Opciones, elija Siguiente.
  15. Revise la configuración y, a continuación, seleccione Acepto que AWS CloudFormation pueda crear recursos de IAM.
  16. Seleccione Crear.

Cómo crear los periodos

Para crear periodos, puede usar la CLI de Instance Scheduler, la consola de DynamoDB o recursos personalizados. Para obtener más información sobre los periodos de tiempo, consulte Start and stop times.

En el siguiente ejemplo, se muestra cómo crear instancias que:

  • Se inicien a las 9:00 h y se detengan a las 17:00 h, de lunes a viernes
  • Se inicien a las 9:00 h y se detengan a las 12:00 h el sábado

Para este ejemplo, debe crear dos periodos. En su caso, cree la cantidad adecuada de periodos.

Cómo usar la CLI de Instance Scheduler

Conéctese a la CLI de Instance Scheduler y, a continuación, ejecute los siguientes comandos:

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri  

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

Nota: Sustituya your_stack_name por el nombre de la pila que eligió en el paso 4 y eu-west-1 por su propia región.
Cómo usar la consola de DynamoDB

  1. Abra la consola de DynamoDB.
  2. Seleccione Tablas y, a continuación, elija la tabla de configuración.
    Nota: La plantilla de Instance Scheduler crea automáticamente dos tablas de DynamoDB: estado y configuración. La tabla de estado almacena el estado de las instancias que la plantilla detiene e inicia. La tabla de configuración le permite especificar los periodos y programaciones según sus necesidades.
  3. Seleccione Explore los elementos de la tabla.
  4. Seleccione Crear elemento.
  5. Elija la vista JSON y, a continuación, utilice la siguiente plantilla de notación de objetos de JavaScript (JSON):
{  
  "type": {  
    "S": "period"  
  },  
  "name": {  
    "S": "mon-fri-9-5"  
  },  
  "begintime": {  
    "S": "9:00"  
  },  
  "endtime": {  
    "S": "16:59"  
  },  
  "weekdays": {  
    "SS": \[  
      "mon-fri"  
    \]  
  }  
}

Nota: La plantilla de JSON anterior crea el primer periodo. Utilice una plantilla de JSON similar para el segundo periodo. Asegúrese de editar las plantillas según sus necesidades.

Cómo crear una programación

Para crear una programación, puede usar la CLI de Instance Scheduler, la consola de DynamoDB o recursos personalizados.

Cómo usar la CLI de Instance Scheduler

Ejecute el siguiente comando:

$ scheduler-cli create-schedule --stack your\_stack\_name --name m-f9-5-sat9-12 --region eu-west-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

Cómo usar la consola de DynamoDB

  1. Abra la consola de DynamoDB.
  2. Seleccione Tablas y, a continuación, elija la tabla de configuración.
  3. Seleccione Explore los elementos de la tabla.
  4. Seleccione Crear elemento.
  5. Elija la vista JSON y, a continuación, utilice la siguiente plantilla de JSON:
{  
  "type": {  
    "S": "schedule"  
  },  
  "name": {  
    "S": "m-f9-5-sat9-12"  
  },  
  "timezone": {  
    "S": "UTC"  
  },  
  "periods": {  
    "SS": \[  
      "mon-fri-9-5"  
    \]  
  }  
}

Cómo etiquetar la instancia y probar la programación

Al usar una pila de CloudFormation con Instance Scheduler, debe definir el parámetro Instance Scheduler TagName. El valor predeterminado de este parámetro es Programar.

Instance Scheduler controla las etiquetas de las instancias. Si la clave de la etiqueta de instancia coincide con la etiqueta del programador definida, Instance Scheduler aplica la programación establecida para el valor de la etiqueta de instancia. Por ejemplo, la clave de una etiqueta se establece en Schedule y el valor se establece en m-f9-5-sat9-12. En este ejemplo, las instancias se inician a las 9:00 h y se detienen a las 17:00 h de lunes a viernes. Las instancias también se inician a las 9:00 h y se detienen a las 12:00 h el sábado.

Nota: Las claves y los valores de las etiquetas distinguen entre mayúsculas y minúsculas. Instance Scheduler no detiene la ejecución de instancias si se inician manualmente fuera del periodo de ejecución. Instance Scheduler tampoco inicia una instancia si esta se detiene manualmente durante el periodo de ejecución, a menos que se aplique la programación. Para obtener más información, consulte Schedule definitions.

Cómo usar programaciones predefinidas

Además de las programaciones personalizadas, también puede usar cualquiera de las programaciones predefinidas de la tabla de configuración. Por ejemplo, los siguientes pasos prueban la programación predefinida denominada running:

  1. Abra la consola de Amazon EC2.
  2. Elija las instancias detenidas que quiere etiquetar.
  3. Seleccione la vista Etiquetas y, a continuación, seleccione Administrar las etiquetas.
  4. Seleccione Añadir etiqueta.
  5. En Clave, escriba Schedule.
  6. En Valor, escriba running.
  7. Seleccione Guardar.
  8. Actualice la consola de Amazon EC2 y espere a que se inicie la función de Lambda.
    Nota: Cuando la función de Lambda se inicia y se ejecuta sin errores, el Estado de la instancia aparece como running, según la programación que esté probando. En la consola de CloudWatch, puede comprobar si hay invocaciones y errores en las métricas de Lambda.
  9. Abra la consola de DynamoDB.
  10. Seleccione Tablas y, a continuación, elija la tabla de estado.
  11. Seleccione Explore los elementos de la tabla y confirme que la instancia etiquetada se ha iniciado. Los datos de estado se almacenan en la tabla de estado.
    Importante: Se le pueden cobrar costes adicionales en función de la frecuencia y duración de la función de Lambda que esté utilizando. También se le pueden cobrar costes adicionales por las tablas de DynamoDB o las reglas de EventBridge que cree.

Para la programación multicuenta: Lanzar la pila remota en cuentas secundarias

Para programar instancias en cuentas secundarias mediante Instance Scheduler, despliegue la plantilla de CloudFormation aws-instance-scheduler-remote. Esta plantilla crea el rol que permite a Instance Scheduler de la cuenta principal administrar las instancias de la cuenta secundaria.

Nota: Debe proporcionar el ARN del rol como parámetro para la pila de Instance Scheduler de la cuenta principal. Asegúrese de crear o actualizar su pila de Instance Scheduler con el parámetro correcto.

  1. Abra la Consola de administración de AWS de la cuenta secundaria e inicie la plantilla de CloudFormation aws-instance-scheduler-remote. También puede descargar la plantilla para usarla en el futuro.
    Nota: La plantilla se lanza en la región Este de EE. UU. (Norte de Virginia) de forma predeterminada.
  2. En la barra de navegación, seleccione la región de AWS en la que quiere lanzar la pila con la plantilla y, a continuación, seleccione Siguiente.
  3. En la página Seleccionar plantilla, compruebe que ha seleccionado la plantilla correcta y, a continuación, seleccione Siguiente.
  4. En la página Especificar detalles, asigne un nombre a la pila remota.
  5. En Parámetros, revise y modifique el parámetro Cuenta principal. Introduzca el número de cuenta de la cuenta principal.
  6. Seleccione Siguiente.
  7. En la página Opciones, elija Siguiente.
  8. Revise la configuración y, a continuación, seleccione Acepto que AWS CloudFormation pueda crear recursos de IAM.
  9. Seleccione Crear.
  10. Seleccione la pestaña Salidas de la pila y, a continuación, copie el valor de CrossAccountRole.
  11. En la cuenta principal, elija su pila de CloudFormation y, a continuación, seleccione Actualizar.
  12. En la página Actualizar pila, seleccione Utilizar la plantilla actual.
  13. En el parámetro Roles entre cuentas, pegue el valor CrossAccountRole.
  14. Seleccione Siguiente y, a continuación, seleccione Acepto que AWS CloudFormation pueda crear recursos de IAM.
  15. Seleccione Actualizar pila.
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año