GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser AWS CLI pour gérer Amazon S3

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.


Linux
  1. Comment installer AWS CLI sur Ubuntu 20.04 Focal Fossa Linux

  2. Comment installer et utiliser Flatpak sous Linux

  3. Comment installer MySQL 5.7 sur Amazon Linux

  4. Comment installer l'AWS CLI sur Ubuntu 20.04 LTS

  5. Comment installer awscli

Comment installer et utiliser phpMyAdmin sous Linux

Comment installer l'AWS CLI sur Debian 11 Bullseye Linux

Comment installer Rocky Linux 8 sur l'instance Amazon AWS Ec2

Comment installer et utiliser WP CLI sous Linux

Comment installer et utiliser WP-CLI pour gérer WordPress

Comment installer AWS-CLI sur Ubuntu