L'automatisation du déploiement des calculs sur une plate-forme telle que AWS est un enjeu important pour gagner en productivité dans les études de Mécanique des Fluides Numériques (MFN). Il s'agit en effet d'utiliser le temps facturé au développement du modèle et non à la gestion de sessions en ligne de commande, qu'il est difficile de se remémorer lorsqu'elles sont pratiquées épisodiquement.
EIF-services a donc testé avec succès la procédure décrite ici:
- configuration initiale dans la console AWS (interface web, c'est-à-dire manuellement via un navigateur);
- écriture d'un script permettant de (i) démarrer une instance Ubuntu sur AWS, (ii) s'y connecter et (iii) libérer les ressources une fois le travail terminé. Vous trouverez ce script bash ci-dessous.
Il s'agit d'une étape importante sur le route menant à la MFN sur AWS. Le script a notamment été utilisé plusieurs semaines après son développement, alors que les options de la commande aws
avaient été complètement oubliés par l'opérateur.
N.B. Le script suivant est compatible avec l'offre 12 mois gratuits de AWS, à condition bien sûr de ne pas oublier de libérer les ressources AWS (-t
).
#!/usr/bin/env bash
usage() {
cat << HEREDOC
Usage: ubuntu4aws.sh (-h|-r|-l|-t)
-h: Help
-r: Run instance
-l: Log in
-t: Terminate
N.B. Assuming table output (aws configure).
HEREDOC
}
INSTANCE_ID=''
IP_ADDRESS=''
get_id_ip() {
if [ -e $OUT1 ]; then
INSTANCE_ID=$(awk '$0~"InstanceId"{print $4}' < $OUT1)
[ -e $OUT2 ] || aws ec2 describe-instances --instance-ids $INSTANCE_ID > $OUT2
IP_ADDRESS=$(awk '$0~"PublicIpAddress"{print $4}' < $OUT2)
else
echo "Instance not started yet!"; exit 0
fi
}
AMI_ID=ami-045a8ab02aadf4f88
INSTANCE_TYPE=t2.micro
SECURITY_GROUP=launch-wizard-1
SSH_PAIR=EC2#2
PRIVATE_KEY=~/EIF/AWS/credentials/EC2#2.pem
OUT1=~/tmp/out1.txt
OUT2=~/tmp/out2.txt
while getopts 'hrlt' option; do
case $option in
h) usage; exit 0;;
r) if [ -e $OUT1 ]; then
echo "Instance already running."; exit 0
else
aws ec2 run-instances --image-id $AMI_ID --instance-type $INSTANCE_TYPE \
--security-groups $SECURITY_GROUP --key-name $SSH_PAIR > $OUT1
fi
;;
l) get_id_ip
ssh -i $PRIVATE_KEY ubuntu@$IP_ADDRESS
;;
t) get_id_ip
aws ec2 terminate-instances --instance $INSTANCE_ID
rm $OUT1 $OUT2 ~/.ssh/known_hosts
;;
?) usage; exit 1;;
esac
done