Accéder au contenu principal

AWS S3 cp : Le guide complet des transferts de fichiers sur AWS S3

Apprenez à copier des fichiers depuis et vers S3 à l'aide de la commande aws s3 cp. Découvrez tout, des transferts de base à la copie récursive, en passant par les scripts d'automatisation et la résolution des erreurs courantes, le tout à l'aide d'exemples pratiques et concrets.
Actualisé 19 mars 2025  · 15 min de lecture

Copier manuellement des fichiers vers le stockage AWS peut s'avérer fastidieux, source d'erreurs et inefficace, en particulier lorsqu'il s'agit de grandes quantités de données. Vous ne voulez pas cela.

L'interface de ligne de commande (CLI) d'AWS propose un outil pratique appelé aws s3 cp qui simplifie ce processus. Cette commande vous permet de copier des fichiers vers et depuis des buckets Amazon S3 à l'aide de commandes simples et scriptables qui fonctionnent sur tous les systèmes d'exploitation. L'utilisation du CLI AWS permet non seulement de gagner du temps, mais aussi d'automatiser les tâches routinières de transfert de fichiers.

La commande aws s3 cp offre de nombreuses options pour gérer des scénarios de transfert de fichiers complexes. Vous pouvez copier des fichiers individuels, transférer de manière récursive des répertoires entiers, filtrer les fichiers en fonction de modèles et même spécifier différentes classes de stockage pour optimiser les coûts.

Dans ce tutoriel, je vous expliquerai tout ce que vous devez savoir pour utiliser efficacement aws s3 cp, des commandes de base aux techniques avancées et aux stratégies d'automatisation.

> Vous êtes nouveau sur AWS et vous n'êtes pas sûr du stockage dans le cloud et de S3 ? Notre guide détailléed sur S3 et EFS est l'endroit idéal pour commencer. Si vous vous intéressez plus particulièrement à S3, consultez notre guide approfondi sur S3.

Qu'est-ce que AWS S3 cp ?

La commande aws s3 cp est un utilitaire de l'interface de ligne de commande AWS qui vous permet de copier des fichiers entre votre système local et le stockage Amazon S3. 

Essentiellement, il est conçu pour fournir une expérience familière, en ligne de commande, similaire à la commande Linux standard cp, mais adaptée à l'interaction avec les buckets S3.

À la base, aws s3 cp connecte votre machine locale et l'infrastructure de stockage en nuage d'AWS. Lorsque vous exécutez une commande aws s3 cp, la CLI AWS gère l'authentification et le découpage des fichiers pour les transferts importants et garantit l'intégrité des données pendant le processus de copie. Cet utilitaire permet de copier des fichiers individuels, des fichiers multiples à l'aide de caractères génériques et des structures de répertoire entières à l'aide d'opérations récursives.

Le site aws s3 cp est capable de beaucoup de choses, je n'en citerai que quelques-unes :

  • Transferts bidirectionnels (téléchargement vers S3 ou téléchargement depuis S3).
  • Copie récursive de structures de répertoires entières.
  • Prise en charge de différentes classes de stockage S3 (Standard, Intelligent-Tiering, Glacier, etc.).
  • Filtrage de fichiers à l'aide de motifs d'inclusion/exclusion.
  • Préservation des métadonnées des fichiers pendant les transferts.
  • Intégration avec AWS Identity and Access Management (IAM) pour la sécurité.

Cependant, la puissance de aws s3 cp réside dans sa flexibilité et son intégration à l'écosystème AWS. Vous pouvez spécifier différents paramètres pour contrôler des aspects tels que la classe de stockage, le cryptage, les métadonnées, le contrôle d'accès, etc. Il convient donc à tous les usages, des simples transferts de fichiers ponctuels aux solutions de sauvegarde complexes et automatisées.

La commande est différente de l'utilisation de la console de gestion AWS, qui nécessite une navigation manuelle et des clics. La commande aws s3 cp peut être exécutée directement à partir de votre terminal ou incorporée dans des scripts et des flux de travail automatisés. Cet accès programmatique à S3 est essentiel pour de nombreux professionnels de la tech, notamment les ingénieurs DevOps et les data scientists.

En conclusion, aws s3 cp fournit une solution fiable et scriptable qui peut gérer des transferts massifs tout en maintenant les performances. Il peut reprendre les téléchargements interrompus, ce qui le rend particulièrement utile en cas de connexions réseau instables ou de transfert de fichiers très volumineux.

Ensuite, je vais vous expliquer les choses les plus ennuyeuses : configurer AWS CLI sur votre système.

Configuration de l'interface de programmation AWS et d'AWS S3

