Aller au contenu
Cloud medium

AWS CLI : premiers pas et commandes essentielles

18 min de lecture

AWS CLI vous permet de gérer vos ressources AWS depuis le terminal. En 3 commandes, vous saurez si tout fonctionne : installer, se connecter, vérifier son identité. Ce guide vous accompagne pas à pas, du premier aws --version jusqu’à l’automatisation de vos tâches quotidiennes.

Niveau : Débutant · Durée : 20 minutes · Prérequis : savoir utiliser un terminal

À la fin de ce guide, vous saurez :

  • Installer AWS CLI et vérifier votre identité
  • Lister vos ressources S3 et EC2
  • Filtrer les résultats pour n’afficher que l’essentiel
  • Éviter les erreurs de débutant (mauvais compte, mauvaise région)
  1. Installer : téléchargez et installez AWS CLI v2
  2. Configurer : aws configure avec vos clés d’accès
  3. Vérifier : aws sts get-caller-identity pour confirmer votre identité
  4. Lister : aws s3 ls pour voir vos buckets
  5. Explorer : aws ec2 describe-regions --output table pour un premier résultat lisible
Fenêtre de terminal
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Vérifiez l’installation :

Fenêtre de terminal
aws --version
Résultat attendu
aws-cli/2.x.x Python/3.x.x Linux/... exe/x86_64

L’autocomplétion vous fait gagner un temps considérable : tapez aws ec2 des puis Tab, et AWS CLI complète automatiquement en aws ec2 describe-. Cela vous permet aussi de découvrir les commandes disponibles en tapant Tab Tab après un service.

Fenêtre de terminal
# Trouver le chemin de aws_completer
which aws_completer
# Activer l'autocomplétion
echo 'complete -C /usr/local/bin/aws_completer aws' >> ~/.bashrc
# Recharger la configuration
source ~/.bashrc

Tester : tapez aws s3 puis Tab Tab → vous devriez voir cp, ls, mb, mv, rb, rm, sync

Lancez l’assistant de configuration :

Fenêtre de terminal
aws configure

L’assistant vous demande 4 informations :

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-west-3
Default output format [None]: json
ChampOù le trouverExemple
Access Key IDConsole AWS → IAM → Utilisateurs → Clés d’accèsAKIA...
Secret Access KeyAffiché UNE SEULE fois à la créationwJalr...
Regioneu-west-3 pour Pariseu-west-3
Output formatjson (défaut) ou table (lisible)json

Méthode moderne : SSO (recommandé en entreprise)

Section intitulée « Méthode moderne : SSO (recommandé en entreprise) »

Si votre entreprise utilise AWS IAM Identity Center (ex-SSO) :

Fenêtre de terminal
aws configure sso

L’assistant ouvre votre navigateur pour l’authentification. Une fois validé, vous pouvez vous reconnecter avec :

Fenêtre de terminal
aws sso login --profile mon-profil-sso

Étape 3 — Vérifier son identité (le “whoami” AWS)

Section intitulée « Étape 3 — Vérifier son identité (le “whoami” AWS) »

Avant toute commande potentiellement destructrice, vérifiez sur quel compte vous travaillez :

Fenêtre de terminal
aws sts get-caller-identity
Résultat
{
"UserId": "AIDAUA4AJK645ULWSPQ3I",
"Account": "276757567417",
"Arn": "arn:aws:iam::276757567417:user/stephane_robert"
}

Ce résultat vous confirme :

  • Account : le numéro du compte AWS (vérifiez que c’est le bon !)
  • Arn : votre identité (utilisateur IAM, rôle assumé, etc.)
Fenêtre de terminal
# 1. Sur quel compte suis-je ?
aws sts get-caller-identity
# 2. Quelle configuration est active ?
aws configure list
# 3. Y a-t-il une variable d'environnement qui override ?
echo $AWS_PROFILE
env | grep AWS_

