es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , ,

Answer

  1. Avatar for 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:

    aws ec2 modify-instance-attribute --instance-ids i-1234567890abcdef0,i-0987654321fedcba0 --instance-type t2.micro
    

    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:

    my_file='test.txt'
    declare -a instanceID
    declare -a fmo #Tamaño futuro de la instancia
    
    while IFS=, read -r COL1 COL2; do
       instanceID+=("$COL1")
       fmo+=("$COL2")
    done < "$my_file"
    
    vm_instance_ids=$(IFS=,; echo "${instanceID[*]}")
    vm_type="${fmo[0]}"
    
    aws ec2 modify-instance-attribute --instance-ids "$vm_instance_ids" --instance-type "$vm_type"
    

    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 array fmo.

Comments are closed.