Script de Bash para ejecutar comandos de la Cli de AWS en paralelo para reducir el tiempo de

0

Pregunta

lo siento, soy nueva en bash scripting. Tengo alrededor de 10000 instancia de EC2, he creado este script en bash para cambiar mi instancia de EC2 tipo, todos los nombre de instancia y el tipo se almacenan en un archivo. el código está trabajando, pero está tomando tanto tiempo para que se ejecute a través de la instancia, por ejemplo.

¿alguno tiene sabe si puedo ejecutar comandos de la Cli de AWS en todas las instancia de EC2 de una vez ? Gracias :)

#!/bin/bash

my_file='test.txt'

declare -a instanceID
declare -a fmo #Future Instance Size

while IFS=, read -r COL1 COL2; do

   instanceID+=("$COL1")
   fmo+=("$COL2")   

done <"$my_file"

len=${#instanceID[@]}

for (( i=0; i < $len; i++)); do

   vm_instance_id="${instanceID[$i]}"
   vm_type="${fmo[$i]}"

   echo Stoping $vm_instance_id
   aws ec2 stop-instances --instance-ids $vm_instance_id

   echo " Waiting for $vm_instance_id state to be STOP "
   aws ec2 wait instance-stopped --instance-ids $vm_instance_id


   echo Resizing $vm_instance_id to $vm_type 
   aws ec2 modify-instance-attribute --instance-id $vm_instance_id --instance-type $vm_type
   


   echo Starting $vm_instance_id 
   aws ec2 start-instances --instance-ids $vm_instance_id
    

done
automation aws-automation aws-cli bash
2021-11-23 09:52:30
2

Mejor respuesta

1

Refactorizar el código para una función que se pasa de una línea del archivo.

work() {
   IFS=, read -r instanceID fmo <<<"$1"
   stuff "$instanceID" "$fmo"
}

Ejecutar GNU xargs o GNU paralelo para cada línea del archivo que se llama a la función exportada. Uso -P opción de ejecutar la función en paralelo, consulte la documentación.

export -f work
xargs -P0 -t bash -c 'work "$@"' -- <"$my_file"
2021-11-23 10:03:16
0

Como @KamilCuk señalado aquí, usted puede fácilmente hacer esta carrera en paralelo. Sin embargo, Si ejecuta esta secuencia de comandos en paralelo, usted podría terminar encima de conseguir estrangulado por EC2, así que asegúrese de incluir algunos de retroceso + lógica de reintento y el respeto de los límites especificados aquí https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html

2021-11-25 06:11:48

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................