Aller au contenu

Maitrisez la CLI AWS

Mise à jour :

aws log

L’AWS CLI (Command Line Interface) est un outil incontournable pour interagir avec les services AWS depuis un terminal. Grâce à elle, on peut automatiser des tâches, déployer des ressources et gérer des environnements avec des commandes simples. C’est un gain de temps énorme pour les administrateurs systèmes, les développeurs ou toute personne qui travaille régulièrement sur AWS.

La CLI AWS a été lancée pour simplifier l’interaction avec les services Amazon Web Services via des commandes directes, sans avoir à utiliser l’interface graphique. Depuis son lancement, elle a évolué pour devenir un outil puissant, intégré aux pipelines DevOps et largement utilisé par les administrateurs systèmes. Elle a beaucoup progressé avec l’ajout de nouvelles fonctionnalités, comme la gestion de plusieurs profils, le support des requêtes JMESPath. Ces améliorations ont permis aux utilisateurs d’automatiser et de simplifier de nombreuses tâches.

L’évolution constante de la CLI AWS démontre l’importance de cet outil dans l’écosystème AWS. Par exemple, le mode autoprompt récemment ajouté permet de suggérer des commandes en temps réel, améliorant ainsi l’expérience utilisateur, surtout pour les débutants.

Installation de la CLI AWS

Pour utiliser la CLI AWS, la première étape est son installation. AWS fournit des méthodes simples pour installer l’outil sur différents systèmes d’exploitation.

  • Sous Linux : Il suffit de télécharger le binaire, de l’extraire et de le déplacer dans un répertoire accessible par le système (comme /usr/local/bin/). Une simple commande curl ou wget permet d’automatiser cela.

    Terminal window
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
  • Sous macOS : L’installation est simplifiée avec des outils comme Homebrew :

    Terminal window
    brew install awscli
  • Sous Windows : Le package d’installation est disponible sur le site d’AWS. Il suffit de le télécharger et de suivre l’assistant d’installation pour configurer la CLI.

Une autre méthode très pratique est d’utiliser asdf, un gestionnaire de versions universel. En installant la CLI AWS via asdf, vous pouvez facilement gérer plusieurs versions de la CLI et les changer au besoin. Cela s’avère particulièrement utile si vous devez utiliser une version spécifique pour des projets différents.

Après l’installation, vérifiez que tout fonctionne correctement avec la commande suivante :

Terminal window
aws --version
aws-cli/2.15.21 Python/3.11.6 Darwin/23.6.0 exe/x86_64 prompt/off

Activer l’autocomplétion pour la CLI AWS

L’autocomplétion dans la CLI AWS est une fonctionnalité très utile pour accélérer et simplifier la saisie des commandes. Elle permet de suggérer et compléter automatiquement les commandes et options valides au fur et à mesure que vous tapez. Voici comment l’activer en fonction de votre système.

  1. Installer le script d’autocomplétion : Si vous avez installé la CLI via un package (comme Homebrew sur macOS), l’autocomplétion est généralement incluse. Si vous avez installé la CLI manuellement, il vous faudra télécharger le script d’autocomplétion fourni par AWS.

    Pour vérifier que le script est disponible, exécutez cette commande :

    Terminal window
    complete -C aws_completer aws
  2. Activer l’autocomplétion de manière permanente : Vous devez ajouter cette commande à votre fichier de configuration de shell (généralement ~/.bashrc ou ~/.bash_profile pour Bash, ou ~/.zshrc pour Zsh).

    Ajoutez cette ligne à votre fichier de configuration du shell :

    Terminal window
    source /usr/local/bin/aws_completer

    Remplacez le chemin par celui qui correspond à votre installation

  3. Recharger le fichier de configuration :

    Une fois que vous avez ajouté la commande à votre fichier, rechargez-le avec :

    Terminal window
    source ~/.bashrc # ou ~/.zshrc selon votre shell
  4. Tester l’autocomplétion : Vous pouvez maintenant tester l’autocomplétion en tapant aws dans le terminal suivi de la touche Tab pour voir les suggestions de commandes.

Configurer plusieurs profils AWS