Avant de vous plonger dans la commande aws s3 cp, vous devez avoir installé et configuré correctement la CLI AWS sur votre système. Ne vous inquiétez pas si vous n'avez jamais travaillé avec AWS : le processus d'installation est simple et devrait prendre moins de 10 minutes.

Je vais décomposer cette opération en trois phases simples : installation de l'outil AWS CLI, configuration de vos informations d'identification et création de votre premier godet S3 pour le stockage.

Installation de l'interface de programmation AWS

La procédure d'installation diffère légèrement selon le système d'exploitation que vous utilisez.

Pour les systèmes Windows :

Pour les systèmes Linux :

Exécutez les trois commandes suivantes dans le terminal :

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Pour les systèmes macOS :

En supposant que vous ayez installé Homebrew, exécutez cette ligne depuis le Terminal :

brew install awscli

Si vous n'avez pas Homebrew, utilisez ces deux commandes à la place :

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

Pour confirmer la réussite de l'installation, lancez aws --version dans votre terminal. Vous devriez voir quelque chose comme ceci :

Image 1 - Version CLI d'AWS

Image 1 - Version CLI d'AWS

Configuration de la CLI AWS

Une fois le CLI installé, il est temps de configurer vos informations d'identification AWS pour l'authentification.

Tout d'abord, accédez à votre compte AWS et naviguez jusqu'au tableau de bord du service IAM. Créez un nouvel utilisateur avec un accès programmatique et attachez la politique de permissions S3 appropriée :

Image 2 - Utilisateur AWS IAM

Image 2 - Utilisateur AWS IAM

Ensuite, visitez l'onglet "Security credentials" et générez une nouvelle paire de clés d'accès. Veillez à enregistrer l'ID de la clé d'accès et la clé d'accès secrète dans un endroit sûr - Amazon ne vous montrera plus la clé secrète après cet écran :

Image 3 - Informations d'identification de l'utilisateur AWS IAM

Image 3 - Informations d'identification de l'utilisateur AWS IAM

