Alterações do Gerenciador de transferência do Amazon S3 da versão 1 para a versão 2 - 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á.

Alterações do Gerenciador de transferência do Amazon S3 da versão 1 para a versão 2

Este tópico detalha as alterações no Gerenciador de transferência do Amazon S3 da versão 1 (v1) para a versão 2 (v2).

Alterações de alto nível

Alteração v1 v2

Dependências do Maven

<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.5871</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.21.212</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.28.73</version> </dependency> </dependencies>
Nome do pacote com.amazonaws.services.s3.transfer software.amazon.awssdk.transfer.s3
Nome da classe

TransferManager

S3TransferManager

1 Versão mais recente. 2 Versão mais recente. 3 Versão mais recente.

Alterações da API de configuração

Configuração v1 v2

(obtenha um construtor)

TransferManagerBuilder tmBuilder = TransferManagerBuilder.standard();
S3TransferManager.Builder tmBuilder = S3TransferManager.builder();

Cliente do S3

tmBuilder.withS3Client(...); tmBuilder.setS3Client(...);
tmBuilder.s3Client(...);

Executor

tmBuilder.withExecutorFactory(...); tmBuilder.setExecutorFactory(...);
tmBuilder.executor(...);

Encerrar grupos de threads

tmBuilder.withShutDownThreadPools(...); tmBuilder.setShutdownThreadPools(...);
Sem suporte. O executor fornecido não será desligado quando o S3 TransferManager for fechado

Tamanho mínimo da parte de upload

tmBuilder.withMinimumUploadPartSize(...); tmBuilder.setMinimumUploadPartSize(...);
S3AsyncClient s3 = S3AsyncClient.crtBuilder(). minimumPartSizeInBytes(...).build(); tmBuilder.s3Client(s3);

Limite de multipart upload

tmBuilder.withMinimumUploadPartSize(...); tmBuilder.setMinimumUploadPartSize(...);
S3AsyncClient s3 = S3AsyncClient.crtBuilder(). thresholdInBytes(...).build(); tmBuilder.s3Client(s3);

Tamanho mínimo da parte de cópia

tmBuilder.withMinimumUploadPartSize(...); tmBuilder.setMinimumUploadPartSize(...);
S3AsyncClient s3 = S3AsyncClient.crtBuilder(). minimumPartSizeInBytes(...).build(); tmBuilder.s3Client(s3);

Limite de cópia de multipart

tmBuilder.withMinimumUploadPartSize(...); tmBuilder.setMinimumUploadPartSize(...);
S3AsyncClient s3 = S3AsyncClient.crtBuilder(). thresholdInBytes(...).build(); tmBuilder.s3Client(s3);

Desabilitar downloads paralelos

tmBuilder.withDisableParallelDownloads(...); tmBuilder.setDisableParallelDownloads(...);
Desabilite os downloads paralelos passando um cliente S3 padrão baseado em Java para o gerenciador de transferência.
S3AsyncClient s3 = S3AsyncClient.builder().build(); tmBuilder.s3Client(s3);

Sempre calcule o multipart md5

tmBuilder.withAlwaysCalculateMultipartMd5(...); tmBuilder.setAlwaysCalculateMultipartMd5(...);
Sem suporte.

Alteração de comportamento

A transferência paralela requer um cliente AWS S3 baseado em CRT

No SDK para Java 2.x, o recurso de transferência paralela automática (multipart upload/download) está disponível por meio do cliente do S3 baseado em AWS CRT. Para ativar o recurso de transferência paralela, você deve adicionar explicitamente a dependência da biblioteca de Common Runtime (CRT - Tempo de execução comum) da AWS para maximizar o desempenho.

O cliente S3 AWS baseado em CRT sozinho, sem usar, fornece desempenho maximizado de transferências S3TransferManager paralelas. S3TransferManagerA v2 fornece APIs adicionais que facilitam a transferência de arquivos e diretórios.

A capacidade de S3TransferManager realizar transferências paralelas depende de como ela S3TransferManager é iniciada e se a biblioteca AWS Common Runtime (CRT) foi declarada como uma dependência.

A tabela a seguir descreve três cenários de inicialização para uma S3TransferManager v2 com e sem a AWS CRT declarada como dependência.

Abordagem de inicialização do S3 TransferManager v2 O AWS CRT é declarado como uma dependência?
sim não

Inicializar o S3TransferManager sem transmitir uma instância S3AsyncClient

Método de criação estático:

S3TransferManager.create();

- OU -

Método do criador:

S3TransferManager.builder().build();
Uma marca de seleção verde indicando que a transferência paralela automática está habilitada.

transferência paralela automática habilitada

Um X vermelho indicando que a transferência paralela automática está desabilitada.

transferência paralela automática desabilitada

Transmitir uma instância S3AsyncClient criada com um dos métodos do criador crt*()

S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder().build(); S3TransferManager.builder().s3AsyncClient(s3AsyncClient).build();

- OU -

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate(); S3TransferManager.builder().s3AsyncClient(s3AsyncClient).build();
Uma marca de seleção verde indicando que a transferência paralela automática está habilitada.

transferência paralela automática habilitada

Um X vermelho indicando que a transferência paralela automática está desabilitada.

erro de runtime

Transmitir uma instância S3AsyncClient criada com um dos métodos padrão do criador para que o gerente de transferência não tenha nenhuma referência ao CRT

S3AsyncClient s3AsyncClient = S3AsyncClient.builder().build(); S3TransferManager.builder().s3AsyncClient(s3AsyncClient).build();

- OU -

S3AsyncClient s3AsyncClient = S3AsyncClient.create(); S3TransferManager.builder().s3AsyncClient(s3AsyncClient).build();
Um X vermelho indicando que a transferência paralela automática está desabilitada.

transferência paralela automática desabilitada

Um X vermelho indicando que a transferência paralela automática está desabilitada.

transferência paralela automática desabilitada

Download paralelo por meio de buscas de intervalo de bytes

Quando o recurso de transferência paralela automática está ativado, o Gerenciador de transferência do S3 v2 usa buscas de intervalo de bytes para recuperar partes específicas do objeto em paralelo (download multipart). A forma como um objeto é baixado com a v2 não depende de como o objeto foi originalmente carregado. Todos os downloads podem se beneficiar da alta taxa de transferência e da simultaneidade.

Por outro lado, com o Gerenciador de transferência do S3 v1, faz diferença como o objeto foi originalmente carregado. O Gerenciador de transferência do S3 v1 recupera as partes do objeto da mesma forma que as partes foram carregadas. Se um objeto foi originalmente carregado como um único objeto, o Gerenciador de transferência do S3 v1 não é capaz de acelerar o processo de download usando subsolicitações.

Comportamento com falha

Com o Gerenciador de transferência do S3 v1, uma solicitação de transferência de diretório falha se alguma subsolicitação falhar. Diferentemente da v1, o futuro retornado do Gerenciador de transferência do S3 v2 é concluído com êxito mesmo se algumas subsolicitações falharem.

Como resultado, você deve verificar se há erros na resposta usando o método CompletedDirectoryDownload.failedTransfers() ou o método CompletedDirectoryUpload.failedTransfers(), mesmo quando o futuro for concluído com êxito.