Aller au contenu

Maîtrisez l'utilisation de la CLI AWS

logo devops

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

Terminal window
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.

Terminal window
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.

Terminal window
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

Terminal window
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.
Terminal window
aws ec2 describe-instances --profile client1
  • d’exporter la variable d’environnement AWS_PROFILE.
Terminal window
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

Terminal window
aws ec2 describe-instances --filters Name=instance-state-name,Values=running

Filtrage coté client

Les requêtes utilisent la syntaxe JMESpath.

Terminal window
## 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 :

Terminal window
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 :

Terminal window
aws ec2 --cli-auto-prompt

Ou alors d’utiliser la varaible d’environnement : AWS_CLI_AUTO_PROMPT=on.

aws cli tips

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 :

Terminal window
> 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 :

Terminal window
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.

Terminal window
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 :

Terminal window
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.

Terminal window
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.