Inicio de EC2 según el cronogtwig

Necesito iniciar una instancia de EC2 en (digamos) 6 am todos los días. Las limitaciones son que me gustaría evitar tener una computadora funcionando todo el día para hacer el inicio o usar una solución paga como la de Ylastic.

La solución en alestic, es la más cercana hasta el momento. La desventaja de esta solución es que el tiempo de inicio es alto debido al tiempo requerido para instalar un software personalizado y para mover datos.

¿Hay alguna forma de iniciar una instancia en lugar de crear una nueva instancia cada vez, como se muestra en este ejemplo ?

Dadas sus limitaciones, lamentablemente, la funcionalidad deseada no está cubierta por los dos mecanismos de automatización dedicados disponibles como productos y servicios de AWS en este momento:

  • Auto Scaling : es un servicio web diseñado para iniciar o finalizar automáticamente las instancias de Amazon Elastic Compute Cloud (Amazon EC2) en función de las políticas definidas por el usuario, las progtwigciones y las comprobaciones de estado.
  • AWS CloudFormation : brinda a los desarrolladores y administradores de sistemas una manera fácil de crear y administrar una colección de recursos relacionados de AWS, aprovisionándolos y actualizándolos de manera ordenada y predecible.

Mientras que iniciar / detener / reiniciar una instancia cae conceptualmente en la categoría de administración de este último, no está disponible (lo que es la razón por la que proporcionamos una Tarea específica para esta funcionalidad dentro del ya en desuso Bamboo AWS Plugin y su sucesor Tareas Para AWS ).

En consecuencia, los enfoques descritos en mi respuesta a Cómo activar / desactivar las instancias de la nube durante el horario de oficina siguen siendo aplicables, aunque con la restricción adicional de que necesitaría encontrar un proveedor que aloje su script o solución de integración continua de forma gratuita:

  • Los guiones de alojamiento, por ejemplo, han sido posibles desde hace bastante tiempo por medio de esos proveedores de trabajos cron.

  • Dada la explosión actual de las soluciones de Plataforma como Servicio (PaaS) , hay bastantes proveedores que le permitirán realizar scripts de host y / o soluciones de integración continua de una forma u otra también.

Obviamente, deberá verificar si el uso de los niveles libres disponibles para fines como este es aceptable de acuerdo con los respectivos Términos de uso de un proveedor en cuestión.

Ahora puede hacer esto con Amazon OpsWorks . Una vez que haya configurado las cosas principales, solo cree una nueva instancia y configure su tipo de escalado en “basado en el tiempo” (no puede cambiar esto por algún motivo una vez que se haya realizado la instancia):

enter image description here

Ahora, simplemente haga clic en la categoría “Instancias> Basado en tiempo” y configure el calendario:

enter image description here

Hay otra herramienta basada en Java EC2 Scheduler que puede ayudarlo con este problema. Para mí, quería poner un servidor a disposición de mi equipo durante los horarios de oficina, incluso si no está siendo utilizado por nadie. Esta aplicación me ayudó a lograr este objective. Espero que esto también sea bueno para ti.

Sugeriría progtwigr el inicio de EC2 usando AWS Lambda .

Recomendación :
Consulta la sugerencia de D. Svanlund , usuario con Ace: 2000+ puntos, en este hilo del Foro AWS .

Ventaja :
No necesita nada más que un pequeño script o dos que programe. No hay instancia para iniciar, solo una invocación rápida del script que ha creado. Elija el lenguaje de progtwigción de su elección y use AWS SDK para realizar operaciones de instancia. Una solución bastante ligera,

Costo estimado :
La tarea que se ejecuta dos veces al día durante, por lo general, menos de 3 segundos con un consumo de memoria de hasta 128 MB generalmente cuesta menos de $ 0,0004 USD / mes (consulte la referencia ).

Progtwigción
En enero de 2016, los eventos progtwigdos de AWS Lambda se transformaron en AWS CloudWatch Events . Los eventos de CloudWatch tienen las mismas capacidades de progtwigción que solían tener los eventos progtwigdos de Lambda. La limitación de eventos progtwigdos de AWS Lambda de 5 eventos progtwigdos por región se ha elevado a 50 reglas de eventos de CloudWatch.