Étape 4 — Vos premières commandes (lister des ressources)

Section intitulée « Étape 4 — Vos premières commandes (lister des ressources) »

Maintenant que vous êtes connecté, explorons vos ressources. Vous allez lancer 4 commandes qui vous permettront de comprendre comment AWS CLI fonctionne.

Avant de commencer, comprenons la logique. Toutes les commandes AWS CLI suivent le même schéma : vous dites à AWS quel service vous voulez interroger (S3, EC2, IAM…) et quelle action effectuer (lister, créer, supprimer…).

🧠 Modèle mental — aws = une commande, un service, une action

Toutes les commandes AWS CLI suivent le même schéma : vous indiquez le service (s3, ec2, iam...) puis l'action à effectuer. La réponse arrive en JSON par défaut.

Structure d'une commande AWS CLI : aws + service + action + options

Points clés

  • Toujours la même structure : aws <service> <action>
  • La sortie est en JSON par défaut (--output table pour du lisible)
  • Chaque commande cible UNE région (eu-west-3 = Paris)

Règles d'or

1
Toujours vérifier sur quel compte on travaille aws sts get-caller-identity évite de supprimer des ressources en production
2
Ne jamais mettre ses clés dans le code Les credentials dans Git = compte compromis en quelques minutes

Vocabulaire essentiel

Région
Zone géographique AWS (eu-west-3 = Paris)
Profil
Configuration nommée pour un compte AWS
ARN
Identifiant unique d'une ressource AWS
Fenêtre de terminal
aws [options] <service> <action> [paramètres]
aws [options] <service> help # Aide sur un service
aws [options] <service> <action> help # Aide sur une action

La commande aws suit toujours la même logique :

PartieQuestionExemplesObligatoire ?
ServiceQuel service AWS interroger ?s3, ec2, iam, rds, lambda✅ Oui
ActionQue faire sur ce service ?ls, describe-instances, create-bucket✅ Oui
Options/ParamètresComment filtrer ou formater ?--output table, --region eu-west-3, --filters❌ Non (valeurs par défaut)

Service — Le service AWS que vous voulez interroger (S3 pour le stockage, EC2 pour les machines virtuelles, IAM pour les accès…). AWS CLI couvre 200+ services.

Action — L’opération à effectuer : lister (ls, describe-*, list-*), créer (create-*), supprimer (delete-*, terminate-*), modifier (update-*, modify-*).

Options/Paramètres (optionnels) — Modifient le comportement : changer la région, le format de sortie, filtrer les résultats. Sans options, AWS utilise les valeurs de ~/.aws/config.

Exemple concret :

Fenêtre de terminal
# Service=ec2, Action=describe-instances, Options=--output table
aws ec2 describe-instances --output table
# ↑ ↑ ↑
# service action options

Options globales principales :

OptionDescriptionExemple
--profile NOMUtilise un profil spécifiqueaws s3 ls --profile production
--region REGIONForce une régionaws ec2 describe-instances --region eu-west-3
--output FORMATFormat de sortie (json/table/text/yaml)aws s3 ls --output table
--query EXPRFiltre les résultats (JMESPath)aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId'
--filters NAME=X,Values=YFiltre côté serveuraws ec2 describe-instances --filters 'Name=instance-state-name,Values=running'

voici des exemples concrets de commandes AWS CLI courantes :

Fenêtre de terminal
# Forme minimale : service + action
aws s3 ls
# Avec paramètres
aws s3 ls s3://mon-bucket
# Avec options globales
aws ec2 describe-instances --output table --region eu-west-3
# Avec filtrage serveur
aws ec2 describe-instances --filters 'Name=instance-state-name,Values=running'
# Avec filtrage client (--query)
aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name]'
# Avec profil
aws s3 ls --profile production
# Depuis un pipe (moins courant)
echo "mon-bucket" | xargs -I {} aws s3 ls s3://{}