Une des fonctionnalités les plus utiles de la CLI AWS est la possibilité de configurer plusieurs profils pour gérer différents comptes AWS. Cela est particulièrement utile si vous travaillez sur plusieurs projets ou avec différents environnements (par exemple, développement, test, production).

Création des premiers profils

  1. Ouvrez votre terminal et entrez les informations d’identification pour votre premier profil (généralement par défaut) en utilisant la commande suivante :
Terminal window
aws configure

Cela vous demandera les informations suivantes :

  • AWS Access Key ID : La clé d’accès associée à votre compte.
  • AWS Secret Access Key : La clé secrète associée à cette clé d’accès.
  • Region : La région par défaut où vous allez opérer.
  • Output format : Le format de sortie par défaut, comme JSON.
  1. Pour configurer un second profil, utilisez l’option --profile :
Terminal window
aws configure --profile mon_profil

Cela crée un nouveau profil nommé “mon_profil” et enregistre les informations d’identification correspondantes dans le fichier ~/.aws/credentials.

  1. Vous pouvez ensuite utiliser différents profils pour exécuter des commandes en spécifiant le profil avec l’option --profile :
Terminal window
aws s3 ls --profile mon_profil

Configuration avancée : le fichier de configuration

Vous pouvez aussi gérer ces profils manuellement en modifiant les fichiers suivants :

  • ~/.aws/credentials : Contient les clés d’accès pour chaque profil.
  • ~/.aws/config : Contient les informations supplémentaires comme la région et les options de sortie.

Exemple de contenu dans le fichier config :

[default]
region = us-east-1
output = json
[profile mon_profil]
region = eu-west-1
output = text

En configurant ces fichiers, vous pouvez passer facilement d’un compte à un autre en fonction des projets ou des environnements. Cela rend la gestion des accès AWS plus fluide et flexible, tout en gardant une séparation claire entre les différents environnements.

Fonctionnement de la CLI AWS

La CLI AWS est un outil en ligne de commande qui permet d’interagir avec les services AWS via un terminal. Chaque commande suit une structure standard : elle commence par aws, suivi du nom du service (comme ec2, s3 etc.), puis de l’action que vous souhaitez effectuer (par exemple, describe-instances ou ls). Les paramètres et options supplémentaires, comme les filtres ou les formats de sortie, peuvent ensuite être ajoutés pour ajuster la commande.

Exemple :

Terminal window
aws s3 ls s3://mon-bucket --recursive

La CLI AWS communique directement avec les API AWS pour envoyer des requêtes et recevoir des réponses. Elle est configurée pour utiliser vos informations d’identification AWS (via aws configure) et permet également l’automatisation des tâches via des scripts. Une grande partie des interactions repose sur les fichiers de configuration et d’identification, ainsi que sur la possibilité d’affiner les résultats avec des filtres ou des requêtes JMESPath pour traiter les données directement en ligne de commande.

Le fonctionnement se décompose donc en plusieurs éléments :

  • Commandes de base : Structure des commandes pour interagir avec chaque service.
  • Options : Ajustement des commandes avec des options comme --region, --profile ou --output.
  • Filtres et requêtes : Pour réduire le volume de données renvoyées ou pour ne recevoir que les informations pertinentes.
  • Fichiers de configuration : Fichiers ~/.aws/config et ~/.aws/credentials pour gérer les profils et les informations d’identification.

Cela permet d’exécuter des commandes puissantes et d’automatiser la gestion des services AWS de manière efficace.

Utilisation avancée

Changer de pager dans la CLI AWS

Par défaut, la CLI AWS utilise less pour paginer les résultats, ce qui peut poser des problèmes si vous souhaitez facilement copier et coller des données. Heureusement, il existe plusieurs moyens de désactiver ou changer ce comportement.

  1. Utilisez l’option --no-cli-pager lors de l’exécution d’une commande :

    Terminal window
    aws s3 ls --no-cli-pager
  2. Configurez la variable d’environnement :

    Terminal window
    export AWS_PAGER=""
  3. Modifiez le fichier de configuration ~/.aws/config :

    [default]
    cli_pager=

Cela permet de désactiver complètement la pagination pour toutes les commandes.

Utiliser l’autoprompt dans la CLI AWS

