Bash Script à exécuter AWS commande Cli en parallèle pour réduire le temps de

0

La question

désolé, je suis encore nouveau à l'écriture de scripts bash. J'ai autour de 10000 instance EC2, j'ai créé ce script bash pour changer mon instance EC2 type de nom de l'instance et le type sont stockées dans un fichier. le code fonctionne mais c'est si long à exécuter par exemple par exemple.

n'importe quel sait si je peux courir AWS commande Cli sur tous instance EC2 en une seule fois ? Merci :)

#!/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

La meilleure réponse

1

Restructurer le code d'une fonction qui est passé d'une ligne dans le fichier.

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

GNU xargs ou GNU parallèle pour chaque ligne de fichier qui appelle la fonction exportée. Utilisation -P option exécuter la fonction en paralèlle, voir la documentation.

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

Comme @KamilCuk de relever ici, vous pouvez facilement faire cela s'exécuter en parallèle. Toutefois, Si vous exécutez ce script en parallèle, vous pourriez finir par avoir étranglé par EC2, alors assurez-vous d'inclure certains interruption + logique de nouvelle tentative pour le respect de la limite spécifiée ici https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html

2021-11-25 06:11:48

Dans d'autres langues

Cette page est dans d'autres langues

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