Utiliser un client S3 performant : client S3 AWS basé sur CRT - AWS SDK for Java 2.x

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser un client S3 performant : client S3 AWS basé sur CRT

Le client S3 AWS basé sur CRT, basé sur le AWSCommon Runtime (CRT), est un client asynchrone S3 alternatif. Il transfère des objets vers et depuis Amazon Simple Storage Service (Amazon S3) avec des performances et une fiabilité améliorées en utilisant automatiquement l'API de téléchargement en plusieurs parties d'Amazon S3 et les extractions par plage d'octets.

Le client S3 AWS basé sur CRT améliore la fiabilité des transferts en cas de défaillance du réseau. La fiabilité est améliorée en réessayant les différentes parties défaillantes d'un transfert de fichiers sans recommencer le transfert depuis le début.

En outre, le client S3 AWS basé sur CRT offre un regroupement de connexions amélioré et un équilibrage de charge du système de noms de domaine (DNS), ce qui améliore également le débit.

Vous pouvez utiliser le client S3 AWS basé sur CRT à la place du client asynchrone S3 standard du SDK et profiter immédiatement de son débit amélioré.

AWSComposants du SDK basés sur le CRT

Le client S3 AWS basé sur CRT, décrit dans cette rubrique, et le client HTTP AWS basé sur CRT sont des composants différents du SDK.

Le client S3 AWS basé sur CRT est une implémentation de l'AsyncClientinterface S3 et est utilisé pour travailler avec le service Amazon S3. Il s'agit d'une alternative à l'implémentation Java de l'S3AsyncClientinterface et offre plusieurs avantages.

Le client HTTP AWS CRT est une implémentation de l'SdkAsyncHttpClientinterface et est utilisé pour les communications HTTP générales. Il s'agit d'une alternative à l'implémentation Netty de l'SdkAsyncHttpClientinterface et offre plusieurs avantages.

Bien que les deux composants utilisent des bibliothèques issues du AWSCommon Runtime, le client S3 AWS basé sur CRT utilise la bibliothèque aws-c-s 3 et prend en charge les fonctionnalités de l'API de téléchargement partitionné S3. Le client HTTP AWS CRT étant destiné à un usage général, il ne prend pas en charge les fonctionnalités de l'API de téléchargement partitionné S3.

Ajoutez des dépendances pour utiliser le client S3 AWS basé sur CRT

Pour utiliser le client S3 AWS basé sur CRT, ajoutez les deux dépendances suivantes à votre fichier de projet Maven. L'exemple montre les versions minimales à utiliser. Recherchez dans le référentiel central Maven les versions les plus récentes des artefacts s3 et aws-crt.

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.20.68</version> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.21.16</version> </dependency>

Création d'une instance du client S3 AWS basé sur CRT

Créez une instance du client S3 AWS basé sur CRT avec les paramètres par défaut, comme indiqué dans l'extrait de code suivant.

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

Pour configurer le client, utilisez le générateur de clients AWS CRT. Vous pouvez passer du client asynchrone S3 standard au client AWS CRT en modifiant la méthode du générateur.

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_WEST_2) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * 1025 * 1024L) .build();
Note

Certains paramètres du générateur standard ne sont peut-être pas actuellement pris en charge dans le générateur client AWS CRT. Obtenez le constructeur standard en appelantS3AsyncClient#builder().

Utiliser le client S3 AWS basé sur CRT

Utilisez le client S3 AWS basé sur CRT pour appeler les opérations d'API Amazon S3. L'exemple suivant illustre les GetObjectopérations PutObjectet disponibles via leAWS SDK for Java.

import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.PutObjectResponse; S3AsyncClient s3Client = S3AsyncClient.crtCreate(); // Upload a local file to Amazon S3. PutObjectResponse putObjectResponse = s3Client.putObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncRequestBody.fromFile(Paths.get(<FILE_NAME>))) .join(); // Download an object from Amazon S3 to a local file. GetObjectResponse getObjectResponse = s3Client.getObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncResponseTransformer.toFile(Paths.get(<FILE_NAME>))) .join();