AWS propose plus de 200 services (RDS, Lambda, IAM, CloudWatch, DynamoDB…). Il est impossible de tous les documenter dans un seul guide. Mais la bonne nouvelle, c’est que vous savez déjà chercher.

Règle d’or : sur AWS CLI, 90% des services suivent les mêmes conventions :

  • describe-* ou list-* pour lire
  • create-* pour créer
  • delete-* ou terminate-* pour supprimer
  • update-* ou modify-* pour modifier

Trois techniques pour explorer un nouveau service :

  1. Lister les commandes disponibles avec help

    Fenêtre de terminal
    # Voir tous les services disponibles
    aws help
    # Voir toutes les actions d'un service
    aws rds help

    Appuyez sur q pour quitter l’aide. Utilisez / pour chercher un mot-clé.

  2. Utiliser l’auto-complétion pour découvrir

    Si vous avez activé l’autocomplétion (voir section “Confort”), tapez aws puis Tab Tab pour voir tous les services :

    Fenêtre de terminal
    aws <Tab><Tab>
    # Affiche : s3, ec2, rds, lambda, iam, cloudwatch...

    Puis sur un service :

    Fenêtre de terminal
    aws rds <Tab><Tab>
    # Affiche : describe-db-instances, create-db-instance, delete-db-instance...
  3. Activer l’autoprompt interactif

    L’autoprompt vous guide en temps réel avec des suggestions contextuelles :

    Fenêtre de terminal
    aws rds --cli-auto-prompt

    Utilisez les flèches pour naviguer, Tab pour compléter, F3 pour voir la doc de l’option sélectionnée.

Maintenant que vous savez explorer, passons au filtrage pour rendre ces sorties exploitables.

Le JSON retourné par AWS peut être volumineux. Deux méthodes pour n’afficher que l’essentiel.

Pour un affichage lisible immédiat :

Fenêtre de terminal
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType]' \
--output table
Résultat
-----------------------------------------
| DescribeInstances |
+----------------------+---------+------+
| i-0abc123def456 | running | t3.micro |
| i-0def789abc012 | stopped | t3.small |
+----------------------+---------+------+

Les filtres --filters sont traités par AWS avant l’envoi des données. Plus rapide pour les gros listings :

Fenêtre de terminal
# Uniquement les instances en cours d'exécution
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"

Commencez simple, puis affinez :

Fenêtre de terminal
# 1. Extraire UN champ
aws ec2 describe-regions --query 'Regions[].RegionName'
# 2. Extraire DEUX champs
aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name]'
# 3. Filtrer + extraire
aws ec2 describe-instances \
--query 'Reservations[].Instances[?State.Name==`running`].InstanceId' \
--output text

Si vous travaillez avec plusieurs comptes AWS (dev, staging, prod), créez des profils séparés.

Fenêtre de terminal
aws configure --profile production
Fenêtre de terminal
aws s3 ls --profile production

Ou définissez-le pour toute la session :

Fenêtre de terminal
export AWS_PROFILE=production
aws s3 ls # utilise automatiquement "production"
Fenêtre de terminal
aws configure list-profiles

Deux fichiers dans ~/.aws/ :

~/.aws/credentials
[default]
aws_access_key_id = AKIA...
aws_secret_access_key = wJalr...
[production]
aws_access_key_id = AKIA...
aws_secret_access_key = wJalr...
~/.aws/config
[default]
region = eu-west-3
output = json
[profile production]
region = eu-west-1
output = table

Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.

Vérifier son identité Base

Confirmer le compte AWS actif avant toute action

aws sts get-caller-identity --profile production
Formule aws sts get-caller-identity
Exemple
aws sts get-caller-identity --profile production
Lister les buckets S3 Base

Voir tous les buckets du compte

aws s3 ls --profile mon-compte
Formule aws s3 ls
Exemple
aws s3 ls --profile mon-compte
Explorer un bucket Base

