virginia servidores instancia eliminar ec2 east aws api amazon-ec2 amazon-web-services

api - servidores - Apagado automático e iniciar la instancia de Amazon EC2



eliminar instancia amazon ec2 (13)

¿Puedo iniciar y finalizar automáticamente mi instancia de Amazon utilizando la API de Amazon? ¿Puedes describir cómo se puede hacer esto? Lo ideal sería comenzar la instancia y detener la instancia en intervalos de tiempo específicos todos los días.


AWS Data Pipeline funciona bien. https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/

Si desea excluir días de inicio (por ejemplo, fin de semana), agregue un objeto ShellCommandPrecondition.

En AWS Console / Data Pipeline, cree una nueva canalización. Es fácil editar / importar una definición (JSON)

{ "objects": [ { "failureAndRerunMode": "CASCADE", "schedule": { "ref": "DefaultSchedule" }, "resourceRole": "DataPipelineDefaultResourceRole", "role": "DataPipelineDefaultRole", "pipelineLogUri": "s3://MY_BUCKET/log/", "scheduleType": "cron", "name": "Default", "id": "Default" }, { "name": "CliActivity", "id": "CliActivity", "runsOn": { "ref": "Ec2Instance" }, "precondition": { "ref": "PreconditionDow" }, "type": "ShellCommandActivity", "command": "(sudo yum -y update aws-cli) && (#{myAWSCLICmd})" }, { "period": "1 days", "startDateTime": "2015-10-27T13:00:00", "name": "Every 1 day", "id": "DefaultSchedule", "type": "Schedule" }, { "scriptUri": "s3://MY_BUCKET/script/dow.sh", "name": "DayOfWeekPrecondition", "id": "PreconditionDow", "type": "ShellCommandPrecondition" }, { "instanceType": "t1.micro", "name": "Ec2Instance", "id": "Ec2Instance", "type": "Ec2Resource", "terminateAfter": "50 Minutes" } ], "parameters": [ { "watermark": "aws [options] <command> <subcommand> [parameters]", "description": "AWS CLI command", "id": "myAWSCLICmd", "type": "String" } ], "values": { "myAWSCLICmd": "aws ec2 start-instances --instance-ids i-12345678 --region eu-west-1" } }

Coloque el script Bash para que se descargue y ejecute como precondición en su cubo S3

#!/bin/sh if [ "$(date +%u)" -lt 6 ] then exit 0 else exit 1 fi

Al activar y ejecutar la canalización en días de fin de semana, el estado de mantenimiento de la línea de la consola de AWS indica un "ERROR" engañoso. La secuencia de comandos bash devuelve un error (salida 1) y EC2 no se inicia. En los días 1 a 5, el estado es "SALUDABLE".

Para detener EC2 automáticamente al cerrar el horario de oficina, use el comando AWS CLI diariamente sin condiciones previas.


Aunque hay formas de lograr esto utilizando la escala automática, podría no ser adecuado para todas las ocasiones, ya que termina las instancias. Los trabajos cron no funcionarán nunca en una sola instancia (aunque se pueden usar perfectamente para situaciones como detener una instancia única y programar otras instancias cuando se ejecutan muchas instancias). Puede usar llamadas API como StartInstancesRequest y StopInstancesRequest para lograr lo mismo, pero nuevamente debe confiar en un tercer recurso. Hay muchas aplicaciones para programar instancias de AWS con muchas características, pero para una solución simple, recomendaría una aplicación gratuita como snapleaf.io


AutoScaling está limitado a las instancias de terminación. Si desea detener una instancia y conservar el estado del servidor, una secuencia de comandos externa es el mejor enfoque.

Puede hacer esto ejecutando un trabajo en otra instancia que se ejecuta 24/7 o puede usar un servicio de terceros como Ylastic (mencionado anteriormente) o Rocket Peak .

Por ejemplo, en C #, el código para detener un servidor es bastante sencillo:

public void stopInstance(string instance_id, string AWSRegion) { RegionEndpoint myAWSRegion = RegionEndpoint.GetBySystemName(AWSRegion); AmazonEC2 ec2 = AWSClientFactory.CreateAmazonEC2Client(AWSAccessKey, AWSSecretKey, myAWSRegion); ec2.StopInstances(new StopInstancesRequest().WithInstanceId(instance_id)); }


Creo que la pregunta inicial fue un poco confusa. Depende de lo que Pasta necesita: 1. lanzar / terminar (almacén de instancias) - Escala automática es la solución correcta (respuesta de Nakedible) 2.Iniciar / detener la instancia de inicio de EBS - Escala automática no ayudará, yo uso scripts programados a distancia (es decir, , ec2 CLI).


En caso de que alguien tropiece con esta vieja pregunta, hoy en día puede lograr lo mismo agregando un horario a un grupo de escalado automático: aumente la cantidad de instancias en un grupo de escalado automático a 1 en ciertos momentos y disminuya a 0 luego .