Ouvrez maintenant votre terminal et exécutez la commande aws configure. Quatre informations vous seront demandées : votre ID de clé d'accès, votre clé d'accès secrète, votre région par défaut (j'utilise eu-central-1) et votre format de sortie préféré (généralement json) :

Image 4 - Configuration de la CLI AWS

Image 4 - Configuration de la CLI AWS

Pour vous assurer que tout est bien connecté, vérifiez votre identité à l'aide de la commande suivante :

aws sts get-caller-identity

Si la configuration est correcte, vous verrez les détails de votre compte :

Image 5 - Commande de test de connexion de la CLI AWS

Image 5 - Commande de test de connexion de la CLI AWS

Création d'un seau S3

Enfin, vous devez créer un panier S3 pour stocker les fichiers que vous copierez.

Rendez-vous dans la section du service S3 de votre console AWS et cliquez sur "Create bucket" (Créer un seau). N'oubliez pas que les noms des godets doivent être uniques dans l'ensemble d'AWS. Choisissez un nom distinctif, laissez les paramètres par défaut pour l'instant et cliquez sur "Créer" :

Image 6 - Création d'un seau AWS

Image 6 - Création d'un seau AWS

Une fois créé, votre nouveau seau apparaîtra dans la console. Vous pouvez également confirmer son existence à l'aide de la ligne de commande :

aws s3 ls

Image 7 - Tous les buckets S3 disponibles

Image 7 - Tous les buckets S3 disponibles

Tous les buckets S3 sont configurés comme privés par défaut, gardez cela à l'esprit. Si vous avez l'intention d'utiliser ce seau pour des fichiers accessibles au public, vous devrez modifier les règles du seau en conséquence.

Vous êtes maintenant prêt à utiliser la commande aws s3 cp pour transférer des fichiers. Commençons par les bases.

Syntaxe de base de la commande AWS S3 cp

Maintenant que tout est configuré, nous allons nous plonger dans l'utilisation de base de la commande aws s3 cp. Comme toujours avec AWS, la beauté réside dans la simplicité, même si la commande peut gérer différents scénarios de transfert de fichiers.

Dans sa forme la plus élémentaire, la commande aws s3 cp suit la syntaxe suivante :

aws s3 cp <source> <destination> [options]

et peuvent être des chemins d'accès à des fichiers locaux ou des URI S3 (qui commencent par s3://). Examinons les trois cas d'utilisation les plus courants.

Copier un fichier d'un fichier local vers un fichier S3

Pour copier un fichier de votre système local vers un panier S3, la source sera un chemin local et la destination sera une URI S3 :

aws s3 cp /Users/dradecic/Desktop/test_file.txt s3://testbucket-aws-cp-dradecic/test_file.txt

Cette commande télécharge le fichier test_file.txt du répertoire fourni vers le panier S3 spécifié. Si l'opération est réussie, vous verrez apparaître une sortie de console comme celle-ci :

Image 8 - Sortie de la console après la copie d'un fichier local

Image 8 - Sortie de la console après la copie du fichier local

Dans la console de gestion AWS, vous verrez votre fichier téléchargé :

Image 9 - Contenu du seau S3

Image 9 - Contenu du seau S3

De même, si vous souhaitez copier un dossier local dans votre panier S3 et le placer, disons, dans un autre dossier imbriqué, exécutez une commande similaire à celle-ci :

aws s3 cp /Users/dradecic/Desktop/test_folder s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder/ --recursive

Image 10 - Contenu du panier S3 après le téléchargement d'un dossier

Image 10 - Contenu du panier S3 après le téléchargement d'un dossier

L'option --recursive permet de s'assurer que tous les fichiers et sous-dossiers du dossier sont copiés.

Gardez à l'esprit que S3 n'a pas réellement de dossiers - la structure du chemin fait partie de la clé de l'objet, mais elle fonctionne conceptuellement comme des dossiers.

Copier un fichier de S3 vers local

Pour copier un fichier de S3 vers votre système local, il suffit d'inverser l'ordre : la source devient l'URI S3 et la destination est votre chemin d'accès local :

aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt /Users/dradecic/Documents/s3-data/downloaded_test_file.txt

Cette commande télécharge test_file.txt depuis votre panier S3 et l'enregistre sous downloaded_test_file.txt dans le répertoire fourni. Vous le verrez immédiatement sur votre système local :

Image 11 - Téléchargement d'un seul fichier depuis S3

Image 11 - Téléchargement d'un seul fichier depuis S3

Si vous omettez le nom du fichier de destination, la commande utilisera le nom du fichier d'origine :

aws s3 cp s3://testbucket-aws-cp-dradecic/test_file.txt .

Image 12 - Contenu du fichier téléchargé

Image 12 - Contenu du fichier téléchargé

Le point (.) représente votre répertoire actuel, ce qui permet de télécharger test_file.txt à votre emplacement actuel.

Enfin, pour télécharger un répertoire entier, vous pouvez utiliser une commande similaire à celle-ci :

aws s3 cp s3://testbucket-aws-cp-dradecic/my-desired-folder/test_folder /Users/dradecic/Documents/test_folder --recursive

Image 13 - Contenu du dossier téléchargé

Image 13 - Contenu du dossier téléchargé

Gardez à l'esprit que le drapeau --recursive est essentiel lorsque vous travaillez avec plusieurs fichiers - sans lui, la commande échouera si la source est un répertoire.

Avec ces commandes de base, vous pouvez déjà accomplir la plupart des tâches de transfert de fichiers dont vous aurez besoin. Mais dans la section suivante, vous découvrirez des options plus avancées qui vous permettront de mieux contrôler le processus de copie.

Options et fonctionnalités avancées d'AWS S3 cp

AWS propose quelques options avancées qui vous permettent d'optimiser les opérations de copie de fichiers. Dans cette section, je vous présenterai quelques-uns des drapeaux et paramètres les plus utiles qui vous aideront dans vos tâches quotidiennes.

Utilisation des options --exclude et --include

Il arrive que vous ne souhaitiez copier que certains fichiers correspondant à des modèles spécifiques. Les drapeaux --exclude et --include vous permettent de filtrer les fichiers en fonction de modèles et de contrôler précisément ce qui est copié.

Pour commencer, voici la structure de répertoire avec laquelle je travaille :

Image 14 - Structure du répertoire

Image 14 - Structure du répertoire

Supposons maintenant que vous souhaitiez copier tous les fichiers du répertoire, à l'exception des fichiers .log:

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*.log"

Cette commande copiera tous les fichiers du répertoire advanced_folder vers S3, à l'exclusion de tout fichier portant l'extension .log:

Image 15 - Résultats de la copie de dossier

Image 15 - Résultats de la copie de dossier

Vous pouvez également combiner plusieurs motifs. Supposons que vous souhaitiez copier uniquement les fichiers HTML et CSS du dossier du projet :

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exclude "*" --include "*.html" --include "*.css"

Cette commande exclut d'abord tout (--exclude "*"), puis n'inclut que les fichiers portant les extensions .html et .css. Le résultat est le suivant :

Image 16 - Résultats de la copie de dossier (2)

Image 16 - Résultats de la copie de dossier (2)

Gardez à l'esprit que l'ordre des drapeaux a de l'importance - AWS CLI traite ces drapeaux de manière séquentielle, donc si vous mettez --include avant --exclude, vous obtiendrez des résultats différents :

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --include "*.html" --include "*.css" --exclude "*"

Cette fois, rien n'a été copié dans le seau :

Image 17 - Résultats de la copie de dossiers (3)

Image 17 - Résultats de la copie de dossiers (3)

Spécifier la classe de stockage S3

Amazon S3 propose différentes classes de stockage, chacune ayant des coûts et des caractéristiques de recherche différents. Par défaut, aws s3 cp télécharge les fichiers dans la classe de stockage Standard, mais vous pouvez spécifier une classe différente à l'aide de l'option --storage-class:

aws s3 cp /Users/dradecic/Desktop/large-archive.zip s3://testbucket-aws-cp-dradecic/archives/ --storage-class GLACIER

Cette commande télécharge large-archive.zip vers la classe de stockage Glacier, qui est nettement moins chère, mais dont les coûts et les délais de récupération sont plus élevés :

Image 18 - Copier des fichiers sur S3 avec différentes classes de stockage

Image 18 - Copier des fichiers sur S3 avec différentes classes de stockage

Les classes de stockage disponibles sont les suivantes :

  • STANDARD (par défaut) : Stockage polyvalent avec une durabilité et une disponibilité élevées.
  • REDUCED_REDUNDANCY (qui n'est plus recommandé) : Durabilité moindre, option économique, aujourd'hui obsolète.
  • STANDARD_IA (Accès peu fréquent) : Stockage moins coûteux pour les données auxquelles on accède moins fréquemment.
  • ONEZONE_IA (Single Zone Infrequent Access) : Stockage à moindre coût, avec accès peu fréquent, dans une seule zone de disponibilité AWS.
  • INTELLIGENT_TIERING: Déplace automatiquement les données entre les différents niveaux de stockage en fonction des schémas d'accès.
  • GLACIER: Stockage d'archives à faible coût pour une conservation à long terme, récupération en quelques minutes ou quelques heures.
  • DEEP_ARCHIVE: Stockage d'archives le moins cher, récupération en quelques heures, idéal pour la sauvegarde à long terme.

Si vous sauvegardez des fichiers auxquels vous n'avez pas besoin d'accéder immédiatement, l'utilisation de GLACIER ou DEEP_ARCHIVE peut vous faire économiser des coûts de stockage importants.

Synchronisation de fichiers avec l'option --exact-timestamps

Lorsque vous mettez à jour des fichiers déjà existants dans S3, il se peut que vous ne souhaitiez copier que les fichiers modifiés. L'option --exact-timestamps permet de comparer les dates entre la source et la destination.

En voici un exemple :

aws s3 cp /Users/dradecic/Desktop/advanced_folder s3://testbucket-aws-cp-dradecic/advanced_folder/ --recursive --exact-timestamps

Avec cette option, la commande ne copiera que les fichiers dont l'horodatage diffère de celui des fichiers déjà présents dans S3. Cela permet de réduire le temps de transfert et l'utilisation de la bande passante lorsque vous mettez régulièrement à jour un grand nombre de fichiers.

En quoi cela est-il utile ? Imaginez des scénarios de déploiement dans lesquels vous souhaitez mettre à jour vos fichiers d'application sans transférer inutilement des actifs inchangés.

Bien que --exact-timestamps soit utile pour effectuer une sorte de synchronisation, si vous avez besoin d'une solution plus sophistiquée, envisagez d'utiliser aws s3 sync au lieu de aws s3 cp. La commande sync a été spécialement conçue pour assurer la synchronisation des répertoires et dispose de fonctionnalités supplémentaires à cet effet. J'ai tout écrit sur la commande sync dans le tutoriel AWS S3 Sync.

Grâce à ces options avancées, vous disposez désormais d'un contrôle beaucoup plus fin sur vos opérations de fichiers S3. Vous pouvez cibler des fichiers spécifiques, optimiser les coûts de stockage et mettre à jour efficacement vos fichiers. Dans la section suivante, vous apprendrez à automatiser ces opérations à l'aide de scripts et de tâches planifiées.

Automatiser les transferts de fichiers avec AWS S3 cp

Jusqu'à présent, vous avez appris à copier manuellement des fichiers depuis et vers S3 à l'aide de la ligne de commande. L'un des principaux avantages de l'utilisation de aws s3 cp est que vous pouvez facilement automatiser ces transferts, ce qui vous fera gagner beaucoup de temps.

Voyons comment vous pouvez intégrer la commande aws s3 cp dans des scripts et des tâches planifiées pour des transferts de fichiers sans intervention.

Utiliser AWS S3 cp dans les scripts

Voici un exemple de script bash simple qui sauvegarde un répertoire sur S3, ajoute un horodatage à la sauvegarde, et implémente la gestion des erreurs et la journalisation dans un fichier :

#!/bin/bash

# Set variables
SOURCE_DIR="/Users/dradecic/Desktop/advanced_folder"
BUCKET="s3://testbucket-aws-cp-dradecic/backups"
DATE=$(date +%Y-%m-%d-%H-%M)
BACKUP_NAME="backup-$DATE"
LOG_FILE="/Users/dradecic/logs/s3-backup-$DATE.log"

# Ensure the logs directory exists
mkdir -p "$(dirname "$LOG_FILE")"

# Create the backup and log the output
echo "Starting backup of $SOURCE_DIR to $BUCKET/$BACKUP_NAME" | tee -a $LOG_FILE
aws s3 cp $SOURCE_DIR $BUCKET/$BACKUP_NAME --recursive 2>&1 | tee -a $LOG_FILE

# Check if the backup was successful
if [ $? -eq 0 ]; then
    echo "Backup completed successfully on $DATE" | tee -a $LOG_FILE
else
    echo "Backup failed on $DATE" | tee -a $LOG_FILE
fi

Sauvegardez-le sous backup.sh, rendez-le exécutable avec chmod +x backup.sh, et vous avez un script de sauvegarde réutilisable !

Vous pouvez ensuite l'exécuter à l'aide de la commande suivante :

./backup.sh

Image 19 - Script exécuté dans le terminal

Image 19 - Script exécuté dans le terminal

Immédiatement après, le dossier backups du seau sera rempli :

Image 20 - Sauvegarde stockée sur un panier S3

Image 20 - Sauvegarde stockée sur un panier S3

Passons à l'étape suivante en exécutant le script selon un calendrier.

Planifier des transferts de fichiers avec des tâches cron

Maintenant que vous disposez d'un script, l'étape suivante consiste à le programmer pour qu'il s'exécute automatiquement à des heures précises.

Si vous utilisez Linux ou macOS, vous pouvez utiliser cron pour planifier vos sauvegardes. Voici comment mettre en place une tâche cron pour exécuter votre script de sauvegarde tous les jours à minuit :

1. Ouvrez votre crontab pour l'éditer :

crontab -e

2. Ajoutez la ligne suivante pour exécuter votre script tous les jours à minuit :

0 0 * * * /path/to/your/backup.sh

Image 21 - Tâche Cron pour l'exécution quotidienne du script

Le format des tâches cron est minute hour day-of-month month day-of-week command. Voici quelques exemples supplémentaires :

  • Exécution toutes les heures : 0 * * * * /path/to/your/backup.sh
  • Tous les lundis à 9 heures : 0 9 * * 1 /path/to/your/backup.sh
  • Le 1er de chaque mois : 0 0 1 * * /path/to/your/backup.sh

Et c'est tout ! Le script backup.sh s'exécutera désormais à l'intervalle programmé.

L'automatisation de vos transferts de fichiers S3 est une bonne solution. Il est particulièrement utile pour des scénarios tels que :

  • Sauvegarde quotidienne des données importantes
  • Synchronisation des images de produits sur un site web
  • Déplacement des fichiers journaux vers le stockage à long terme
  • Déployer des fichiers de site web mis à jour

Ces techniques d'automatisation vous aideront à mettre en place un système fiable qui gère les transferts de fichiers sans intervention manuelle. Il suffit de l'écrire une fois, puis de l'oublier.

Dans la section suivante, j'aborderai quelques bonnes pratiques pour rendre vos opérations sur aws s3 cp plus sûres et plus efficaces.

Meilleures pratiques pour l'utilisation d'AWS S3 cp

Bien que la commande aws s3 cp soit facile à utiliser, les choses peuvent mal tourner.

Si vous suivez les meilleures pratiques, vous éviterez les pièges les plus courants, vous optimiserez les performances et vous assurerez la sécurité de vos données. Examinons ces pratiques pour rendre vos opérations de transfert de fichiers plus efficaces.

Gestion efficace des fichiers

Lorsque vous travaillez avec S3, l'organisation logique de vos fichiers vous permettra de gagner du temps et de vous épargner des maux de tête.

Tout d'abord, établissez une convention de dénomination cohérente des seaux et des préfixes. Par exemple, vous pouvez séparer vos données par environnement, application ou date :

s3://company-backups/production/database/2023-03-13/
s3://company-backups/staging/uploads/2023-03/

Ce type d'organisation facilite la tâche :

  • Retrouvez des fichiers spécifiques lorsque vous en avez besoin.
  • Appliquez des politiques de seaux et des autorisations au bon niveau.
  • Définissez des règles de cycle de vie pour l'archivage ou la suppression des anciennes données.

Autre conseil : Lorsque vous transférez de grands ensembles de fichiers, envisagez de regrouper d'abord les petits fichiers (à l'aide de zip ou de tar) avant de les télécharger. Cela permet de réduire le nombre d'appels d'API vers S3, ce qui peut réduire les coûts et accélérer les transferts.

# Instead of copying thousands of small log files
# tar them first, then upload
tar -czf example-logs-2025-03.tar.gz /var/log/application/
aws s3 cp example-logs-2025-03.tar.gz s3://testbucket-aws-cp-dradecic/logs/2025/03/

Traitement des transferts de données volumineux

Lorsque vous copiez des fichiers volumineux ou plusieurs fichiers à la fois, il existe quelques techniques pour rendre le processus plus fiable et plus efficace.

Vous pouvez utiliser l'option --quiet pour réduire la production lors de l'exécution de scripts :

aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/backups/ --recursive --quiet

Cela supprime les informations de progression pour chaque fichier, ce qui rend les journaux plus faciles à gérer. Il améliore aussi légèrement les performances.

Pour les fichiers très volumineux, envisagez d'utiliser téléchargements en plusieurs parties avec l'option --multipart-threshold:

aws s3 cp huge-file.iso s3://testbucket-aws-cp-dradecic/backups/ --multipart-threshold 100MB

Le paramètre ci-dessus indique à AWS CLI de diviser les fichiers de plus de 100 Mo en plusieurs parties pour le téléchargement. Cette démarche présente plusieurs avantages :

  • Si la connexion est interrompue, seule la partie concernée doit être réessayée.
  • Les pièces peuvent être téléchargées en parallèle, ce qui peut augmenter le débit.
  • Vous pouvez interrompre et reprendre des téléchargements importants.

Lorsque transfert de données entre régionsenvisagez d'utiliser l'accélération de transfert S3 pour des téléchargements plus rapides :

aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/backups/ --endpoint-url https://s3-accelerate.amazonaws.com

L'option ci-dessus fait passer votre transfert par le réseau périphérique d'Amazon, ce qui permet d'accélérer considérablement les transferts entre régions.

Assurer la sécurité

La sécurité doit toujours être une priorité absolue lorsque vous travaillez avec vos données dans le cloud.

Tout d'abord, assurez-vous que vos autorisations IAM respectent le principe du moindre privilège. N'accordez que les autorisations spécifiques nécessaires à chaque tâche.

Voici un exemple de politique que vous pouvez attribuer à l'utilisateur :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::testbucket-aws-cp-dradecic/backups/*"
        }
    ]
}