Si vous débutez avec la CLI AWS et avez du mal à retenir toutes les commandes et options, le mode autoprompt peut être un excellent outil. Il vous permet de parcourir les commandes et options disponibles via une interface interactive.

Pour activer ce mode, il suffit d’ajouter l’option suivante à votre commande :

Terminal window
aws ec2 --cli-auto-prompt

Vous pouvez également définir la variable d’environnement suivante pour activer automatiquement l’autoprompt :

Terminal window
export AWS_CLI_AUTO_PROMPT=on

Lorsque vous utilisez l’autoprompt, les touches fléchées vous permettent de naviguer entre les options et vous pouvez utiliser la touche [F3] pour afficher la documentation sur les commandes.

Si vous commencez à taper aws ec2, l’autoprompt vous proposera les différentes options disponibles comme describe-instance-types ou describe-instance-type-offerings. Vous pouvez sélectionner celles dont vous avez besoin à l’aide des touches fléchées et même taper des mots-clés pour filtrer les options plus rapidement.

aws cli auto-prompt

Ce mode est particulièrement utile si vous ne connaissez pas bien la syntaxe ou si vous avez besoin de découvrir de nouvelles commandes sans consulter la documentation. Il facilite grandement l’apprentissage et l’utilisation quotidienne de la CLI AWS en fournissant des suggestions dynamiques en temps réel.

Filtrer les données dans la CLI AWS

La CLI AWS propose deux méthodes de filtrage : le filtrage côté serveur et le filtrage côté client.

Filtrage côté serveur

Le filtrage côté serveur utilise l’option --filters, ce qui permet d’affiner les résultats avant qu’ils ne soient renvoyés par AWS. Par exemple, pour obtenir la liste des instances en cours d’exécution, vous pouvez utiliser cette commande :

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

Cela permet d’obtenir uniquement les instances dont l’état est “running”.

Filtrage côté client avec JMESPath

Le filtrage côté client se fait avec l’option --query, qui utilise la syntaxe JMESPath pour traiter les données une fois qu’elles ont été récupérées. Cela vous permet de sélectionner ou d’extraire des parties spécifiques des résultats.

Par exemple, pour afficher toutes les règles entrantes des groupes de sécurité, vous pouvez utiliser la commande suivante :

Terminal window
aws ec2 describe-security-groups --query 'SecurityGroups[*].IpPermissions'

Si vous voulez filtrer en fonction du nom d’un groupe de sécurité spécifique, vous pouvez affiner cette requête :

Terminal window
aws ec2 describe-security-groups --query 'SecurityGroups[?GroupName==`ec2-sg`].IpPermissions'

Combiner les deux modes de filtrage

Il est également possible de combiner le filtrage côté serveur et côté client pour affiner encore davantage vos résultats. Par exemple, pour afficher les types d’instances en cours d’exécution dans un VPC spécifique, vous pouvez utiliser la commande suivante :

Terminal window
aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[*].Instances[?VpcId==`vpc-85818eec`].InstanceType'

Cette combinaison vous permet d’effectuer des filtres puissants et d’obtenir exactement les informations que vous recherchez. En utilisant les deux méthodes conjointement, vous gagnez en flexibilité tout en limitant les données transférées entre AWS et votre machine.

Créer des alias dans la CLI AWS

Même si je préfère éviter l’utilisation d’alias, il est bon de savoir que la CLI AWS permet de créer des alias directement dans sa configuration et non au niveau du shell. Cela permet de simplifier certaines commandes longues ou complexes.

Pour créer un alias, il suffit d’ajouter un fichier dans le répertoire ~/.aws/cli/ nommé alias. Voici un exemple simple d’alias :

[toplevel]
whoami = sts get-caller-identity

Avec cet alias, vous pouvez maintenant utiliser aws whoami au lieu de la commande complète aws sts get-caller-identity. Cela simplifie grandement la syntaxe et économise du temps, notamment lors de l’exécution de commandes fréquemment utilisées.

Terminal window
aws whoami
{
"UserId": "xwxxwxwxxwxxxxxx",
"Account": "11111111111",
"Arn": "arn:aws:iam::111111111:user/admuser"
}

Vous pouvez également télécharger un fichier d’alias prêt à l’emploi depuis AWS pour vous en servir comme base. Pour cela, utilisez cette commande :