Método
Configure los tipos de EC2 adecuados para la progtwigción de inicio / detención . Recomiendo usar EC2-VPC / EBS . Crear política y rol de IAM. Relación de confianza del rol recién creado (ver referencia ).
Configure el activador de eventos de CloudWatch para Lambda a través del disparador de función como se muestra a continuación.

Eventos de CloudWatch - Horario

Aquí está el código de la función start-server, cuyo Runtime está configurado en Node.js.
Cambia YOUR_REGION y YOUR_INSTANCE_ID al tuyo desde Instance Console .

var AWS = require('aws-sdk'); exports.handler = function(event, context) { var ec2 = new AWS.EC2({region: 'YOUR_REGION'}); ec2.startInstances({InstanceIds : ['YOUR_INSTANCE_ID'] },function (err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response context.done(err,data); }); }; 

Nota: En caso de que necesite la función stop-server simplemente cambie ec2.startInstances a ec2.stopInstances . Incluso puede que no necesite la función de detención cuando usa el apagado automático por arranque EC2

Explotación florestal
Si la función IAM se crea con los permisos necesarios, la función Lambda creará AWS CloudWatch Log Stream para cada una de sus ejecuciones.

AWS CloudWatch Log Stream

Acabo de enfrentar el mismo problema y lo resolví usando la función de ajuste automático de escala como tantas de las respuestas aquí mencionadas. Lo único que necesita para eso es una imagen AMI que desea ejecutar y las herramientas de la línea de comandos de la API de ajuste automático .

Después de descargar las herramientas, siga las instrucciones en el archivo Léame para establecer las variables ambientales y agregar sus credenciales de AWS. Luego ponga los siguientes comandos en un archivo por lotes (este ejemplo es para Windows):

 as-create-launch-config --key "MYLAUNCHCONFIGNAME" --instance-type t1.micro --image-id MYAMI-IMAGEID --launch-config "MYLAUNCHCONFIGNAME" as-create-auto-scaling-group --auto-scaling-group "MYSCALINGGROUPNAME" --launch-configuration "MYLAUNCHCONFIGNAME" --availability-zones "us-east-1a,us-east-1b,us-east-1c,us-east-1d" --min-size 0 --max-size 0 rem Don't restart instance after shutdown as-suspend-processes "MYSCALINGGROUPNAME" --processes ReplaceUnhealthy rem Start instance at 22:15 as-put-scheduled-update-group-action --name "startMyInstance" --auto-scaling-group "MYSCALINGGROUPNAME" --min-size 1 --max-size 1 --recurrence "15 22 * * *" rem Stop instance at 23:05 as-put-scheduled-update-group-action --name "stopMyInstance" --auto-scaling-group "MYSCALINGGROUPNAME" --min-size 0 --max-size 0 --recurrence "05 23 * * *" 

Reemplace los nombres en mayúscula con algunos de su elección y establezca el AMI-ID correcto para su imagen AMI. Una nueva instancia basada en su imagen AMI comenzará a las 22:15 y terminará a las 23:05. Por supuesto, también puede cambiar el tipo de instancia y la zona (s) de disponibilidad.

En mi humilde opinión, agregar un cronogtwig a un grupo de escalado automático es el mejor enfoque “en la nube” como se mencionó anteriormente.

Pero en caso de que no pueda finalizar sus instancias y usar otras nuevas, por ejemplo, si tiene IP elásticas asociadas, etc.

Puede crear un script de Ruby para iniciar y detener sus instancias en función de un rango de tiempo de fecha.

 #!/usr/bin/env ruby # based on https://github.com/phstc/amazon_start_stop require 'fog' require 'tzinfo' START_HOUR = 6 # Start 6AM STOP_HOUR = 0 # Stop 0AM (midnight) conn = Fog::Compute::AWS.new(aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']) server = conn.servers.get('instance-id') tz = TZInfo::Timezone.get('America/Sao_Paulo') now = tz.now stopped_range = (now.hour >= STOP_HOUR && now.hour < START_HOUR) running_range = !stopped_range if stopped_range && server.state != 'stopped' server.stop end if running_range && server.state != 'running' server.start # if you need an Elastic IP # (everytime you stop an instance Amazon dissociates Elastic IPs) # # server.wait_for { state == 'running' } # conn.associate_address server.id, 127.0.0.0 end 

Eche un vistazo a amazon_start_stop para crear un progtwigdor de forma gratuita utilizando Heroku Scheduler .

