L'AWS Command Line Interface (CLI) est un outil unifié pour gérer vos services AWS. Avec un seul outil à télécharger et à configurer, vous pouvez contrôler plusieurs services AWS à partir de la ligne de commande et les automatiser via des scripts. Cet article explique comment utiliser l'AWS CLI pour gérer les compartiments et les objets Amazon S3 avec de nombreux exemples que vous pouvez utiliser au cours de vos activités AWS quotidiennes.
En plus de l'AWS CLI, nous vous recommandons fortement d'installer aws-shell. Ce programme shell de ligne de commande fournit des fonctionnalités pratiques et de productivité pour aider les utilisateurs débutants et avancés de l'interface de ligne de commande AWS. Les principales fonctionnalités sont les suivantes :
- Saisie semi-automatique floue pour les commandes, les options et les ressources de l'AWS CLI
- Documentation dynamique en ligne
- Exécution des commandes du shell du système d'exploitation
- Exporter les commandes exécutées vers un éditeur de texte
Enfin, nous vous recommandons d'installer le plug-in Session Manager pour l'AWS CLI, qui vous permet d'utiliser l'AWS Command Line Interface (AWS CLI) pour démarrer et terminer les sessions qui vous connectent à vos instances EC2.
Installation de l'AWS CLI
Vous pouvez installer l'AWS CLI sur Windows, macOS et Linux. En plus de cela, Amazon Linux AMI contient déjà AWS CLI dans le cadre de la distribution du système d'exploitation, vous n'avez donc pas à l'installer manuellement.
Windows
Pour les distributions Windows modernes, nous vous recommandons d'utiliser le gestionnaire de packages Chocolatey pour installer l'AWS CLI :
# AWS CLI
choco install awscli
# Session Manager plugin
choco install awscli-session-manager
# AWS-Shell
choco install python
choco install pip
pip install aws-shell
macOS
Pour installer l'AWS CLI sur macOS, nous vous recommandons d'utiliser le gestionnaire de packages brew :
# AWS CLI
brew install awscli
# Session Manager plugin
brew install --cask session-manager-plugin
# AWS-Shell
pip install aws-shell
Linux
Selon votre distribution Linux, les étapes d'installation sont différentes.
CentOS, Fedora, RHEL
Pour les distributions basées sur YUM (CentOS, Fedora, RHEL), vous pouvez suivre les étapes d'installation suivantes :
# AWS CLI
sudo yum update
sudo yum install wget -y
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install epel-release-latest-7.noarch.rpm
sudo yum -y install python-pip
sudo pip install awscli
# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" \
-o "session-manager-plugin.rpm"
sudo yum install -y session-manager-plugin.rpm
# AWS-Shell
pip install aws-shell
Debian, Ubuntu
Pour les distributions basées sur APT (Debian, Ubuntu), vous pouvez utiliser des étapes d'installation légèrement différentes :
# AWS CLI
sudo apt-get install python-pip
sudo pip install awscli
# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" \
-o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb
# AWS-Shell
pip install aws-shell
Autres distributions Linux
Pour les autres distributions Linux, vous pouvez utiliser les étapes d'installation manuelle de l'AWS CLI.
Différence entre AWS s3, s3api et s3control
La principale différence entre le s3
, s3api
et s3control
commandes sont que le s3
les commandes sont des commandes de haut niveau construites au-dessus de s3api
de niveau inférieur commandes pilotées par les modèles JSON.
s3 | s3api | s3control |
---|---|---|
Ces commandes sont spécialement conçues pour faciliter la gestion de vos fichiers S3 à l'aide de la CLI. | Ces commandes sont générées à partir de modèles JSON, qui modélisent directement les API des différents services AWS. Cela permet à la CLI de générer des commandes qui sont un mappage presque un à un de l'API du service | Ces commandes vous permettent de gérer le plan de contrôle Amazon S3 |
aws s3 ls | aws s3api list-objects-v2 --bucket my-bucket | aws s3control list-jobs --account-id 123456789012 |
Si vous souhaitez savoir comment utiliser ces commandes pour interagir avec les points de terminaison d'un VPC, consultez notre article Automatisation de l'accès aux points de terminaison d'un VPC multirégional à l'aide de Terraform.
Commandes CLI AWS S3
Généralement, vous utilisez les commandes AWS CLI pour gérer S3 lorsque vous devez automatiser les opérations S3 à l'aide de scripts ou dans votre pipeline d'automatisation CICD. Par exemple, vous pouvez configurer le pipeline Jenkins pour exécuter des commandes AWS CLI pour n'importe quel compte AWS de votre environnement.
Cette section de l'article couvrira les exemples les plus courants d'utilisation des commandes de l'AWS CLI pour gérer les compartiments et les objets S3.
Gestion des buckets S3
L'AWS CLI prend en charge les opérations de création, de liste et de suppression pour la gestion des compartiments S3.
Créer un compartiment S3
Pour créer un compartiment S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 mb
(m ake b ucket) commande :
aws s3 mb s3://hands-on-cloud-example-1
Remarque :Le nom du compartiment S3 doit toujours être démarré à partir de s3://
préfixe.
Pour créer un compartiment S3 à l'aide de l'AWS CLI dans la région AWS spécifique, vous devez ajouter --region
argument de la commande précédente :
aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2
Répertorier les buckets S3
Pour répertorier les compartiments S3 à l'aide de l'AWS CLI, vous pouvez utiliser soit aws s3 ls
ou aws s3api list-buckets
commandes.
aws s3 ls
Les aws s3api list-buckets
commande produit JSON en sortie :
aws s3api list-buckets
Utilisation de aws s3api
La commande vous permet d'utiliser --query
paramètre pour effectuer des requêtes JMESPath pour des membres et des valeurs spécifiques dans la sortie JSON.
Sortons uniquement les compartiments dont les noms commencent par hands-on-cloud-example
:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name'
Nous pouvons étendre la commande précédente pour n'afficher que les noms de buckets S3 :
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
--output text
Supprimer le compartiment S3
Pour supprimer le compartiment S3 à l'aide de l'AWS CLI, vous pouvez utiliser soit aws s3 rb
ou aws s3api delete-bucket
commandes.
aws s3 rb s3://hands-on-cloud-example-1
Remarque :vous ne pouvez supprimer que des compartiments S3 vides
Si votre compartiment S3 contient des objets, vous pouvez utiliser le --force
argument pour nettoyer le bucket avant la suppression :
aws s3 rb s3://hands-on-cloud-example-2 --force
Remarque :le --force
l'argument ne supprime pas les objets versionnés, ce qui entraînerait l'échec de la suppression du compartiment.
Pour supprimer le bucket S3 avec la gestion des versions d'objets activée, vous devez d'abord le nettoyer :
export bucket_name="hands-on-cloud-versioning-enabled"
# Deleting objects versions
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
# Deleting delete markers
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Contents[].{Key:Key,VersionId:VersionId}}')"
# Deleting S3 bucket
aws s3 rb s3://$bucket_name
Gestion des objets S3
Dans cette section de l'article, nous couvrirons les opérations AWS CLI les plus courantes pour la gestion des objets S3.
Télécharger le fichier dans le compartiment S3
Pour charger le fichier dans le compartiment S3 à l'aide de l'AWS CLI, vous devez utiliser ether aws s3 cp
commande :
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1
Si nécessaire, vous pouvez modifier le nom de l'objet S3 téléchargé pendant l'opération de téléchargement :
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png
En plus de cela, vous pouvez spécifier la classe de stockage S3 lors du téléchargement :
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA
Paramètres pris en charge pour --storage-class
arguments sont :
- STANDARD :par défaut, norme Amazon S3
- REDUCED_REDUNDANCY – Stockage à redondance réduite Amazon S3
- STANDARD_IA – Accès standard peu fréquent à Amazon S3
- ONEZONE-IA – Accès peu fréquent à Amazon S3 One Zone
- INTELLIGENT_TIERING – Hiérarchisation intelligente d'Amazon S3
- GLACIER – Glacier Amazon S3
- DEEP_ARCHIVE – Archive profonde Amazon S3 Glacier
Si le fichier doit être chiffré avec le chiffrement SSE par défaut, vous devez fournir --sse
argument :
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256
Pour le chiffrement KMS, utilisez la commande suivante :
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse 'aws:kms' --sse-kms-key-id KMS_KEY_ID
Remarque :remplacer KMS_KEY_ID
dans la commande ci-dessus avec votre propre ID de clé KMS.
Télécharger plusieurs fichiers dans le compartiment S3
Pour charger plusieurs fichiers dans le compartiment S3, vous devez utiliser soit aws s3 cp
commande avec --recursive
argument ou aws s3 sync
commande.
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive
Remarque :la commande ci-dessus ne téléchargera pas les répertoires vides s'ils existent dans le ./directory
path (ne créera pas les objets S3 pour les représenter).
Vous pouvez utiliser les mêmes arguments que dans les exemples ci-dessus pour configurer la classe de stockage S3 ou le chiffrement si nécessaire.
En plus de cela, vous pouvez utiliser --include
et --exclude
arguments pour spécifier un ensemble de fichiers à télécharger.
Par exemple, si vous devez copier uniquement .png
fichiers du ./directory
, vous pouvez utiliser la commande suivante :
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"
Vous pouvez obtenir le même résultat en utilisant la aws s3 sync
commande :
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory
Remarque :la aws s3 sync
La commande prend en charge les mêmes arguments pour configurer la classe de stockage et le chiffrement S3.
L'avantage d'utiliser aws s3 sync
est que cette commande téléchargera uniquement les fichiers modifiés de votre système de fichiers local lors de la prochaine exécution.
Vous pouvez utiliser le --delete
argument pour supprimer des objets du bucket S3 s'ils ont été supprimés sur votre système de fichiers local (synchronisation complète) :
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete
Télécharger le fichier depuis le compartiment S3
Pour télécharger un seul fichier à partir du compartiment S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 cp
commande :
aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png
Télécharger plusieurs fichiers depuis le compartiment S3
Pour télécharger plusieurs fichiers à partir du compartiment S3 à l'aide de l'AWS CLI, vous devez utiliser soit le aws s3 cp
ou aws s3 sync
commande :
aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive
Remarque :si le compartiment S3 contient des "répertoires" vides dans le /directory
préfixe, l'exécution de la commande ci-dessus créera des répertoires vides sur votre système de fichiers local.
Comme pour l'opération de téléchargement, vous pouvez synchroniser tous les objets du compartiment S3 dans le préfixe commun vers votre répertoire local :
aws s3 sync s3://hands-on-cloud-example-1/directory ./directory
Remarque :pour les deux commandes (aws s3 cp
et aws s3 sync
) vous pouvez utiliser le --include
et --exclude
arguments pour télécharger ou synchroniser uniquement un ensemble spécifique de fichiers.
Remarque :en utilisant le --delete
argument avec le aws s3 sync
La commande vous permet d'obtenir un miroir complet du préfixe des objets S3 dans votre dossier local.
Répertorier les fichiers dans le compartiment S3
Pour répertorier les fichiers dans le compartiment S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 ls
commande :
aws s3 ls s3://hands-on-cloud-example-1
Vous pouvez obtenir des tailles d'objet lisibles par l'homme en utilisant le --human-readable
argument :
aws s3 ls s3://hands-on-cloud-example-1 --human-readable
Vous pouvez utiliser le --recursive
argument pour répertorier tous les objets S3 dans le compartiment S3 ou ayant le même préfixe :
# Recursive listing of the entire S3 bucket
aws s3 ls s3://hands-on-cloud-example-1 --recursive
# Recursive listing for the S3 prefix
aws s3 ls s3://hands-on-cloud-example-1/directory --recursive
Renommer l'objet S3
Pour renommer l'objet S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 mv
commande :
aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png
Remarque :vous pouvez non seulement renommer les objets S3, mais également modifier leur classe de stockage et leur chiffrement, par exemple :
aws s3 mv s3://hands-on-cloud-example-1/image2.png s3://hands-on-cloud-example-1/image.png \
--sse AES256 --storage-class ONEZONE_IA
Renommer le "répertoire" S3
Pour renommer le « répertoire » S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 mv
commande :
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive
Remarque :le --recursive
L'argument ne déplace pas les "répertoires" vides dans le "répertoire" S3 spécifié. Par conséquent, si vous vous attendez à un déplacement complet du "répertoire", vous devrez peut-être recréer des "répertoires" vides dans le répertoire cible (aws s3 put-object
commande) et supprimez-les du répertoire source (voir les exemples ci-dessous).
Créer un "répertoire" S3 vide
Pour créer un « répertoire » S3 vide à l'aide de l'AWS CLI, vous devez utiliser le aws s3 put-object
commande :
aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/
Remarque :le /
caractère dans le nom de l'objet est nécessaire pour créer un répertoire vide. Sinon, la commande ci-dessus créera un objet fichier avec le nom directory_name
.
Copier/déplacer des fichiers entre des buckets S3
Pour copier des fichiers entre des compartiments S3 à l'aide de l'AWS CLI, vous devez utiliser soit le aws s3 cp
ou aws s3 sync
commande. Pour déplacer des fichiers entre des compartiments S3, vous devez utiliser le aws s3 mv
commande.
Pour copier des fichiers entre des compartiments S3 au sein de la même région AWS :
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Si les compartiments S3 source et de destination sont situés dans des régions AWS différentes, vous devez utiliser le --source-region
et --region
arguments (emplacement de compartiment S3 de destination spécifié) :
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Pour déplacer des objets entre des compartiments S3 au sein de la même région, vous devez utiliser le aws s3 mv
commande :
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Si les compartiments S3 source et de destination sont situés dans des régions AWS différentes, vous devez utiliser le --source-region
et --region
arguments (emplacement de compartiment S3 de destination spécifié) :
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Remarque :vous pouvez utiliser --storage-class
et --sse
arguments pour spécifier la classe de stockage et la méthode de chiffrement dans le compartiment S3 cible
Remarque :vous pouvez utiliser --include
et --exclude
arguments pour sélectionner uniquement des fichiers spécifiques à copier/déplacer à partir du compartiment S3 source
Remarque :le --recursive
l'argument ne copie/déplace pas les "répertoires" vides dans le préfixe S3 spécifié, donc si vous attendez une copie/déplacement complet du "répertoire", vous devrez peut-être recréer des "répertoires" vides dans le répertoire cible (aws s3 put-object
commande). Voir les exemples ci-dessus.
Pour synchroniser les "répertoires" entre les compartiments S3, vous devez utiliser le aws s3 sync
commande, par exemple :
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory
Remarque :vous pouvez utiliser des arguments comme --storage-class
, --sse
, --include
et --exclude
avec la aws s3 sync
commande :
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory \
--region us-west-2 --source-region us-east-1 --sse AES256
Supprimer des objets S3
Pour supprimer des objets S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 rm
commande :
aws s3 rm s3://hands-on-cloud-example-1/image.png
Remarque :vous pouvez utiliser le --recursive
, --include
, et --exclude
arguments avec le aws s3 rm
commande.
Générer des URL pré-signées pour l'objet S3
Pour générer l'URL pré-signée pour l'objet S3 à l'aide de l'AWS CLI, vous devez utiliser le aws s3 presign
commande :
aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800
Remarque :l'argument –expires-in définit le délai d'expiration de l'URL pré-signée en secondes entre 3600 (min) et 604800 (max) secondes.
Maintenant, vous pouvez utiliser l'URL pré-signée générée pour télécharger l'objet S3 à l'aide d'un navigateur Web ou de wget
commande, par exemple :
wget generated_presigned_url
Ou remplacez l'objet S3 en utilisant le curl
commande :
curl -H "Content-Type: image/png" -T image.png generated_presigned_url
Remarque :si vous obtenez le The request signature we calculated does not match the signature you provided. Check your key and signing method.
message d'erreur, vous devez régénérer votre clé d'accès AWS et votre clé secrète AWS. La raison principale de l'erreur est que les informations d'identification AWS contiennent certains caractères comme +
, %
, et /
.
Résumé
Dans cet article, nous avons expliqué comment utiliser l'AWS CLI pour gérer les compartiments et les objets Amazon S3 avec de nombreux exemples que vous pouvez utiliser au cours de vos activités AWS quotidiennes.