Y como esta respuesta es obtener muchas vistas, pensé en enlazar a una guía muy útil sobre esto: Ejecutar instancias de EC2 en un horario recurrente con escalado automático


En mi humilde opinión, agregar un cronograma 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 programador de forma gratuita utilizando Heroku Scheduler .


Escribí el código en Python, usando la biblioteca Boto, para hacer esto. Puede ajustar esto para su propio uso. Asegúrese de ejecutar esto como parte de un trabajo cron, y luego podrá iniciar o apagar tantas instancias como necesite durante la ejecución de trabajos cron.

#!/usr/bin/python # # Auto-start and stop EC2 instances # import boto, datetime, sys from time import gmtime, strftime, sleep # AWS credentials aws_key = "AKIAxxx" aws_secret = "abcd" # The instances that we want to auto-start/stop instances = [ # You can have tuples in this format: # [instance-id, name/description, startHour, stopHour, ipAddress] ["i-12345678", "Description", "00", "12", "1.2.3.4"] ] # -------------------------------------------- # If its the weekend, then quit # If you don''t care about the weekend, remove these three # lines of code below. weekday = datetime.datetime.today().weekday() if (weekday == 5) or (weekday == 6): sys.exit() # Connect to EC2 conn = boto.connect_ec2(aws_key, aws_secret) # Get current hour hh = strftime("%H", gmtime()) # For each instance for (instance, description, start, stop, ip) in instances: # If this is the hour of starting it... if (hh == start): # Start the instance conn.start_instances(instance_ids=[instance]) # Sleep for a few seconds to ensure starting sleep(10) # Associate the Elastic IP with instance if ip: conn.associate_address(instance, ip) # If this is the hour of stopping it... if (hh == stop): # Stop the instance conn.stop_instances(instance_ids=[instance])


La empresa para la que trabajo tenía clientes que preguntaban regularmente sobre esto, así que hemos escrito una aplicación de programación gratuita de EC2 disponible aquí:

http://blog.simple-help.com/2012/03/free-ec2-scheduler/

Funciona en Windows y Mac, le permite crear múltiples programaciones diarias / semanales / mensuales y le permite usar filtros coincidentes para incluir grandes cantidades de instancias fácilmente o incluye aquellas que agrega en el futuro.


Le recomiendo que eche un vistazo a la Guía de introducción de EC2 , que le muestra cómo hacer lo que necesita con las herramientas de línea de comandos de EC2. Puede programar fácilmente esto en un trabajo cron (en Linux / UNIX) o en un trabajo programado en Windows para llamar a los comandos de inicio y detención en un momento dado.

Si desea hacer esto desde su propio código, puede usar las API SOAP o REST; mira la Guía del Desarrollador para más detalles.


No puede hacer esto automáticamente, o al menos no sin una cierta programación y manipulación de API en los archivos de script. Si desea una solución confiable para detener, reiniciar y administrar sus imágenes (presumiblemente para controlar los costos en su entorno), entonces tal vez quiera consultar LabSlice . Descargo de responsabilidad: yo trabajo para esta empresa.


Podrías mirar a Ylastic para hacer esto. La alternativa parece ser tener una máquina ejecutándose que apaga / inicia otras instancias usando un trabajo cron o una tarea programada.

Obviamente, si solo quiere una instancia, esta es una solución costosa, ya que una máquina siempre debe estar ejecutándose, y pagar ~ 80 dólares al mes por una máquina para ejecutar tareas cron no es rentable.


Puede intentar usar las herramientas de la API de Amazon EC2 directamente. En realidad, solo necesita dos comandos: ec2-start-instances y ec2-stop-instances. Asegúrese de que las variables de entorno como EC2_HOME, AWS_CREDENTIAL_FILE, EC2_CERT, EC2_PRIVATE_KEY, etc. estén configuradas correctamente y que todas las credenciales de AWS, certificados y archivos de claves privadas estén en la ubicación adecuada; puede encontrar más información en la documentación de AWS EC2 API tools.

Primero puede probar el comando con la mano y luego, cuando todo funciona bien, configure el crontab de Unix o las tareas programadas en Windows. Puede encontrar el ejemplo a continuación para el archivo Linux / etc / crontab (no olvide que todas las variables de entorno mencionadas anteriormente deben estar presentes para el usuario de ''su cuenta''.

/etc/crontab 0 8 * * * your-account ec2-start-instances <your_instance_id> 0 16 * * * your-account ec2-stop-instances <your_instance_id> # Your instance will be started at 8am and shutdown at 4pm.

Soy un desarrollador del proyecto BitNami Cloud, donde empaquetamos las herramientas AWS (incluidas las que mencioné) en un instalador gratuito y fácil de usar que puede probar: pila de paquetes de BitNami CloudTools


Si no es una misión crítica: una cosa simplista es programar el archivo por lotes para ejecutar ''SHUTDOWN'' (ventanas) a las 3 a.m. todos los días. Entonces, al menos, no corre el riesgo de dejar accidentalmente una instancia no deseada ejecutándose indefinidamente.

¡Obviamente, esto es solo la mitad de la historia!