Cette politique permet de copier des fichiers depuis et vers le préfixe "backups" de "my-bucket".

Un autre moyen d'accroître la sécurité consiste à activer le cryptage pour les données sensibles. Vous pouvez spécifier le cryptage côté serveur lors du téléchargement :

aws s3 cp confidential.docx s3://testbucket-aws-cp-dradecic/ --sse AES256

Ou, pour plus de sécurité, utilisez AWS Key Management Service (KMS) :

aws s3 cp secret-data.json s3://testbucket-aws-cp-dradecic/ --sse aws:kms --sse-kms-key-id myKMSKeyId

Toutefois, pour les opérations très sensibles, envisagez d'utiliser des points d'extrémité VPC pour S3. Cela permet de maintenir votre trafic au sein du réseau AWS et d'éviter complètement l'internet public.

Dans la section suivante, vous apprendrez à résoudre les problèmes courants que vous pouvez rencontrer lorsque vous utilisez cette commande.

Dépannage des erreurs de cp sur AWS S3

Une chose est sûre : vous rencontrerez parfois des problèmes lorsque vous travaillerez avec aws s3 cp. Mais en comprenant les erreurs courantes et leurs solutions, vous économiserez du temps et de la frustration lorsque les choses ne se déroulent pas comme prévu.

Dans cette section, je vous montrerai les problèmes les plus fréquents et comment les résoudre.

