Aller au contenu principal

Maîtrisez l'utilisation de la CLI AWS

· 5 minutes de lecture
Stéphane ROBERT
Consultant 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

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.