Terminal window
cd ~/.aws/cli
rm alias
wget https://raw.githubusercontent.com/awslabs/awscli-aliases/master/alias

Utiliser des commandes Bash dans des alias

Vous pouvez également intégrer des commandes Bash dans les alias AWS pour des tâches plus complexes. Voici la structure d’écriture à respecter :

Terminal window
aliasname =
!f() {
# script bash ici
}; f

Prenons un exemple du fichier fourni par AWS. L’alias suivant permet de récupérer votre adresse IP publique :

Terminal window
myip =
!f() {
dig +short myip.opendns.com @resolver1.opendns.com
}; f

Vous pouvez combiner cet alias avec d’autres commandes AWS pour créer des alias puissants. Par exemple, voici comment créer un alias pour autoriser votre IP actuelle sur le port 22 d’un groupe de sécurité :

Terminal window
authorize-my-ip =
!f() {
ip=$(aws myip)
aws ec2 authorize-security-group-ingress --group-id ${1} --cidr $ip/32 --protocol tcp --port 22
}; f

Ainsi, lorsque vous exécutez la commande suivante, la règle est automatiquement ajoutée au groupe de sécurité spécifié :

Terminal window
aws authorize-my-ip sg-08b23f876523eed55

Ce type d’alias permet d’automatiser des tâches récurrentes, comme l’ajout dynamique de votre adresse IP dans un groupe de sécurité, ce qui est particulièrement pratique pour les environnements de développement. Vous gagnez non seulement du temps, mais vous minimisez aussi les erreurs en réduisant la complexité des commandes répétitives.

Utilisation des services compatibles avec l’API AWS

Outscale est un fournisseur de services de cloud qui propose une infrastructure compatible avec les API d’AWS. Cela signifie que vous pouvez interagir avec les services d’Outscale en utilisant la CLI AWS ou les SDK AWS, comme vous le feriez avec AWS lui-même. Cela rend la transition ou la gestion de l’infrastructure très simple si vous êtes déjà familier avec AWS.

Le cloud Outscale utilise un ensemble d’endpoints compatible avec les API d’AWS. Ces endpoints sont similaires à ceux définis dans ~/.aws/models/endpoints.json, mais dirigent vos requêtes vers l’infrastructure Outscale. Les services principaux comme EC2, S3 et EBS sont pleinement compatibles avec les API AWS, ce qui permet d’utiliser les commandes AWS standards pour gérer des instances, des volumes de stockage et des buckets sur Outscale.

{
"partitions": [
{
"defaults": {
"hostname": "{service}.{region}.{dnsSuffix}",
"protocols": ["https"],
"signatureVersions": ["v4"]
},
"dnsSuffix": "outscale.com",
"partition": "osc",
"partitionName": "Outscale",
"regionRegex": "^(cloudgouv|us|eu|ap)\\-\\w+\\-\\d+$",
"regions": {
"eu-west-2": {
"description": "EU (Paris)"
},
"cloudgouv-eu-west-1": {
"description": "CloudGouv EU (Paris)"
},
"us-east-2": {
"description": "US East (NY)"
},
"us-west-1": {
"description": "US West (California)"
},
"ap-northeast-1": {
"description": "Japan (Tokyo)"
}
},
"services": {
"ec2": {
"endpoints": {
"eu-west-2": { "hostname": "fcu.eu-west-2.outscale.com" },
"cloudgouv-eu-west-1": {
"hostname": "fcu.cloudgouv-eu-west-1.outscale.com"
},
"us-east-2": { "hostname": "fcu.us-east-2.outscale.com" },
"us-west-1": { "hostname": "fcu.us-west-1.outscale.com" },
"ap-northeast-1": { "hostname": "fcu.ap-northeast-1.outscale.com" }
}
},
"elasticloadbalancing": {
"endpoints": {
"eu-west-2": { "hostname": "lbu.eu-west-2.outscale.com" },
"cloudgouv-eu-west-1": {
"hostname": "lbu.cloudgouv-eu-west-1.outscale.com"
},
"us-east-2": { "hostname": "lbu.us-east-2.outscale.com" },
"us-west-1": { "hostname": "lbu.us-west-1.outscale.com" },
"ap-northeast-1": { "hostname": "lbu.ap-northeast-1.outscale.com" }
}
},
"iam": {
"endpoints": {
"eu-west-2": { "hostname": "eim.eu-west-2.outscale.com" },
"cloudgouv-eu-west-1": {
"hostname": "eim.cloudgouv-eu-west-1.outscale.com"
},
"us-east-2": { "hostname": "eim.us-east-2.outscale.com" },
"us-west-1": { "hostname": "eim.us-west-1.outscale.com" },
"ap-northeast-1": { "hostname": "eim.ap-northeast-1.outscale.com" }
}
},
"directconnect": {
"endpoints": {
"eu-west-2": { "hostname": "directlink.eu-west-2.outscale.com" },
"cloudgouv-eu-west-1": {
"hostname": "directlink.cloudgouv-eu-west-1.outscale.com"
},
"us-east-2": { "hostname": "directlink.us-east-2.outscale.com" },
"us-west-1": { "hostname": "directlink.us-west-1.outscale.com" }
}
},
"s3": {
"endpoints": {
"eu-west-2": { "hostname": "oos.eu-west-2.outscale.com" },
"cloudgouv-eu-west-1": {
"hostname": "oos.cloudgouv-eu-west-1.outscale.com"
},
"us-east-2": { "hostname": "oos.us-east-2.outscale.com" },
"us-west-1": { "hostname": "oos.us-west-1.outscale.com" }
}
}
}
}
],
"version": 3
}

