Saltar al contenido

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

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Para automatizar el despliegue de AWS Instance Scheduler, utiliza las plantillas de CloudFormation.

Nota: Si utilizas Instance Scheduler para instancias de Amazon EC2 con un Amazon Elastic Block Store (Amazon EBS) cifrado, las instancias no se iniciarán. Debes 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.

Cómo instalar Instance Scheduler

Instala Instance Scheduler. A continuación, para comprobar que la instalación se ha llevado a cabo correctamente, ejecuta el siguiente comando:

$ scheduler-cli --version

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

Para desplegar una función de AWS Lambda, una tabla de Amazon DynamoDB, una regla de Amazon EventBridge y métricas personalizadas de Amazon CloudWatch, sigue estos pasos:

  1. Abre la Consola de administración de AWS.
  2. Abre la consola de CloudFormation con la plantilla Instance Scheduler. De forma predeterminada, la plantilla se inicia en la región este de EE. UU. (norte de Virginia). O bien, ve a la página Step 1. Launch the instance scheduler hub stack (Paso 1: Iniciar la pila del centro del programador de instancias) y, a continuación, selecciona Launch Solution (Iniciar solución).
    En la barra de navegación, selecciona la región de AWS en la que quieres iniciar la pila con la plantilla y, a continuación, selecciona Siguiente.
    En Nombre de la pila, asigna un nombre a la pila.
    En Instance Scheduler TagName, puedes mantener el valor predeterminado de Programar o personalizarlo.
    En Frecuencia, elige una frecuencia en minutos para ejecutar tu 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 tienes un gran número de instancias, usa la frecuencia más alta posible para evitar la limitación. Si la frecuencia no es lo suficientemente frecuente para tus necesidades, puedes ajustar la propiedad Frecuencia más adelante.
    En Habilitar métricas de CloudWatch, elige .
    En Habilitar Registros de CloudWatch, elige .
    (Opcional) En Etiquetas iniciadas, introduce state=started.
    (Opcional) En Etiquetas detenidas, introduce state=stopped.
    Para la programación entre cuentas, proporciona el parámetro Roles entre cuentas. Introduce los nombres de recursos de Amazon (ARN) de cada rol de las cuentas secundarias, separados por comas. Si no utilizas la programación entre cuentas, deja el parámetro vacío.
  3. Selecciona Siguiente.
  4. En la página Opciones, elige Siguiente.
  5. Revisa la configuración y, a continuación, selecciona Acepto que AWS CloudFormation pueda crear recursos de IAM.
  6. Selecciona Crear.

Cómo crear los periodos

Para crear periodos, puedes usar la CLI de Instance Scheduler, la consola de DynamoDB o recursos personalizados. Para obtener más información sobre los periodos de tiempo, consulta Start and stop times (Horas de inicio y finalización).

Uso de la CLI de Instance Scheduler

Conéctate a la CLI de Instance Scheduler y, a continuación, ejecuta los siguientes comandos create-period de la AWS CLI:

$ scheduler-cli create-period --stack your_stack_name --region aa-example-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri    
$ scheduler-cli create-period --stack your_stack_name --region aa-example-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

Nota: Sustituye your_stack_name por el nombre de la pila que eligiste en el paso 2 y aa-example-1 por tu región.

Uso de la consola de DynamoDB

Para crear periodos, sigue estos pasos:

  1. Abre la consola de DynamoDB.
  2. Selecciona Tablas y, a continuación, selecciona la tabla de configuración.
    Nota: La plantilla de Instance Scheduler crea automáticamente una tabla de DynamoDB de estado y otra de configuración. La tabla de estado almacena el estado de las instancias que la plantilla detiene e inicia. La tabla de configuración te permite especificar los periodos y programaciones según tus necesidades.
  3. Selecciona Explorar los elementos de la tabla.
  4. Selecciona Crear elemento.
  5. Elige la vista JSON y, a continuación, utiliza la siguiente plantilla de 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. Utiliza una plantilla de JSON similar para el segundo periodo. Sustituye mon-fri-9-5 por el nombre de tu periodo, 9:00 por la hora de inicio y 16:59 por la hora de finalización.

Cómo crear una programación

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

