Utilizar un cliente S3 de alto rendimiento: cliente S3 basado en CRT AWS - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Utilizar un cliente S3 de alto rendimiento: cliente S3 basado en CRT AWS

El cliente S3 basado en AWS CRT, creado sobre el AWSCommon Runtime (CRT), es un cliente asíncrono S3 alternativo. Transfiere objetos hacia y desde Amazon Simple Storage Service (Amazon S3) con un rendimiento y una fiabilidad mejorados mediante el uso automático de la API de carga multiparte de Amazon S3 y de las recuperaciones por rango de bytes.

El cliente S3 basado en AWS CRT mejora la fiabilidad de la transferencia en caso de que se produzca un fallo en la red. La fiabilidad se mejora reintentando partes individuales fallidas de una transferencia de archivos sin reiniciar la transferencia desde el principio.

Además, el cliente S3 basado en AWS CRT ofrece una mejor agrupación de conexiones y un equilibrio de carga del Sistema de Nombres de Dominio (DNS) mejorados, lo que también mejora el rendimiento.

Puede utilizar el cliente S3 basado en AWS CRT en lugar del cliente asíncrono S3 estándar del SDK y aprovechar su rendimiento mejorado de forma inmediata.

Componentes basados en AWS CRT en el SDK

El cliente S3 basado en AWS CRT, que se describe en este tema, y el cliente HTTP basado en AWS CRT son componentes diferentes del SDK.

El cliente S3 AWS basado en CRT es una implementación de la interfaz S3AsyncClient y se utiliza para trabajar con el servicio Amazon S3. Es una alternativa a la implementación de la interfaz S3AsyncClient basada en Java y ofrece varias ventajas.

El cliente HTTP basado en AWS CRT es una implementación de la interfaz SDKAsynchTTPClient y se utiliza para la comunicación HTTP general. Es una alternativa a la implementación Netty de la interfaz SdkAsyncHttpClient basada en Java y ofrece varias ventajas.

Aunque ambos componentes utilizan bibliotecas del AWS Common Runtime, el cliente S3 basado en AWS CRT utiliza la biblioteca aws-c-s3 y soporta las características de la API de carga multiparte de S3. Como el cliente HTTP basado en AWS CRT está diseñado para un uso general, no admite las características de la API de carga multiparte de S3.

Agregar dependencias para usar el cliente S3 basado en AWS CRT

Para usar el cliente S3 basado en AWS CRT, añada las dos dependencias siguientes al archivo de proyecto de Maven. En el ejemplo siguiente se muestran las versiones mínimas que se utilizarán. Busque en el repositorio central de Maven las versiones más recientes de los artefactos s3 y 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>

Crear una instancia del cliente S3 basado en AWS CRT

Cree una instancia del cliente S3 basado en AWS CRT con la configuración predeterminada, como se muestra en el siguiente fragmento de código.

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

Para configurar el cliente, utilice el creador de clientes AWS CRT. Puede cambiar del cliente asíncrono S3 estándar al cliente basado en AWS CRT cambiando el método de creación.

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();
nota

Es posible que algunas de las configuraciones del creador estándar no sean compatibles actualmente con el creador de clientes AWS CRT. Obtener el creador estándar llamando a S3AsyncClient#builder().

Utilizar el Cliente S3 basado en AWS CRT

Utilice el cliente S3 basado en AWS CRT para llamar a las operaciones de API de Amazon S3. El ejemplo siguiente muestra las operaciones PutObject y GetObject mediante el AWS 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();