AWS Data Pipeline es especialmente adecuado para esta tarea. Data Pipeline utiliza tecnologías AWS y se puede configurar para ejecutar comandos AWS CLI en una progtwigción establecida sin dependencias externas. Data Pipeline puede escribir registros en S3 y se ejecuta en el contexto de un rol de IAM, lo que elimina los requisitos de administración de claves. Data Pipeline también es rentable; por ejemplo, el nivel libre de Data Pipeline se puede usar para detener e iniciar instancias una vez por día.

https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/

El ajuste automático de escala parece ser la mejor solución para su problema y AWS proporciona dicha función. Si está buscando una solución de terceros como ylastic, pero no desea pagarla, la única alternativa que conozco es Scalr, donde trabajo. Scalr es de código abierto, por lo que solo tiene que descargar el código fuente e instalarlo usted mismo.

Otras alternativas incluyen RightScale y enStratus. En mi opinión, la cuenta gratuita de RightScale no incluye el escalado automático, mientras que el plan “gratuito” de enStratus carga el autoescalado a una tarifa de $ 0.20 / hora del servidor.

El mejor método gratuito que conozco es http://www.exostack.com. Lo uso para progtwigr las instancias para que se activen o desactiven en horarios establecidos, usándolo para más de 400 instancias en este momento y funciona muy bien. También tienen un progtwigdor para instantáneas e IAM que también uso para DR. También tienen un rastreador de costos ec2 bastante elegante: parece que le da un desglose mensual y anual de su costo. Bastante precisa IMO.

Amazon ahora tiene instancias reservadas progtwigdas

Instancias reservadas progtwigdas : estas instancias están disponibles para lanzarse dentro de las ventanas de tiempo que usted reserva. Esta opción le permite hacer coincidir su reserva de capacidad con un cronogtwig recurrente predecible que solo requiere una fracción de un día, una semana o un mes. Por ejemplo, si tiene una carga de trabajo predecible, como un análisis de riesgo financiero mensual, puede progtwigr que se ejecute los primeros cinco días del mes. Otro ejemplo sería progtwigr el procesamiento de facturas por noche de 4 p.m. a 12 a.m. todos los días laborables.

pero también

Plazo : las instancias reservadas progtwigdas tienen un compromiso de término de 1 año.

Opción de pago : las instancias reservadas progtwigdas acumulan cargos por hora, facturados en incrementos mensuales durante el plazo.

Leer más https://aws.amazon.com/ec2/purchasing-options/reserved-instances/

  • ¡Igual que aquí! Sorprendido de ver que Amazon no proporciona una forma integrada de simplemente progtwigr su EC2 para iniciar y detener en un momento determinado. (Bueno, no es sorprendente porque probablemente no quieran que puedas apagarlo, ¿verdad? 🙂

  • RESPUESTA : El método Auto-Scaling me pareció la mejor manera de automatizar esto y de forma gratuita, sin la necesidad de aplicaciones de terceros o un servidor independiente que funciona las 24 horas, los 7 días de la semana. Aquí se necesita una buena comprensión de AS, AMI y EC2.

    Vaya a la URL siguiente para ver cómo puede agregar “ACCIONES PROGRAMADAS” a sus grupos de escalado automático. ¡Funciona genial!

    Ahora puedo hacer que mi servidor EC2 se active a las 12 de la tarde y girar (termina realmente) a las 8 p.m. Muy genial. ¡Buena suerte!

  • A continuación se muestra una captura de pantalla de mi configuración. Esta configuración creará e iniciará un EC2 todos los días durante una hora por día. ¡ACLAMACIONES!

http://docs.aws.amazon.com/autoscaling/latest/userguide/schedule_time.html#sch-actions_rules

Acciones progtwigdas de escalado automático:

Amazon anunció recientemente dos nuevas características para lograr esto sin implementaciones personalizadas directamente como configuración de la sección AWS Web Console EC2.

  • Uso del escalamiento progtwigdo para la escala automática de la aplicación (Después de crear un grupo de escalado automático, hay una pestaña donde puede agregar reglas de escalado automático basadas en el tiempo) enter image description here

  • Reservar instancias EC2 progtwigdas (en la consola EC2, en Instancias, existe la opción de reservar instancias EC2 progtwigdas) enter image description here