Voir le contenu d'un bucket avec tailles lisibles

aws s3 ls s3://mon-backup --recursive --human-readable --summarize
Formule aws s3 ls s3://BUCKET --recursive --human-readable
Exemple
aws s3 ls s3://mon-backup --recursive --human-readable --summarize
Paramètres
  • BUCKET — Nom du bucket S3
Lister les régions Base

Voir toutes les régions AWS disponibles

aws ec2 describe-regions --query 'Regions[].RegionName' --output text
Formule aws ec2 describe-regions --output table
Exemple
aws ec2 describe-regions --query 'Regions[].RegionName' --output text
Lister les instances EC2 Base

Voir les instances avec ID, état et type

aws ec2 describe-instances --output table
Formule aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name,InstanceType]' --output table
Exemple
aws ec2 describe-instances --output table
Instances en cours Base

Filtrer les instances running uniquement

aws ec2 describe-instances --filters 'Name=instance-state-name,Values=running' --query 'Reservations[].Instances[].InstanceId' --output text
Formule aws ec2 describe-instances --filters 'Name=instance-state-name,Values=running'
Exemple
aws ec2 describe-instances --filters 'Name=instance-state-name,Values=running' --query 'Reservations[].Instances[].InstanceId' --output text
Lister les utilisateurs IAM Base

Voir tous les utilisateurs du compte

aws iam list-users --query 'Users[].[UserName,CreateDate]' --output table
Formule aws iam list-users --output table
Exemple
aws iam list-users --query 'Users[].[UserName,CreateDate]' --output table
Voir la config active Base

Diagnostic : quelle config est utilisée ?

aws configure list --profile production
Formule aws configure list
Exemple
aws configure list --profile production
Lister les profils Base

Voir tous les profils configurés

aws configure list-profiles
Formule aws configure list-profiles
Exemple
aws configure list-profiles
Utiliser un profil Base

Exécuter une commande sur un autre compte

aws s3 ls --profile production
Formule aws COMMAND --profile PROFILE
Exemple
aws s3 ls --profile production
Paramètres
  • PROFILE — Nom du profil dans ~/.aws/config
Alternative : export AWS_PROFILE=production

Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.

Exécuter sur le mauvais compte

aws ec2 terminate-instances --instance-ids i-xxx

Danger
Le piège : aws ec2 terminate-instances --instance-ids i-xxx
Symptôme : Instance de production supprimée au lieu de dev
Cause : Le profil par défaut pointe vers production
Correction : Toujours vérifier avec aws sts get-caller-identity avant une commande destructrice
aws sts get-caller-identity && aws ec2 terminate-instances --instance-ids i-xxx --profile dev
Credentials dans Git

Fichier .env ou code avec aws_access_key_id = AKIA...

Danger
Le piège : Fichier .env ou code avec aws_access_key_id = AKIA...
Symptôme : Compte AWS compromis, factures astronomiques
Cause : Clés commitées dans le repo, scannées par des bots en quelques minutes
Correction : Utiliser ~/.aws/credentials ou des variables d'environnement, jamais dans le code
Région non configurée

aws ec2 describe-instances

Attention
Le piège : aws ec2 describe-instances
Symptôme : You must specify a region ou résultats vides
Cause : Pas de région par défaut dans ~/.aws/config
Correction : Ajouter --region eu-west-3 ou configurer une région par défaut
aws ec2 describe-instances --region eu-west-3
Variable d'environnement oubliée

export AWS_PROFILE=prod (fait il y a 2 heures)

Attention
Le piège : export AWS_PROFILE=prod (fait il y a 2 heures)
Symptôme : Commandes exécutées sur le mauvais compte malgré --profile dev
Cause : AWS_ACCESS_KEY_ID ou AWS_PROFILE dans l'environnement a priorité
Correction : Vérifier avec env | grep AWS_ et unset les variables indésirables
env | grep AWS_ && unset AWS_PROFILE AWS_ACCESS_KEY_ID