Uso de la CLI de Instance Scheduler

Para crear una programación, ejecuta el siguiente comando create-schedule de la CLI:

$ scheduler-cli create-schedule --stack your_stack_name --name m-f9-5-sat9-12 --region aa-example-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

Nota: Sustituye your_stack_name por el nombre de la pila, aa-example-1 por tu región y mon-fri-9-5,sat-9-12 por tu programación.

Uso de la consola de DynamoDB

Para crear una programación, sigue estos pasos:

  1. Abre la consola de DynamoDB.
  2. Selecciona Tablas y, a continuación, selecciona la tabla de configuración.
  3. Selecciona Explorar los elementos de la tabla.
  4. Selecciona Crear elemento.
  5. Elige la vista JSON y, a continuación, utiliza 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

Cómo etiquetar instancias

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

Instance Scheduler supervisa 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. Si inicias instancias manualmente fuera del periodo de ejecución, Instance Scheduler no deja de ejecutarlas. Instance Scheduler tampoco inicia una instancia si la detienes manualmente durante el periodo de ejecución, a menos que apliques la programación. Para obtener más información, consulta Schedule definitions (Definiciones de programación).

Cómo usar programaciones predefinidas

Además de las programaciones personalizadas, también puedes 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. Abre la consola de Amazon EC2.
  2. Elige las instancias detenidas que quieres etiquetar.
  3. Selecciona la vista Etiquetas y, a continuación, selecciona Administrar las etiquetas.
  4. Selecciona Agregar etiqueta.
  5. En Clave, escribe Schedule.
  6. En Valor, escribe running.
  7. Selecciona Guardar.
  8. Actualiza la consola de Amazon EC2 y espera a que se inicie la función de Lambda.
    Nota: Si la función de Lambda se inicia y se ejecuta sin errores, el estado de la instancia se muestra como en ejecución. Esto depende de la programación con la que realices las pruebas. En la consola de CloudWatch, puedes comprobar si hay invocaciones y errores de Lambda en las métricas de CloudWatch.
  9. Abre la consola de DynamoDB.
  10. Selecciona Tablas y, a continuación, selecciona la tabla de estado.
  11. Selecciona Explorar los elementos de la tabla y, a continuación, confirma que la instancia etiquetada se ha iniciado.
    Importante: Se te pueden cobrar costes adicionales en función de la frecuencia y duración de la función de Lambda que utilices. También se te pueden cobrar costes adicionales por las tablas de DynamoDB o las reglas de EventBridge que crees.

Programaciones entre cuentas

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

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

Para iniciar la pila remota en cuentas secundarias, sigue estos pasos:

  1. Abre la Consola de administración de AWS de la cuenta secundaria e inicia la plantilla de CloudFormation aws-instance-scheduler-remote. También puedes descargar la plantilla para usarla en el futuro.

    Nota: De forma predeterminada, la plantilla se inicia en la región este de EE UU. (norte de Virginia).

  2. En la barra de navegación, selecciona la región en la que quieres iniciar la pila con la plantilla y, a continuación, selecciona Siguiente.

  3. En la página Seleccionar plantilla, comprueba que has seleccionado la plantilla correcta y, a continuación, selecciona Siguiente.

  4. En la página Especificar detalles, asigna un nombre a la pila remota.

  5. En Parámetros, revisa y modifica el parámetro Cuenta principal. Introduce el número de cuenta de la cuenta principal.

  6. Selecciona Siguiente.

  7. En la página Opciones, elige Siguiente.

  8. Revisa la configuración y, a continuación, selecciona Acepto que AWS CloudFormation pueda crear recursos de IAM.

  9. Selecciona Crear.

  10. Selecciona la pestaña Salidas de la pila y, a continuación, copia el valor de CrossAccountRole.

  11. En la cuenta principal, elige tu pila de CloudFormation y, a continuación, selecciona Actualizar.

  12. En la página Actualizar pila, selecciona Utilizar la plantilla actual.

  13. En el parámetro Roles entre cuentas, pega el valor CrossAccountRole.

  14. Selecciona Siguiente y, a continuación, selecciona Acepto que AWS CloudFormation pueda crear recursos de IAM.

  15. Selecciona Actualizar pila.