Erreurs courantes et corrections

Erreur : "Accès refusé

C'est probablement l'erreur la plus fréquente que vous rencontrerez :

upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

Cela signifie généralement l'une des trois choses suivantes :

  • Votre utilisateur IAM ne dispose pas d'autorisations suffisantes pour effectuer l'opération.
  • La politique du seau consiste à restreindre l'accès.
  • Vos informations d'identification AWS ont expiré.

Pour résoudre le problème :

  • Vérifiez vos autorisations IAM pour vous assurer que vous avez les autorisations nécessaires s3:PutObject (pour les téléchargements) ou s3:GetObject (pour les téléchargements).
  • Vérifiez que la politique des seaux ne limite pas vos actions.
  • Exécutez aws configure pour mettre à jour vos informations d'identification si elles ont expiré.

Erreur : "Aucun fichier ou répertoire de ce type"

Cette erreur se produit lorsque le fichier local ou le répertoire que vous essayez de copier n'existe pas :

upload failed: ./missing-file.txt to s3://testbucket-aws-cp-dradecic/missing-file.txt An error occurred (404) when calling the PutObject operation: Not Found

La solution est simple : vérifiez soigneusement les chemins d'accès à vos fichiers. Les chemins d'accès sont sensibles à la casse, gardez cela à l'esprit. Assurez-vous également que vous êtes dans le bon répertoire lorsque vous utilisez des chemins relatifs.

