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 S3S3AsyncClient
interface et offre plusieurs avantages.
Le client HTTP AWS CRT est une implémentation de l'SdkAsyncHttpClientSdkAsyncHttpClient
interface 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
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
<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 GetObject
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();