Ce fichier JSON est un fichier de configuration pour la compatibilité des services Outscale avec l’API AWS. Il définit les endpoints spécifiques utilisés pour interagir avec les services d’Outscale dans différentes régions. Voici une explication plus détaillée de chaque section du fichier :

La section partitions :

  • partitions : Ce fichier contient une seule partition nommée “osc” (Outscale). Une partition correspond à une grande infrastructure (comme AWS, GovCloud, ou dans ce cas Outscale) qui héberge des services dans plusieurs régions.

  • defaults : Cette section spécifie la structure par défaut pour construire les hostnames des services. Elle utilise des variables comme {service}, {region} et {dnsSuffix} pour générer automatiquement les URL des endpoints.

    • hostname : L’URL par défaut de chaque service est construite avec le format {service}.{region}.{dnsSuffix}. Par exemple, pour EC2 dans la région “eu-west-2”, cela donnerait fcu.eu-west-2.outscale.com.
    • protocols : Spécifie les protocoles supportés, ici uniquement HTTPS.
    • signatureVersions : Définit la version de la signature d’authentification. Ici, c’est la version 4 (v4), utilisée par AWS et Outscale pour sécuriser les requêtes.
  • dnsSuffix : Le suffixe DNS utilisé pour tous les services est outscale.com.

  • partitionName : Nom de la partition, ici “Outscale”.

  • regionRegex : Un regex qui spécifie le format des noms de régions compatibles. Les régions incluent des préfixes comme cloudgouv, us, eu, et ap (Asie-Pacifique), suivis d’un code spécifique.

La section regions énumère les différentes régions disponibles dans cette partition. Chaque région est associée à une description :

  • eu-west-2 : EU (Paris)
  • cloudgouv-eu-west-1 : CloudGouv EU (Paris)
  • us-east-2 : US East (New York)
  • us-west-1 : US West (Californie)
  • ap-northeast-1 : Japon (Tokyo)

La section services contient une liste de services compatibles avec l’API AWS, ainsi que leurs endpoints spécifiques par région. Voici quelques exemples :

  • EC2 (fcu) : Pour chaque région, comme eu-west-2, l’endpoint est défini par l’URL correspondante : fcu.eu-west-2.outscale.com.
  • Elastic Load Balancing (lbu) : De même, l’endpoint pour le service de load balancing dans eu-west-2 est lbu.eu-west-2.outscale.com.
  • IAM (eim), DirectConnect (directlink) et S3 (oos) suivent une structure similaire.

Une fois configuré, vous pouvez exécuter des commandes comme celles-ci :

Terminal window
aws ec2 describe-instances --profile outscale

Cela fonctionnera exactement comme avec AWS, mais avec les services d’Outscale.