Erreur : "Le seau spécifié n'existe pas"

Si vous voyez cette erreur :

upload failed: ./myfile.txt to s3://testbucket-aws-cp-dradecic/myfile.txt An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist

Vérifier pour :

  • Fautes de frappe dans le nom de votre seau.
  • Si vous utilisez la bonne région AWS.
  • Si le seau existe réellement (il peut avoir été supprimé).

Vous pouvez lister tous vos buckets avec aws s3 ls pour confirmer le nom correct.

Erreur : "Connexion interrompue"

Des problèmes de réseau peuvent entraîner des dépassements de délai de connexion :

upload failed: ./largefile.zip to s3://testbucket-aws-cp-dradecic/largefile.zip An error occurred (RequestTimeout) when calling the PutObject operation: Request timeout

Pour résoudre ce problème :

  • Vérifiez votre connexion internet.
  • Essayez d'utiliser des fichiers plus petits ou d'activer les téléchargements en plusieurs parties pour les fichiers volumineux.
  • Envisagez d'utiliser AWS Transfer Acceleration pour améliorer les performances.

Gestion des échecs de téléchargement

Les erreurs sont beaucoup plus susceptibles de se produire lors du transfert de fichiers volumineux. Lorsque c'est le cas, essayez de gérer les échecs avec élégance.

