기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon S3 Transfer Manager로 파일 및 디렉터리 전송
Amazon S3 Transfer Manager는 AWS SDK for Java 2.x를 위한 오픈 소스의 고급 파일 전송 유틸리티입니다. 이를 사용하여 Amazon Simple Storage Service(Amazon S3)와 파일 및 디렉터리를 주고받을 수 있습니다.
멀티파트가 AWS CRT활성화된 표준 Java 기반 S3 비동기 클라이언트 또는 기반 S3 클라이언트를 기반으로 구축된 경우 S3 Transfer Manager는 멀티파트 업로드 API 및 바이트 범위 가져오기와 같은 성능 개선을 활용할 수 있습니다. S3
S3 Transfer Manager를 사용하면 전송 진행 상황을 실시간으로 모니터링하고 나중에 실행하기 위해 전송을 일시 중지할 수도 있습니다.
시작
빌드 파일에 종속성을 추가
향상된 멀티파트 성능으로 S3 Transfer Manager를 사용하려면 필요한 종속성을 사용하여 빌드 파일을 구성합니다.
S3 Transfer Manager 인스턴스를 생성
병렬 전송을 활성화하려면 AWS CRT멀티파트가 활성화된 기반 S3 클라이언트 또는 Java 기반 S3 비동기 클라이언트를 전달해야 합니다. 다음 예제에서는 사용자 지정 설정을 사용하여 S3 Transfer Manager를 구성하는 방법을 보여줍니다.
S3 버킷으로 파일을 업로드하려면
다음 예제에서는 파일 업로드 예제와 업로드 진행 상황을 기록LoggingTransferListener
S3 Transfer Manager를 사용하여 Amazon S3에 파일을 업로드하려면 UploadFileRequest
S3TransferManager
의 uploadFile
uploadFile
메서드에서 반환된 FileUpload
public String uploadFile(S3TransferManager transferManager, String bucketName, String key, URI filePathURI) { UploadFileRequest uploadFileRequest = UploadFileRequest.builder() .putObjectRequest(b -> b.bucket(bucketName).key(key)) .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)) .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.io.IOException; 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 ManagerCopyObjectRequest
에서 사용할 수 CopyRequest
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 에는 이 페이지의 모든 예제에 대한 전체