翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon S3 Transfer Manager を使用してファイルとディレクトリを転送する
Amazon S3 転送マネージャは、 AWS SDK for Java 2.x用のオープンソースの高レベルファイル転送ユーティリティです。Amazon Simple Storage Service (Amazon S3) との間でファイルやディレクトリを転送するために使用します。
AWS CRT ベースの S3 クライアント 上に構築すると、S3 Transfer Manager ではマルチパートアップロード API やバイト範囲フェッチなどのパフォーマンスの向上を活用できます。
S3 Transfer Manager では、転送の進行状況をリアルタイムでモニタリングし、転送を一時停止して後で実行することもできます。
使用を開始する
ビルドファイルに依存関係を追加する
AWS CRT ベースの S3 クライアントに基づく強化されたパフォーマンスで S3 Transfer Manager を使用するには、次の依存関係を使用してビルドファイルを設定します。
-
SDK for Java 2.x のバージョン
2.19.1
以降を使用します。 -
s3-transfer-manager
アーティファクトを依存関係として追加します。 -
バージョン
0.20.3
以降のaws-crt
アーティファクトを依存関係として追加します。
次のコード例は、プロジェクトの Maven 依存関係を設定する方法を示しています。
<project> <properties> <aws.sdk.version>
2.19.1
</aws.sdk.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>${aws.sdk.version}</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.20.3
</version> </dependency> </dependencies> </project>
Maven central リポジトリで s3-transfer-manager
S3 Transfer Manager のインスタンスを作成する
次のスニペットは、デフォルト設定で S3TransferManager
S3TransferManager transferManager = S3TransferManager.create();
次の例は、カスタム設定で S3 Transfer Manager を設定する方法を示しています。この例では、AWS CRT ベースの S3AsyncClient インスタンスが S3 Transfer Manager の基盤となるクライアントとして使用されます。
S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * MB) .build(); S3TransferManager transferManager = S3TransferManager.builder() .s3Client(s3AsyncClient) .build();
注記
aws-crt
依存関係がビルドファイルに含まれていない場合、S3 Transfer Manager は SDK for Java 2.x で使用されている標準 S3 非同期クライアント上に構築されます。
S3 バケットにファイルをアップロードする
次の例は、ファイルのアップロード例とLoggingTransferListener
S3 Transfer Manager を使用して Amazon S3 にファイルをアップロードするには、S3TransferManager
の uploadFileUploadFileRequest
uploadFile
メソッドから返される FileUpload
public String uploadFile(S3TransferManager transferManager, String bucketName, String key, URI filePathURI) { UploadFileRequest uploadFileRequest = UploadFileRequest.builder() .putObjectRequest(b -> b.bucket(bucketName).key(key)) .addTransferListener(LoggingTransferListener.create()) .source(Paths.get(filePathURI)) .build(); FileUpload fileUpload = transferManager.uploadFile(uploadFileRequest); CompletedFileUpload uploadResult = fileUpload.completionFuture().join(); return uploadResult.response().eTag(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedFileUpload; import software.amazon.awssdk.transfer.s3.model.FileUpload; import software.amazon.awssdk.transfer.s3.model.UploadFileRequest; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; import java.util.UUID;
S3 バケットからのファイルのダウンロード
次の例は、ダウンロードの進行状況をログLoggingTransferListener
S3 Transfer Manager を使用して S3 バケットからオブジェクトをダウンロードするには、DownloadFileRequest
S3TransferManager
の downloadFile
メソッドによって返されるFileDownload
public Long downloadFile(S3TransferManager transferManager, String bucketName, String key, String downloadedFileWithPath) { DownloadFileRequest downloadFileRequest = DownloadFileRequest.builder() .getObjectRequest(b -> b.bucket(bucketName).key(key)) .addTransferListener(LoggingTransferListener.create()) .destination(Paths.get(downloadedFileWithPath)) .build(); FileDownload downloadFile = transferManager.downloadFile(downloadFileRequest); CompletedFileDownload downloadResult = downloadFile.completionFuture().join(); logger.info("Content length [{}]", downloadResult.response().contentLength()); return downloadResult.response().contentLength(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedFileDownload; import software.amazon.awssdk.transfer.s3.model.DownloadFileRequest; import software.amazon.awssdk.transfer.s3.model.FileDownload; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.UUID;
Amazon S3 バケットを他のバケットにコピーする
次の例は、S3 Transfer Manager を使用してオブジェクトをコピーする方法を示しています。
S3 バケットから別のバケットへのオブジェクトのコピーを開始するには、基本CopyObjectRequest
次に、S3 Transfer Manager CopyRequestCopyObjectRequest
で基本 をラップします。
S3TransferManager
の copy
メソッドによって返される Copy
オブジェクトはコピープロセスを表します。コピープロセスが完了すると、 CompletedCopy
public String copyObject(S3TransferManager transferManager, String bucketName, String key, String destinationBucket, String destinationKey) { CopyObjectRequest copyObjectRequest = CopyObjectRequest.builder() .sourceBucket(bucketName) .sourceKey(key) .destinationBucket(destinationBucket) .destinationKey(destinationKey) .build(); CopyRequest copyRequest = CopyRequest.builder() .copyObjectRequest(copyObjectRequest) .build(); Copy copy = transferManager.copy(copyRequest); CompletedCopy completedCopy = copy.completionFuture().join(); return completedCopy.response().copyObjectResult().eTag(); }
注記
S3 Transfer Manager を使用してクロスリージョンコピーを実行するには、次のスニペットに示すように、 AWS CRT ベースの S3 クライアントビルダーcrossRegionAccessEnabled
で を有効にします。
S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .crossRegionAccessEnabled(true) .build(); S3TransferManager transferManager = S3TransferManager.builder() .s3Client(s3AsyncClient) .build();
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.CopyObjectRequest; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedCopy; import software.amazon.awssdk.transfer.s3.model.Copy; import software.amazon.awssdk.transfer.s3.model.CopyRequest; import java.util.UUID;
ローカルディレクトリを S3 バケットにアップロードする
次の例は、ローカルディレクトリを S3 にアップロードする方法を示しています。
まず、S3TransferManager
インスタンスの uploadDirectory
DirectoryUploadCompleteDirectoryUpload
オブジェクトは、どのファイルが転送に失敗したかなど、転送の結果に関する情報を含めます。
public Integer uploadDirectory(S3TransferManager transferManager, URI sourceDirectory, String bucketName) { DirectoryUpload directoryUpload = transferManager.uploadDirectory(UploadDirectoryRequest.builder() .source(Paths.get(sourceDirectory)) .bucket(bucketName) .build()); CompletedDirectoryUpload completedDirectoryUpload = directoryUpload.completionFuture().join(); completedDirectoryUpload.failedTransfers() .forEach(fail -> logger.warn("Object [{}] failed to transfer", fail.toString())); return completedDirectoryUpload.failedTransfers().size(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryUpload; import software.amazon.awssdk.transfer.s3.model.DirectoryUpload; import software.amazon.awssdk.transfer.s3.model.UploadDirectoryRequest; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; import java.util.UUID;
ローカルディレクトリへの S3 バケットオブジェクトのダウンロード
次の例に示すように、S3 バケットのオブジェクトをローカルディレクトリにダウンロードできます。
S3 バケット内のオブジェクトをローカルディレクトリにダウンロードするには、まず Transfer Manager の downloadDirectory
DirectoryDownloadCompleteDirectoryDownload
オブジェクトは、どのファイルが転送に失敗したかなど、転送の結果に関する情報を含めます。
public Integer downloadObjectsToDirectory(S3TransferManager transferManager, URI destinationPathURI, String bucketName) { DirectoryDownload directoryDownload = transferManager.downloadDirectory(DownloadDirectoryRequest.builder() .destination(Paths.get(destinationPathURI)) .bucket(bucketName) .build()); CompletedDirectoryDownload completedDirectoryDownload = directoryDownload.completionFuture().join(); completedDirectoryDownload.failedTransfers() .forEach(fail -> logger.warn("Object [{}] failed to transfer", fail.toString())); return completedDirectoryDownload.failedTransfers().size(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryDownload; import software.amazon.awssdk.transfer.s3.model.DirectoryDownload; import software.amazon.awssdk.transfer.s3.model.DownloadDirectoryRequest; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors;
完全な例を見る
にはGitHub 、このページのすべての例の完全なコードが含まれています