Amazon S3 Transfer Manager のバージョン 1 からバージョン 2 への変更 - AWS SDK for Java 2.x

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 Transfer Manager のバージョン 1 からバージョン 2 への変更

このトピックでは、Amazon S3 Transfer Manager のバージョン 1 (v1) からバージョン 2 (v2) への変更点について詳しく説明します。

高レベル変更

変更 v1 v2

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>
パッケージ名 com.amazonaws.services.s3.transfer software.amazon.awssdk.transfer.s3
Class name

TransferManager

S3TransferManager

1 最新バージョン2 最新バージョン3 最新バージョン

設定 API の変更

設定 v1 v2

(ビルダーを入手する)

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

S3 クライアント

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

エグゼキュター

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

スレッドプールをシャットダウンする

tmBuilder.withShutDownThreadPools(...); tmBuilder.setShutdownThreadPools(...);
サポート外。指定されたエグゼキューターは、S3TransferManager が閉じられたときにシャットダウンされません。

最小アップロードパートサイズ

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

マルチパートアップロードのしきい値

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

最小コピーパーツサイズ

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

マルチパートコピーのしきい値

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

並列ダウンロードを無効にする

tmBuilder.withDisableParallelDownloads(...); tmBuilder.setDisableParallelDownloads(...);
標準 Java ベースの S3 クライアントを転送マネージャに渡して、並列ダウンロードを無効にします。
S3AsyncClient s3 = S3AsyncClient.builder().build(); tmBuilder.s3Client(s3);

常にマルチパート md5 を計算する

tmBuilder.withAlwaysCalculateMultipartMd5(...); tmBuilder.setAlwaysCalculateMultipartMd5(...);
サポート外。

動作の変更

並列転送には AWS CRT ベースの S3 クライアントが必要です

SDK for Java 2.x では、自動並列転送機能 (マルチパートアップロード/ダウンロード) が AWS CRT ベースの S3 クライアントから利用できます。並列転送機能を有効にするには、パフォーマンスを最大化するために AWS 共通ランタイム (CRT) ライブラリの依存関係を明示的に追加する必要があります。

AWS CRT ベースの S3 クライアントだけが使用せずにS3TransferManager並列転送のパフォーマンスを最大化します。v2 S3TransferManager には、ファイルやディレクトリの転送を容易にする追加の APIs が用意されています。

S3TransferManager が並列転送を実行する機能は、 S3TransferManagerの開始方法と、 AWS Common Runtime (CRT) ライブラリが依存関係として宣言されているかどうかによって異なります。

次の表は、 AWS CRT が依存関係として宣言されているかどうかにかかわらず、S3TransferManagerv2 の 3 つの初期化シナリオを示しています。

S3TransferManager v2 初期化アプローチ AWS CRT は依存関係として宣言されていますか?
はい いいえ

S3AsyncClient インスタンスを渡さずに S3TransferManager を初期化する

静的作成メソッド:

S3TransferManager.create();

- または -

ビルダーメソッド:

S3TransferManager.builder().build();
自動並列転送が有効になっていることを示す緑色のチェックマーク。

自動並列転送が有効

自動並列転送が無効になっていることを示す赤色の X。

自動並列転送が無効

crt* () ビルダーメソッドのいずれかで構築された S3AsyncClient インスタンスを渡す

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

- または -

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate(); S3TransferManager.builder().s3AsyncClient(s3AsyncClient).build();
自動並列転送が有効になっていることを示す緑色のチェックマーク。

自動並列転送が有効

自動並列転送が無効になっていることを示す赤色の X。

ランタイムエラー

標準ビルダーメソッドのいずれかで構築された S3AsyncClient インスタンスを渡して、転送マネージャーが CRT を参照しないようにする

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

- または -

S3AsyncClient s3AsyncClient = S3AsyncClient.create(); S3TransferManager.builder().s3AsyncClient(s3AsyncClient).build();
自動並列転送が無効になっていることを示す赤色の X。

自動並列転送が無効

自動並列転送が無効になっていることを示す赤色の X。

自動並列転送が無効

バイト範囲フェッチによる並列ダウンロード

自動並列転送機能が有効になっている場合、S3 Transfer Manager v2 はバイト範囲フェッチを使用してオブジェクトの特定の部分を並列して取得します (マルチパートダウンロード)。v2 でのオブジェクトのダウンロード方法は、オブジェクトが最初にアップロードされた方法には依存しません。すべてのダウンロードで、高いスループットと同時実行性のメリットが得られます。

これとは対照的に、S3 Transfer Manager v1 では、オブジェクトが最初にどのようにアップロードされたかが問題になります。S3 Transfer Manager v1 は、パーツがアップロードされたのと同じ方法でオブジェクトの一部を取得します。オブジェクトが元々単一のオブジェクトとしてアップロードされた場合、S3 Transfer Manager v1 はサブリクエストを使用してダウンロードプロセスを高速化することはできません。

失敗動作

S3 Transfer Manager v1 では、いずれかのサブリクエストが失敗すると、ディレクトリ転送リクエストは失敗します。v1 とは異なり、S3 Transfer Manager v2 から返される Future は、一部のサブリクエストが失敗しても正常に完了します。

そのため、Future が正常に完了した場合でも、CompletedDirectoryDownload.failedTransfers() メソッドまたは CompletedDirectoryUpload.failedTransfers() メソッドを使用してレスポンスにエラーがないかどうかを確認する必要があります。