Par défaut, AWS CLI ouvre less pour les longues sorties. Pour désactiver :

Fenêtre de terminal
# Ponctuel
aws s3 ls --no-cli-pager
# Permanent (dans ~/.aws/config)
[default]
cli_pager =
# Ou via variable d'environnement
export AWS_PAGER=""
Fenêtre de terminal
# Trouver le chemin
which aws_completer
# Bash
echo 'complete -C /usr/local/bin/aws_completer aws' >> ~/.bashrc
source ~/.bashrc
# Zsh
echo 'autoload bashcompinit && bashcompinit' >> ~/.zshrc
echo 'complete -C /usr/local/bin/aws_completer aws' >> ~/.zshrc
source ~/.zshrc

L’autoprompt suggère les commandes et options en temps réel :

Fenêtre de terminal
# Activer ponctuellement
aws ec2 --cli-auto-prompt
# Activer par défaut
export AWS_CLI_AUTO_PROMPT=on

Utilisez les flèches pour naviguer, Tab pour compléter, F3 pour la doc.

FormatUsageExemple
jsonScripts, parsing avec jq--output json
tableLecture humaine--output table
textScripts shell simples--output text
yamlLisibilité, configs--output yaml
Fenêtre de terminal
# Comparer les formats
aws ec2 describe-regions --output json
aws ec2 describe-regions --output table
aws ec2 describe-regions --query 'Regions[].RegionName' --output text

📋 Cheatsheet aws


Annexe : endpoints personnalisés (clouds compatibles)

Section intitulée « Annexe : endpoints personnalisés (clouds compatibles) »

AWS CLI fonctionne avec tout service compatible S3/EC2 :

Fenêtre de terminal
# S3 vers MinIO local
aws s3 ls --endpoint-url http://localhost:9000
# S3 vers Outscale
aws s3 ls --endpoint-url https://oos.eu-west-2.outscale.com --profile outscale

Configuration permanente dans ~/.aws/config :

~/.aws/config
[profile outscale-s3]
region = eu-west-2
output = json
services = outscale-services
[services outscale-services]
s3 =
endpoint_url = https://oos.eu-west-2.outscale.com
ec2 =
endpoint_url = https://fcu.eu-west-2.outscale.com
Service OutscaleEndpoint
S3 (OOS)https://oos.{region}.outscale.com
EC2 (FCU)https://fcu.{region}.outscale.com

Créez des raccourcis dans ~/.aws/cli/alias :

~/.aws/cli/alias
[toplevel]
whoami = sts get-caller-identity
ls-buckets = s3 ls
ls-instances = ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name,InstanceType]' --output table

Utilisation :

Fenêtre de terminal
aws whoami
aws ls-buckets
aws ls-instances
~/.aws/cli/alias
[toplevel]
myip =
!f() {
curl -s https://ifconfig.me
}; f
authorize-my-ip =
!f() {
ip=$(curl -s https://ifconfig.me)
aws ec2 authorize-security-group-ingress --group-id ${1} --cidr $ip/32 --protocol tcp --port 22
}; f

Pour diagnostiquer les erreurs d’authentification :

Fenêtre de terminal
aws sts get-caller-identity --debug 2>&1 | head -50

Certaines commandes EC2 supportent --dry-run :

Fenêtre de terminal
aws ec2 run-instances --dry-run --image-id ami-xxx --instance-type t3.micro

Pour les gros listings :

Fenêtre de terminal
# Désactiver la pagination automatique
aws ec2 describe-instances --no-paginate
# Limiter le nombre de résultats
aws iam list-users --max-items 100

Pour les commandes complexes :

Fenêtre de terminal
aws ec2 run-instances --generate-cli-skeleton > instance-params.json
# Éditez le fichier, puis :
aws ec2 run-instances --cli-input-json file://instance-params.json

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.