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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »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)
TL;DR — Votre première session AWS CLI
Section intitulée « TL;DR — Votre première session AWS CLI »- Installer : téléchargez et installez AWS CLI v2
- Configurer :
aws configureavec vos clés d'accès - Vérifier :
aws sts get-caller-identitypour confirmer votre identité - Lister :
aws s3 lspour voir vos buckets - Explorer :
aws ec2 describe-regions --output tablepour un premier résultat lisible
Étape 1 — Installer AWS CLI
Section intitulée « Étape 1 — Installer AWS CLI »curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/installbrew install awscliwinget install Amazon.AWSCLIVérifiez l'installation :
aws --versionaws-cli/2.x.x Python/3.x.x Linux/... exe/x86_64Activer l'autocomplétion (recommandé)
Section intitulée « Activer l'autocomplétion (recommandé) »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.
# Trouver le chemin de aws_completerwhich aws_completer
# Activer l'autocomplétionecho 'complete -C /usr/local/bin/aws_completer aws' >> ~/.bashrc
# Recharger la configurationsource ~/.bashrcTester : tapez aws s3 puis Tab Tab → vous devriez voir cp, ls, mb, mv, rb, rm, sync...
# Activer le support des complétions Bash dans Zshecho 'autoload bashcompinit && bashcompinit' >> ~/.zshrc
# Trouver le chemin de aws_completerwhich aws_completer
# Activer l'autocomplétionecho 'complete -C /usr/local/bin/aws_completer aws' >> ~/.zshrc
# Recharger la configurationsource ~/.zshrcTester : tapez aws s3 puis Tab Tab → vous devriez voir cp, ls, mb, mv, rb, rm, sync...
Étape 2 — Se connecter à son compte AWS
Section intitulée « Étape 2 — Se connecter à son compte AWS »Méthode rapide : clés d'accès
Section intitulée « Méthode rapide : clés d'accès »Lancez l'assistant de configuration :
aws configureL'assistant vous demande 4 informations :
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLEAWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYDefault region name [None]: eu-west-3Default output format [None]: json| Champ | Où le trouver | Exemple |
|---|---|---|
| Access Key ID | Console AWS → IAM → Utilisateurs → Clés d'accès | AKIA... |
| Secret Access Key | Affiché UNE SEULE fois à la création | wJalr... |
| Region | eu-west-3 pour Paris | eu-west-3 |
| Output format | json (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) :
aws configure ssoL'assistant ouvre votre navigateur pour l'authentification. Une fois validé, vous pouvez vous reconnecter avec :
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 :
aws sts get-caller-identity{ "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.)
Checklist avant commande dangereuse
Section intitulée « Checklist avant commande dangereuse »# 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_PROFILEenv | 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.
Comment fonctionne AWS CLI ?
Section intitulée « Comment fonctionne AWS CLI ? »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.
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
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
Syntaxe complète
Section intitulée « Syntaxe complète »aws [options] <service> <action> [paramètres]aws [options] <service> help # Aide sur un serviceaws [options] <service> <action> help # Aide sur une actionLes 3 parties d'une commande AWS CLI
Section intitulée « Les 3 parties d'une commande AWS CLI »La commande aws suit toujours la même logique :
| Partie | Question | Exemples | Obligatoire ? |
|---|---|---|---|
| Service | Quel service AWS interroger ? | s3, ec2, iam, rds, lambda | ✅ Oui |
| Action | Que faire sur ce service ? | ls, describe-instances, create-bucket | ✅ Oui |
| Options/Paramètres | Comment 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 :
# Service=ec2, Action=describe-instances, Options=--output tableaws ec2 describe-instances --output table# ↑ ↑ ↑# service action optionsOptions globales
Section intitulée « Options globales »Options globales principales :
| Option | Description | Exemple |
|---|---|---|
--profile NOM | Utilise un profil spécifique | aws s3 ls --profile production |
--region REGION | Force une région | aws ec2 describe-instances --region eu-west-3 |
--output FORMAT | Format de sortie (json/table/text/yaml) | aws s3 ls --output table |
--query EXPR | Filtre les résultats (JMESPath) | aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId' |
--filters NAME=X,Values=Y | Filtre côté serveur | aws ec2 describe-instances --filters 'Name=instance-state-name,Values=running' |
Quelques commandes
Section intitulée « Quelques commandes »voici des exemples concrets de commandes AWS CLI courantes :
# Forme minimale : service + actionaws s3 ls
# Avec paramètresaws s3 ls s3://mon-bucket
# Avec options globalesaws ec2 describe-instances --output table --region eu-west-3
# Avec filtrage serveuraws 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 profilaws s3 ls --profile production
# Depuis un pipe (moins courant)echo "mon-bucket" | xargs -I {} aws s3 ls s3://{}Découvrir les services AWS par vous-même
Section intitulée « Découvrir les services AWS par vous-même »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-*oulist-*pour lirecreate-*pour créerdelete-*outerminate-*pour supprimerupdate-*oumodify-*pour modifier
Trois techniques pour explorer un nouveau service :
-
Lister les commandes disponibles avec
helpFenêtre de terminal # Voir tous les services disponiblesaws help# Voir toutes les actions d'un serviceaws rds helpAppuyez sur q pour quitter l'aide. Utilisez / pour chercher un mot-clé.
-
Utiliser l'auto-complétion pour découvrir
Si vous avez activé l'autocomplétion (voir section "Confort"), tapez
awspuis 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... -
Activer l'autoprompt interactif
L'autoprompt vous guide en temps réel avec des suggestions contextuelles :
Fenêtre de terminal aws rds --cli-auto-promptUtilisez 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.
Étape 5 — Filtrer les résultats
Section intitulée « Étape 5 — Filtrer les résultats »Le JSON retourné par AWS peut être volumineux. Deux méthodes pour n'afficher que l'essentiel.
Méthode 1 : --output table + colonnes
Section intitulée « Méthode 1 : --output table + colonnes »Pour un affichage lisible immédiat :
aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType]' \ --output table-----------------------------------------| DescribeInstances |+----------------------+---------+------+| i-0abc123def456 | running | t3.micro || i-0def789abc012 | stopped | t3.small |+----------------------+---------+------+Méthode 2 : --filters (côté serveur)
Section intitulée « Méthode 2 : --filters (côté serveur) »Les filtres --filters sont traités par AWS avant l'envoi des données. Plus rapide pour les gros listings :
# Uniquement les instances en cours d'exécutionaws ec2 describe-instances --filters "Name=instance-state-name,Values=running"Progression --query (du simple au complet)
Section intitulée « Progression --query (du simple au complet) »Commencez simple, puis affinez :
# 1. Extraire UN champaws ec2 describe-regions --query 'Regions[].RegionName'
# 2. Extraire DEUX champsaws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name]'
# 3. Filtrer + extraireaws ec2 describe-instances \ --query 'Reservations[].Instances[?State.Name==`running`].InstanceId' \ --output textÉtape 6 — Gérer plusieurs comptes (profils)
Section intitulée « Étape 6 — Gérer plusieurs comptes (profils) »Si vous travaillez avec plusieurs comptes AWS (dev, staging, prod), créez des profils séparés.
Créer un profil
Section intitulée « Créer un profil »aws configure --profile productionUtiliser un profil
Section intitulée « Utiliser un profil »aws s3 ls --profile productionOu définissez-le pour toute la session :
export AWS_PROFILE=productionaws s3 ls # utilise automatiquement "production"Lister les profils configurés
Section intitulée « Lister les profils configurés »aws configure list-profilesOù sont stockés les profils ?
Section intitulée « Où sont stockés les profils ? »Deux fichiers dans ~/.aws/ :
[default]aws_access_key_id = AKIA...aws_secret_access_key = wJalr...
[production]aws_access_key_id = AKIA...aws_secret_access_key = wJalr...[default]region = eu-west-3output = json
[profile production]region = eu-west-1output = tableRecettes du quotidien
Section intitulée « Recettes du quotidien »Ces commandes couvrent les opérations les plus fréquentes avec AWS CLI : vérifier son identité, lister ses ressources et basculer entre comptes.
Vérifier son identité
Section intitulée « Vérifier son identité »Confirmer le compte AWS actif avant toute action — le réflexe de sécurité de base.
aws sts get-caller-identity# Exempleaws sts get-caller-identity --profile productionLister les buckets S3
Section intitulée « Lister les buckets S3 »Voir tous les buckets S3 du compte.
aws s3 ls# Sur un profil donnéaws s3 ls --profile mon-compteExplorer un bucket
Section intitulée « Explorer un bucket »Voir le contenu d'un bucket avec des tailles lisibles.
aws s3 ls s3://BUCKET --recursive --human-readable# Exempleaws s3 ls s3://mon-backup --recursive --human-readable --summarizeBUCKET est le nom du bucket S3 à explorer.
Lister les régions
Section intitulée « Lister les régions »Voir toutes les régions AWS disponibles.
aws ec2 describe-regions --output table# Extraire seulement les nomsaws ec2 describe-regions --query 'Regions[].RegionName' --output textLister les instances EC2
Section intitulée « Lister les instances EC2 »Voir les instances avec leur ID, leur état et leur type.
aws ec2 describe-instances \ --query 'Reservations[].Instances[].[InstanceId,State.Name,InstanceType]' \ --output table# Vue brute complèteaws ec2 describe-instances --output tableInstances en cours d'exécution
Section intitulée « Instances en cours d'exécution »Filtrer pour ne garder que les instances running.
aws ec2 describe-instances --filters 'Name=instance-state-name,Values=running'# Extraire seulement les IDsaws ec2 describe-instances --filters 'Name=instance-state-name,Values=running' \ --query 'Reservations[].Instances[].InstanceId' --output textLister les utilisateurs IAM
Section intitulée « Lister les utilisateurs IAM »Voir tous les utilisateurs IAM du compte.
aws iam list-users --output table# Avec date de créationaws iam list-users --query 'Users[].[UserName,CreateDate]' --output tableVoir la configuration active
Section intitulée « Voir la configuration active »Diagnostiquer quelle configuration AWS CLI est réellement utilisée.
aws configure list# Sur un profil donnéaws configure list --profile productionLister les profils
Section intitulée « Lister les profils »Voir tous les profils configurés sur la machine.
aws configure list-profilesUtiliser un profil
Section intitulée « Utiliser un profil »Exécuter une commande sur un autre compte AWS.
aws COMMAND --profile PROFILE# Exempleaws s3 ls --profile productionPROFILE est le nom du profil défini dans ~/.aws/config. Pour fixer le profil sur toute la session : export AWS_PROFILE=production.
Pièges courants
Section intitulée « Pièges courants »Ces erreurs sont les plus fréquentes en début de prise en main d'AWS CLI. Plusieurs peuvent coûter cher — facture ou incident de production.
Exécuter sur le mauvais compte
Section intitulée « Exécuter sur le mauvais compte »aws ec2 terminate-instances --instance-ids i-xxxSymptôme : une instance de production est supprimée à la place d'une instance de dev.
Cause : le profil par défaut pointe vers le compte de production. Vérifiez toujours l'identité avant une commande destructrice.
aws sts get-caller-identity && \ aws ec2 terminate-instances --instance-ids i-xxx --profile devRégion non configurée
Section intitulée « Région non configurée »aws ec2 describe-instancesSymptôme : message You must specify a region, ou résultats systématiquement vides.
Cause : aucune région par défaut n'est définie dans ~/.aws/config.
aws ec2 describe-instances --region eu-west-3Credentials dans Git
Section intitulée « Credentials dans Git »Un fichier .env ou du code contient aws_access_key_id = AKIA....
Symptôme : compte AWS compromis, factures astronomiques.
Cause : des clés commitées dans le dépôt sont scannées par des bots en quelques minutes. Stockez toujours les credentials dans ~/.aws/credentials ou en variables d'environnement, jamais dans le code.
Variable d'environnement oubliée
Section intitulée « Variable d'environnement oubliée »Un export AWS_PROFILE=prod lancé deux heures plus tôt est toujours actif.
Symptôme : les commandes s'exécutent sur le mauvais compte malgré un --profile dev explicite.
Cause : AWS_ACCESS_KEY_ID ou AWS_PROFILE dans l'environnement a priorité sur le flag --profile.
env | grep AWS_ && unset AWS_PROFILE AWS_ACCESS_KEY_IDConfort au quotidien
Section intitulée « Confort au quotidien »Désactiver le pager
Section intitulée « Désactiver le pager »Par défaut, AWS CLI ouvre less pour les longues sorties. Pour désactiver :
# Ponctuelaws s3 ls --no-cli-pager
# Permanent (dans ~/.aws/config)[default]cli_pager =
# Ou via variable d'environnementexport AWS_PAGER=""Activer l'autocomplétion
Section intitulée « Activer l'autocomplétion »# Trouver le cheminwhich aws_completer
# Bashecho 'complete -C /usr/local/bin/aws_completer aws' >> ~/.bashrcsource ~/.bashrc
# Zshecho 'autoload bashcompinit && bashcompinit' >> ~/.zshrcecho 'complete -C /usr/local/bin/aws_completer aws' >> ~/.zshrcsource ~/.zshrcDécouvrir avec l'autoprompt
Section intitulée « Découvrir avec l'autoprompt »L'autoprompt suggère les commandes et options en temps réel :
# Activer ponctuellementaws ec2 --cli-auto-prompt
# Activer par défautexport AWS_CLI_AUTO_PROMPT=onUtilisez les flèches pour naviguer, Tab pour compléter, F3 pour la doc.
Formats de sortie
Section intitulée « Formats de sortie »| Format | Usage | Exemple |
|---|---|---|
json | Scripts, parsing avec jq | --output json |
table | Lecture humaine | --output table |
text | Scripts shell simples | --output text |
yaml | Lisibilité, configs | --output yaml |
# Comparer les formatsaws ec2 describe-regions --output jsonaws ec2 describe-regions --output tableaws ec2 describe-regions --query 'Regions[].RegionName' --output textAide-mémoire
Section intitulée « Aide-mémoire »À garder sous la main : les commandes de vérification, de configuration, de listing et de filtrage les plus utilisées au quotidien.
Vérification
Section intitulée « Vérification »| Syntaxe | Description |
|---|---|
aws --version | Vérifier l'installation |
aws sts get-caller-identity | Savoir sur quel compte on est connecté |
aws configure list | Voir quelle configuration est active |
Configuration
Section intitulée « Configuration »| Syntaxe | Description |
|---|---|
aws configure | Lancer l'assistant de configuration |
aws configure --profile NOM | Créer un nouveau profil |
aws configure list-profiles | Lister tous les profils |
| Syntaxe | Description |
|---|---|
aws s3 ls | Lister les buckets S3 |
aws s3 ls s3://BUCKET --recursive | Explorer le contenu d'un bucket |
aws ec2 describe-instances --output table | Lister les instances EC2 |
aws ec2 describe-regions --output table | Lister les régions AWS |
Filtrage et profils
Section intitulée « Filtrage et profils »| Syntaxe | Description |
|---|---|
--filters 'Name=X,Values=Y' | Filtrer côté serveur (rapide) |
--query 'Expression' | Filtrer côté client avec JMESPath |
--output table | Sortie en tableau lisible |
--profile NOM | Utiliser un profil spécifique |
export AWS_PROFILE=NOM | Définir le profil par défaut de la session |
Pour aller plus loin
Section intitulée « Pour aller plus loin »Annexe : endpoints personnalisés (clouds compatibles)
Section intitulée « Annexe : endpoints personnalisés (clouds compatibles) »AWS CLI fonctionne avec tout service compatible S3/EC2 :
# S3 vers MinIO localaws s3 ls --endpoint-url http://localhost:9000
# S3 vers Outscaleaws s3 ls --endpoint-url https://oos.eu-west-2.outscale.com --profile outscaleConfiguration permanente dans ~/.aws/config :
[profile outscale-s3]region = eu-west-2output = jsonservices = outscale-services
[services outscale-services]s3 = endpoint_url = https://oos.eu-west-2.outscale.comec2 = endpoint_url = https://fcu.eu-west-2.outscale.com| Service Outscale | Endpoint |
|---|---|
| S3 (OOS) | https://oos.{region}.outscale.com |
| EC2 (FCU) | https://fcu.{region}.outscale.com |
Annexe : alias et scripts (niveau intermédiaire)
Section intitulée « Annexe : alias et scripts (niveau intermédiaire) »Alias simples
Section intitulée « Alias simples »Créez des raccourcis dans ~/.aws/cli/alias :
[toplevel]whoami = sts get-caller-identityls-buckets = s3 lsls-instances = ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name,InstanceType]' --output tableUtilisation :
aws whoamiaws ls-bucketsaws ls-instancesAlias avec scripts (avancé)
Section intitulée « Alias avec scripts (avancé) »[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 }; fAnnexe : options avancées
Section intitulée « Annexe : options avancées »Mode debug
Section intitulée « Mode debug »Pour diagnostiquer les erreurs d'authentification :
aws sts get-caller-identity --debug 2>&1 | head -50Dry-run (simulation)
Section intitulée « Dry-run (simulation) »Certaines commandes EC2 supportent --dry-run :
aws ec2 run-instances --dry-run --image-id ami-xxx --instance-type t3.microPagination
Section intitulée « Pagination »Pour les gros listings :
# Désactiver la pagination automatiqueaws ec2 describe-instances --no-paginate
# Limiter le nombre de résultatsaws iam list-users --max-items 100Générer un squelette JSON
Section intitulée « Générer un squelette JSON »Pour les commandes complexes :
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