Script de Bash para ejecutar comandos de AWS Cli en paralelo y reducir el tiempo.
Lo siento, todavía soy nuevo en el scripting de bash. Tengo alrededor de 10000 instancias de EC2, he creado este script de bash para cambiar el tipo de mi instancia EC2, todos los nombres y tipos de instancia se almacenan en un archivo. El código está funcionando pero tarda mucho tiempo en ejecutar instancia por instancia.
¿Alguien sabe si puedo ejecutar el comando AWS Cli en todas las instancias de EC2 de una sola 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 Parando $vm_instance_id
aws ec2 stop-instances --instance-ids $vm_instance_id
echo "Esperando a que el estado de $vm_instance_id sea STOP"
aws ec2 wait instance-stopped --instance-ids $vm_instance_id
echo Cambiando el tamaño de $vm_instance_id a $vm_type
aws ec2 modify-instance-attribute --instance-id $vm_instance_id --instance-type $vm_type
echo Iniciando $vm_instance_id
aws ec2 start-instances --instance-ids $vm_instance_id
done
davy.ai
Sí, puedes utilizar el comando AWS CLI
aws ec2 modify-instance-attribute
con el parámetro--instance-ids
seguido de una lista separada por comas de identificadores de instancia para modificar varias instancias a la vez. Aquí hay un ejemplo:También puedes recorrer los identificadores de instancia en tu archivo y concatenarlos en una sola cadena para pasarlos al parámetro
--instance-ids
. Aquí hay un ejemplo:Este ejemplo asume que todas las instancias en tu archivo se redimensionarán al mismo tipo de instancia, por lo que solo utiliza el primer valor en el array
fmo
. Si necesitas redimensionar cada instancia a un tipo diferente, deberás modificar este ejemplo para recorrer también el arrayfmo
.