Comment puis-je améliorer les performances de transfert de la commande de synchronisation pour Amazon S3 ?

Date de la dernière mise à jour : 09/07/2020

J'utilise la commande de synchronisation de l'interface de ligne de commande AWS (AWS CLI) pour transférer des données sur Amazon Simple Storage Service (Amazon S3). Toutefois, le transfert prend beaucoup trop de temps. Comment puis-je améliorer les performances d'un transfert à l'aide de la commande de synchronisation ?

Résolution

Essayez les approches suivantes pour améliorer le temps de transfert lorsque vous exécutez la commande de synchronisation :

Remarque : la commande de synchronisation compare les compartiments source et de destination pour déterminer quels fichiers sources n'existent pas dans le compartiment de destination, ou quels fichiers sources ont été modifiés par rapport aux fichiers du compartiment de destination. Ensuite, la commande de synchronisation copie les fichiers sources nouveaux ou mis à jour dans le compartiment de destination. Le nombre d'objets dans les compartiments source et de destination peut avoir un impact sur le temps nécessaire à la commande de synchronisation pour terminer le processus. Il est important de comprendre comment la taille du transfert peut avoir un impact sur la durée de la synchronisation, ainsi que sur les coûts que vous pouvez encourir pour les requêtes envoyées à Amazon S3 associées à l'opération. 

Exécution de plusieurs instances de l'interface de ligne de commande AWS (AWS CLI)

Pour copier une grande quantité de données, vous pouvez exécuter plusieurs instances de l'interface de ligne de commande AWS (AWS CLI) afin d'effectuer des opérations de synchronisation distinctes en parallèle. Par exemple, vous pouvez exécuter des opérations de synchronisation parallèles pour différents préfixes :

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder1 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder1             

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/folder2 s3://destination-AWSDOC-EXAMPLE-BUCKET/folder2

Vous pouvez également exécuter des opérations de synchronisation parallèles pour séparer les filtres d'exclusion et d'inclusion. Par exemple, les opérations suivantes séparent les fichiers à synchroniser par les noms de clé qui commencent par les chiffres 0 à 4 et les noms de clé qui commencent par les chiffres 5 à 9 :

Remarque : même lorsque vous utilisez des filtres d'exclusion et d'inclusion, la commande de synchronisation vérifie toujours tous les fichiers du compartiment source pour déterminer les fichiers sources qui doivent être copiés vers le compartiment de destination. Cela signifie que si vous avez plusieurs opérations de synchronisation qui ciblent différents préfixes de noms de clé, chaque opération de synchronisation passe en revue tous les fichiers sources. Cependant, en raison des filtres d'exclusion et d'inclusion, seuls les fichiers qui sont inclus dans les filtres sont copiés vers le compartiment de destination.

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "0*" --include "1*" --include "2*" --include "3*" --include "4*"  

aws s3 sync s3://source-AWSDOC-EXAMPLE-BUCKET/ s3://destination-AWSDOC-EXAMPLE-BUCKET/ --exclude "*" --include "5*" --include "6*" --include "7*" --include "8*" --include "9*"

Pour plus d'informations sur l'optimisation des performances de votre charge de travail, consultez la rubrique Modèles de conception des bonnes pratiques : optimisation des performances Amazon S3.

Modification de la valeur de configuration de l'interface de ligne de commande AWS (AWS CLI) pour max_concurrent_requests

Pour améliorer potentiellement les performances, vous pouvez modifier la valeur de max_concurrent_requests. Cette valeur définit le nombre de requêtes pouvant être envoyées simultanément à Amazon S3. La valeur par défaut est 10 et vous pouvez la rehausser. Toutefois, ayez présents à l'esprit les points suivants :

  • L'exécution d'un plus grand nombre de threads consomme plus de ressources sur votre machine. Vous devez vous assurer que votre machine dispose de suffisamment de ressources pour prendre en charge le nombre maximal de requêtes simultanées souhaitées.
  • Un trop grand nombre de demandes simultanées peut surcharger un système, ce qui peut entraîner des expirations de connexion ou ralentir la réactivité du système. Pour éviter les problèmes d'expiration de la connexion à l'interface de ligne de commande AWS (AWS CLI), vous pouvez essayer de définir la valeur -cli-read-timeout ou la valeur -cli-connect-timeout sur 0.

Si vous utilisez Amazon Elastic Compute Cloud (Amazon EC2), vérifiez la configuration de l'instance.

Si vous utilisez une instance EC2 pour exécuter l'opération de synchronisation, tenez compte des éléments suivants :

  • Vérifiez le type d'instance que vous utilisez. Les types d'instances dont la taille est supérieure à m3.xlarge peuvent fournir de meilleurs résultats, car ils ont une bande passante élevée et des réseaux optimisés pour Amazon Elastic Block Store (Amazon EBS).
  • Si l'instance se trouve dans une autre région AWS que le compartiment, pensez à utiliser une instance dans la même région. La réduction de la distance géographique entre l'instance et le compartiment peut réduire la latence.
  • Si l'instance se trouve dans la même région que le compartiment source, pensez à configurer un point de terminaison Amazon Virtual Private Cloud (VPC) pour Amazon S3. Les points de terminaison d'un VPC peuvent aider à améliorer les performances globales.