Usar um cliente do S3 de alta performance: cliente do S3 baseado no AWS CRT - AWS SDK for Java 2.x

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar um cliente do S3 de alta performance: cliente do S3 baseado no AWS CRT

O cliente do S3 da AWS baseado em CRT, construído com base no Common Runtime (CRT) da AWS, é um cliente assíncrono alternativo do S3. Ele transfere objetos de e para o Amazon Simple Storage Service (Amazon S3) com desempenho e confiabilidade aprimorados usando automaticamente a API de upload de várias partes e as buscas de intervalo de bytes do Amazon S3.

O cliente do S3 da AWS baseado em CRT melhora a confiabilidade da transferência caso haja uma falha na rede. A confiabilidade é aprimorada ao realizar novas tentativas de partes individuais com falha em uma transferência de arquivos sem reiniciar a transferência desde o início.

Além disso, o cliente do S3 da AWS baseado em CRT oferece um pool de conexões aprimorado e balanceamento de carga do Sistema de Nomes de Domínio (DNS), o que também melhora o throughput.

Você pode usar o cliente do S3 da AWS baseado em CRT no lugar do cliente assíncrono do S3 padrão do SDK e aproveitar imediatamente seu throughput aprimorado.

Componentes da AWS baseados em CRT no SDK

O cliente do S3 da AWS baseado em CRT, descrito neste tópico, e o cliente de HTTP da AWS baseado em CRT são componentes diferentes no SDK.

O cliente do S3 da AWS baseado em CRT é uma implementação da interface S3AsyncClient e é usado para trabalhar com o serviço Amazon S3. Ele é uma alternativa à implementação da interface S3AsyncClient baseada em Java e oferece vários benefícios.

O cliente HTTP da AWS baseado em CRT é uma implementação da interface SdkAsyncHttpClient e é usado para a comunicação HTTP em geral. Essa é uma alternativa à implementação da interface SdkAsyncHttpClient do Netty e oferece várias vantagens.

Embora ambos os componentes usem bibliotecas do Common Runtime da AWS, o cliente do S3 da AWS baseado em CRT usa a biblioteca aws-c-s3 e oferece suporte aos atributos da API de upload de várias partes do S3. Como o cliente HTTP da AWS baseado em CRT é destinado ao uso geral, ele não oferece suporte aos atributos da API de upload de várias partes do S3.

Adicionar dependências para usar o cliente do S3 da AWS baseado em CRT

Para usar o cliente do S3 da AWS baseado em CRT, adicione as duas dependências a seguir ao seu arquivo de projeto Maven. O exemplo mostra as versões mínimas a serem usadas. Pesquisar no repositório central do Maven as versões mais recentes dos artefatos s3 e 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>

Criar uma instância do cliente do S3 da AWS baseado em CRT

Crie uma instância do cliente do S3 da AWS baseado em CRT com as configurações padrão, conforme mostrado no trecho de código a seguir.

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

Para configurar o cliente, use o criador de cliente CRT da AWS. Você pode alternar do cliente assíncrono do S3 padrão para o cliente da AWS baseado em CRT alterando o método de construtor.

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

Algumas das configurações no construtor padrão podem não ser suportadas atualmente no construtor de clientes CRT da AWS. Obtenha o construtor padrão chamando S3AsyncClient#builder().

Usar o cliente do S3 baseado em CRT da AWS

Use o cliente do S3 da AWS baseado em CRT para chamar as operações de API do Amazon S3. O exemplo a seguir demonstra as operações PutObject e GetObject disponíveis por meio do 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();