Par exemple, vous pouvez utiliser l'indicateur --only-show-errors pour faciliter le diagnostic des erreurs dans les scripts :

aws s3 cp large-directory/ s3://testbucket-aws-cp-dradecic/ --recursive --only-show-errors

Cette option supprime les messages de transfert réussis et n'affiche que les erreurs, ce qui facilite grandement le dépannage des transferts importants.

Pour gérer les transferts interrompus, la commande --recursive ignore automatiquement les fichiers de même taille qui existent déjà dans la destination. Cependant, pour être plus complet, vous pouvez utiliser les tentatives intégrées de la CLI AWS pour les problèmes de réseau en définissant ces variables d'environnement :

export AWS_RETRY_MODE=standard
export AWS_MAX_ATTEMPTS=5
aws s3 cp large-file.zip s3://testbucket-aws-cp-dradecic/

Cette option permet à l'interface de programmation AWS de réessayer automatiquement les opérations qui ont échoué, jusqu'à 5 fois.

Mais pour les très grands ensembles de données, envisagez d'utiliser aws s3 sync au lieu de cp, car il est conçu pour mieux gérer les interruptions :

aws s3 sync large-directory/ s3://testbucket-aws-cp-dradecic/large-directory/

La commande sync ne transfère que les fichiers différents de ceux qui se trouvent déjà dans la destination, ce qui est idéal pour reprendre des transferts importants interrompus.

Si vous comprenez ces erreurs courantes et que vous mettez en œuvre une gestion appropriée des erreurs dans vos scripts, vous rendrez vos opérations de copie S3 beaucoup plus robustes et fiables.

En résumé AWS S3 cp

En conclusion, la commande aws s3 cp est un moyen unique de copier des fichiers locaux sur S3 et vice-versa.

Vous avez tout appris à ce sujet dans cet article. Vous avez commencé par les principes de base et la configuration de l'environnement, et vous avez fini par écrire des scripts programmés et automatisés pour copier des fichiers. Vous avez également appris à résoudre certaines erreurs et difficultés courantes lors du déplacement de fichiers, en particulier de fichiers volumineux.

Si vous êtes un développeur, un professionnel des données ou un administrateur système, je pense que cette commande vous sera utile. La meilleure façon de s'y habituer est de l'utiliser régulièrement. Assurez-vous de bien comprendre les principes fondamentaux, puis passez du temps à automatiser les tâches fastidieuses de votre travail.

Pour en savoir plus sur AWS, suivez ces formations proposées par DataCamp :

