

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á.

# Use um cliente S3 de alto desempenho: cliente S3 baseado em AWS CRT
<a name="crt-based-s3-client"></a>

O cliente S3 AWS baseado em CRT, construído com base no [AWS Common Runtime (CRT), é um cliente assíncrono](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html) S3 alternativo. 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html) e as [buscas de intervalo de bytes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance-guidelines.html#optimizing-performance-guidelines-get-range) do Amazon S3. 

O cliente S3 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 S3 AWS baseado em CRT oferece pool de conexões aprimorado e balanceamento de carga do Sistema de Nomes de Domínio (DNS), o que também melhora a taxa de transferência.

Você pode usar o cliente S3 AWS baseado em CRT no lugar do cliente assíncrono S3 padrão do SDK e aproveitar imediatamente sua taxa de transferência aprimorada.

**Importante**  
Atualmente, o cliente S3 AWS baseado em CRT não oferece suporte à [coleta de métricas do SDK](metrics.md) no nível do cliente nem no nível da solicitação.

**AWS Componentes baseados em CRT no SDK**

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

O **cliente S3 AWS baseado em CRT** é uma implementação da AsyncClient interface [S3](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html) 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 AWS baseado em CRT](http-configuration-crt.md) é uma implementação da [SdkAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/async/SdkAsyncHttpClient.html)interface e é usado para comunicação HTTP geral. Essa é uma alternativa à implementação da interface `SdkAsyncHttpClient` do Netty e oferece várias vantagens.

Embora ambos os componentes usem bibliotecas do [AWS Common Runtime](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html), o cliente S3 AWS baseado em CRT usa a [biblioteca aws-c-s 3 e oferece suporte aos recursos](https://github.com/awslabs/aws-c-s3) da API de upload de [várias partes do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html). Como o cliente HTTP AWS baseado em CRT é destinado ao uso geral, ele não oferece suporte aos recursos da API de upload de várias partes do S3.

## Adicione dependências para usar o cliente S3 baseado em AWS CRT
<a name="crt-based-s3-client-depend"></a>

Para usar o cliente S3 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](https://central.sonatype.com/artifact/software.amazon.awssdk/s3) e [aws-crt](https://central.sonatype.com/artifact/software.amazon.awssdk.crt/aws-crt).

```
<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>s3</artifactId>
  <version>2.27.21</version>
</dependency>
<dependency>
  <groupId>software.amazon.awssdk.crt</groupId>
  <artifactId>aws-crt</artifactId>
  <version>0.30.11</version>
</dependency>
```

## Crie uma instância do cliente S3 AWS baseado em CRT
<a name="crt-based-s3-client-create"></a>

 Crie uma instância do cliente S3 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 AWS CRT Client Builder. Você pode alternar do cliente assíncrono S3 padrão para o cliente AWS baseado em CRT alterando o método builder.

```
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()`.

## Use o cliente AWS S3 baseado em CRT
<a name="crt-based-s3-client-use"></a>

Use o cliente S3 AWS baseado em CRT para chamar as operações de API do Amazon S3. O exemplo a seguir demonstra as [GetObject](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html#getObject(java.util.function.Consumer,software.amazon.awssdk.core.async.AsyncResponseTransformer))operações [PutObject](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html#putObject(java.util.function.Consumer,software.amazon.awssdk.core.async.AsyncRequestBody))e disponíveis por meio do AWS SDK para 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();
```

## Upload de fluxos de tamanho desconhecido
<a name="crt-stream-unknown-size"></a>

Uma vantagem significativa do cliente S3 AWS AWS baseado em CRT é sua capacidade de lidar com fluxos de entrada de tamanho desconhecido com eficiência. Isso é útil principalmente quando você precisa carregar dados de uma origem em que o tamanho total não pode ser determinado com antecedência.

```
public PutObjectResponse crtClient_stream_unknown_size(String bucketName, String key, InputStream inputStream) {

    S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();
    ExecutorService executor = Executors.newSingleThreadExecutor();
    AsyncRequestBody body = AsyncRequestBody.fromInputStream(inputStream, null, executor);  // 'null' indicates that the
                                                                                            // content length is unknown.
    CompletableFuture<PutObjectResponse> responseFuture =
            s3AsyncClient.putObject(r -> r.bucket(bucketName).key(key), body)
                    .exceptionally(e -> {
                        if (e != null){
                            logger.error(e.getMessage(), e);
                        }
                        return null;
                    });

    PutObjectResponse response = responseFuture.join(); // Wait for the response.
    executor.shutdown();
    return response;
}
```

Esse recurso ajuda a evitar problemas comuns com os carregamentos tradicionais, nos quais uma especificação incorreta do tamanho do conteúdo pode resultar em objetos truncados ou em uploads malsucedidos.

## Limitações de configuração
<a name="crt-based-s3-client-limitations"></a>

O cliente S3 AWS baseado em CRT e o cliente assíncrono S3 baseado em Java [fornecem recursos comparáveis](examples-s3.md#s3-clients), com o cliente S3 baseado em CRT oferecendo uma vantagem de desempenho. AWS No entanto, o cliente S3 AWS baseado em CRT não tem as configurações que o cliente assíncrono S3 baseado em Java tem. Essas configurações incluem:
+ *Configuração no nível de cliente:* tempo limite de tentativa de chamada de API, interceptores de execução de compressão, publicadores de métricas, atributos de execução personalizados, opções avançadas personalizadas, serviço de executor programado personalizado, cabeçalhos personalizados
+ *Configuração em nível de solicitação:* assinantes personalizados, tempo limite de tentativa de chamada de API

Consulte uma lista completa das diferenças de configuração na referência da API.


| Cliente assíncrono do S3 baseado em Java | AWS Cliente S3 baseado em CRT | 
| --- | --- | 
| Configurações no nível do cliente[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/sdk-for-java/latest/developer-guide/crt-based-s3-client.html)Configurações no nível de solicitação[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/sdk-for-java/latest/developer-guide/crt-based-s3-client.html) | Configurações no nível do cliente[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/sdk-for-java/latest/developer-guide/crt-based-s3-client.html)Configurações no nível de solicitação[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/sdk-for-java/latest/developer-guide/crt-based-s3-client.html) | 