Un petit billet pour installer et configurer aux petits oignons la CLI d'AWS. En effet, il existe quelques astuces qui vont vous permettre de vous faciliter la vie avec son utilisation. Mais avant voyons comment l'installer et la configurer.
Installation de la CLI AWS
La CLI d'AWS est écrite en Python et donc il faut bien sûr l'installer
auparavant. Vous savez que j'adore l'utilisation d'asdf
qui permet d'installer
plusieurs versions d'un même outil sur ma machine et couplé avec direnv
que
du bonheur. Mais voyons ensemble comment l'installer classiquement sur les
différents OS.
Installation d'AWS CLI sur Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install -i /usr/local/aws-cli -b /usr/local/bin
aws --version
aws-cli/2.7.34 Python/3.9.11 Linux/5.15.0-56-generic exe/x86_64.ubuntu.22 prompt/off
Installation de la CLI d'AWS sur MacOS
Télécharger le package depuis votre navigateur, puis installez-le.
which aws
aws --version
aws-cli/2.7.24 Python/3.8.8 Darwin/18.7.0 botocore/2.4.5
Installation d'AWS CLI sur Windows
Télécharger le package depuis votre navigateur, et installez-le.
C:\> aws --version
aws-cli/2.7.24 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
Installation de la CLI AWS avec asdf
asdf plugin add awscli
asdf install awscli latest
asdf global awscli latest
You can now run: /home/vagrant/.asdf/installs/awscli/2.9.13/bin/aws --version
awscli 2.9.13 installation was successful!
Configuration de la CLI d'AWS
La configuration de la CLI se trouve dans le dossier ~/.aws
. Pour configurer l'accès à votre compte AWS, il suffit soit :
- d'utiliser la commande
aws configure
et d'entrer les informations demandées : AWS Acces Key ID, ... - d'éditer directement les fichiers
~/.aws/config
et~/.aws/credentials
.
Le contenu du fichier ~/.aws/config
.
[default]
region = eu-west-3
output = json
Et le ~/.aws/credentials
.
[default]
aws_access_key_id = AXXXXXXXXXXXxxxxx
aws_secret_access_key = xxxxxxxxxxxxxx
Utilisation de plusieurs profils
Il suffit d'ajouter une section dans chacun des fichiers et d'ya ajouter les informations d'authentification.
Le contenu du fichier ~/.aws/config
.
[default]
region = eu-west-3
output = json
[client1]
region = eu-west-1
output = json
Et le ~/.aws/credentials
.
[default]
aws_access_key_id = AXXXXXXXXXXXxxxxx
aws_secret_access_key = xxxxxxxxxxxxxx
[client1]
aws_access_key_id = AXXXXXXXXXXXxxxxx
aws_secret_access_key = xxxxxxxxxxxxxx
Ensuite, il suffira soit :
- d'utiliser l'option
--profile
.
aws ec2 describe-instances --profile client1
- d'exporter la variable d'environnement
AWS_PROFILE
.
export AWS_PROFILE=client1
La seconde solution à ma préférence et comme je travaille avec de multiples comptes client, l'utilisation d'asdf + direnv me facilite grandement la vie.
Quelques Tips
Filtrer les données
La CLI d'AWS possède de mode de filtrage : un coté server --filter
et un coté client --query
.
Filtrage coté server
aws ec2 describe-instances --filters Name=instance-state-name,Values=running
Filtrage coté client
Les requêtes utilisent la syntaxe JMESpath.
## POur afficher toutes les règles entrantes sur tous les groupes de sécurité :
aws ec2 describe-volumes --query 'SecurityGroups[*].IpPermissions'
## Paour afficher toutes les règles en filtrant sur le nom du groupe de sécurité :
aws ec2 describe-security-groups --query 'SecurityGroups[?GroupName==`ec2-sg`].IpPermissions'
Combiner les deux
Il est possible de combiner les deux modes :
aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[*].Instances[?VpcId==`vpc-85818eec`].InstanceType'
Utiliser l'autoprompt
Vous débutez avec l'utilisation de la CLI D'AWS et vous cherchez tout le temps les commandes et options de celle-ci ? Sachez qu'il existe un mode autoprompt
:
aws ec2 --cli-auto-prompt
Ou alors d'utiliser la varaible d'environnement : AWS_CLI_AUTO_PROMPT=on
.
Il suffit ensuite d'utiliser les touches fléchées pour sélectionner les options. De même pour retrouver une option, tapez un mot clé pour filtrer celles-ci :
> aws ec2 descrinstancetype
describe-instance-type-offerings
describe-instance-types
Dans l'image ci-dessus, vous remarquerez que qu'il est possible d'utiliser les touches de fonction [F3] pour obtenir de la documentation
Changer de pager
Par défaut la cli d'aws utilise less
pour paginer les sorties. Cela me pose des problèmes pour faire des copier/coller. Pour le désactiver, vous avez le choix d'utiliser :
- soit l'option
--no-cli-pager
. - soit via la variable
AWS_PAGER
="". - soit dans le fichier de configuration ~/.aws/config:
[default]
cli_pager=
Créer des alias
Même si je suis réfractaire à l'utilisation d'alias, sachez que la CLI d'AWS permet de créer des alias. Ses alias ne se font pas au niveau du shell, mais bien dans la configuration de la CLI.
Pour cela, il suffit de créer un fichier dans le répertoire ~/.aws/cli
se nommant alias
, dont voici un exemple de contenu :
[toplevel]
whoami = sts get-caller-identity
L'alias whoami
permet d'utiliser la commande aws whoami
au lieu de aws sts get-caller-identity
:
aws whoami
{
"UserId": "xwxxwxwxxwxxxxxx",
"Account": "11111111111",
"Arn": "arn:aws:iam::111111111:user/admuser"
}
AWS fournit un exemple de fichier alias que vous pouvez utiliser directement comme base.
cd ~/.aws/cli
rm alias
wget https://raw.githubusercontent.com/awslabs/awscli-aliases/master/alias
Utilisation de commande bash dans les alias aws-cli
Pour intégrer des commandes bash dans les alias, il faut utiliser ce format d'écriture :
aliasname =
!f() {
script content
}; f
Prenons un exemple du fichier fourni par AWS, étudions le :
myip =
!f() {
dig +short myip.opendns.com @resolver1.opendns.com
}; f
Cette commande bash
permet simplement de rechercher votre adresse ip actuelle. Comment l'intégrer dans un autre alias ? Il suffit créer des variables. Un exemple :
authorize-my-ip =
!f() {
ip=$(aws myip)
aws ec2 authorize-security-group-ingress --group-id ${1} --cidr $ip/32 --protocol tcp --port 22
}; f
L'alias allow-my-ip
permet d'ajouter une règle dans un groupe de sécurité du nom ${1} sur le port 22 du protocole tcp
.
aws authorize-my-ip sg-08b23f876523eed55
{
"Return": true,
"SecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0e365b87fcee6186c",
"GroupId": "sg-08b23f876523eed55",
"GroupOwnerId": "276757567417",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 22,
"ToPort": 22,
"CidrIpv4": "90.103.61.198/32"
}
]
}
Plus loin
Vous avez d'autres tips, alors partagez les moi je les ajouterai. Merci d'avance.