Vous pouvez même utiliser DataCamp pour vous préparer aux examens de certification AWS - AWS Cloud Practitioner (CLF-C02).

FAQ

Qu'est-ce que la commande aws s3 cp et à quoi peut-elle servir ?

La commande aws s3 cp est un utilitaire de l'interface de ligne de commande AWS qui vous permet de copier des fichiers entre votre système local et le stockage Amazon S3. Il est conçu pour fournir une expérience de ligne de commande familière similaire à la commande cp standard de Linux, mais adaptée à l'interaction avec les buckets S3. Vous pouvez l'utiliser pour les transferts bidirectionnels, la copie récursive de structures de répertoires entières, le filtrage de fichiers sur la base de modèles et même la spécification de différentes classes de stockage pour l'optimisation des coûts. Il est particulièrement utile pour les ingénieurs DevOps, les scientifiques des données et les administrateurs système qui doivent gérer efficacement les données dans les buckets S3.

Comment configurer le CLI AWS pour qu'il utilise la commande aws s3 cp ?

Pour configurer AWS CLI afin d'utiliser la commande aws s3 cp, vous devez installer AWS CLI sur votre système, le configurer avec vos informations d'identification AWS et créer un panier S3. Le processus d'installation varie légèrement en fonction de votre système d'exploitation (Windows, Linux ou macOS). Après l'installation, vous devrez exécuter la commande aws configure et fournir votre ID de clé d'accès, votre clé d'accès secrète, votre région par défaut et votre format de sortie préféré. Enfin, vous devrez créer un seau S3, soit par l'intermédiaire de la console de gestion AWS, soit en utilisant directement l'interface de commande AWS.

Quelle est la syntaxe de base et quels sont les cas d'utilisation courants pour aws s3 cp ?

La syntaxe de base pour aws s3 cp est aws s3 cp [options], où la source et la destination peuvent être des chemins d'accès à des fichiers locaux ou des URI S3 (commençant par s3://). Les cas d'utilisation les plus courants sont le téléchargement d'un fichier de votre système local vers S3, le téléchargement d'un fichier de S3 vers votre système local et la copie récursive de répertoires entiers à l'aide de l'indicateur --recursive. Vous pouvez également utiliser la commande pour copier des fichiers entre différents buckets S3, spécifier différents noms pour les fichiers de destination et organiser les fichiers dans des structures de "dossiers" imbriqués au sein de vos buckets.

Comment puis-je utiliser les options --exclude et --include pour filtrer des fichiers spécifiques ?

Les drapeaux --exclude et --include vous permettent de filtrer les fichiers en fonction de modèles lorsque vous utilisez aws s3 cp, ce qui vous donne un contrôle précis sur ce qui est copié. Par exemple, vous pouvez copier tous les fichiers d'un répertoire à l'exception de ceux qui portent une extension spécifique (comme --exclude "*.log"), ou vous pouvez cibler uniquement des types de fichiers spécifiques (comme --include "*.html" --include "*.css" après avoir d'abord exclu tout ce qui porte l'extension --exclude "*"). L'ordre de ces drapeaux a une grande importance, car l'interface de programmation AWS les traite de manière séquentielle. Il est ainsi possible de créer des règles de filtrage sophistiquées pour des scénarios de transfert de fichiers complexes.

Quelle est la différence entre aws s3 cp with --exact-timestamps et aws s3 sync ?

Bien que les deux commandes puissent être utilisées pour mettre à jour des fichiers dans S3, elles ont des objectifs et des comportements différents. La commande aws s3 cp avec l'option --exact-timestamps ne copiera que les fichiers dont l'horodatage diffère de ce qui se trouve déjà dans S3, ce qui peut réduire le temps de transfert et l'utilisation de la bande passante lors de la mise à jour des fichiers. Cependant, aws s3 sync a été spécifiquement conçu pour maintenir les répertoires synchronisés et offre des capacités de synchronisation plus sophistiquées. Si vous avez besoin de mettre à jour régulièrement de grands ensembles de fichiers et que vous ne voulez transférer que ce qui a changé, aws s3 sync est généralement la meilleure option, bien que aws s3 cp avec --exact-timestamps puisse fonctionner pour des besoins de synchronisation plus simples.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Scientifique de données senior basé en Croatie. Rédacteur technique de premier plan avec plus de 700 articles publiés, générant plus de 10 millions de vues. Auteur du livre Machine Learning Automation with TPOT.
Sujets

Apprenez-en plus sur AWS grâce à ces cours !

Cours

Introduction to AWS Boto in Python

4 h
16.6K
Learn about AWS Boto and harnessing cloud technology to optimize your data workflow.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow