메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

Amazon S3 Transfer Acceleration 예제

이 단원에서는 버킷에서 Amazon S3 Transfer Acceleration을 설정하는 방법과 설정된 버킷에 대해 가속 엔드포인트를 사용하는 방법의 예를 설명합니다. 일부 AWS SDK 지원 언어(예: Java, .NET)는 가속 엔드포인트 클라이언트 구성 플래그를 사용하므로, Transfer Acceleration의 엔드포인트를 bucketname.s3-accelerate.amazonaws.com으로 명시적으로 설정할 필요가 없습니다. Transfer Acceleration에 대한 자세한 내용은 Amazon S3 Transfer Acceleration 단원을 참조하십시오.

Amazon S3 콘솔 사용

Amazon S3 콘솔을 사용하여 버킷에서 Transfer Acceleration을 설정하는 방법은 Amazon Simple Storage Service 콘솔 사용 설명서Transfer Acceleration 설정을 참조하십시오.

AWS Command Line Interface(AWS CLI)의 Transfer Acceleration 사용

이 단원에서는 Transfer Acceleration에 사용되는 AWS CLI 명령의 예를 설명합니다. AWS CLI를 설치하는 지침은 AWS CLI 설치 단원을 참조하십시오.

AWS CLI를 사용하여 버킷에 Transfer Acceleration 설정

AWS CLI put-bucket-accelerate-configuration 명령을 사용하여 버킷에 Transfer Acceleration을 설정하거나 중지할 수 있습니다. 다음은 버킷에서 Transfer Acceleration을 사용하기 위해 Status=Enabled를 설정하는 예제입니다. Transfer Acceleration을 중지하려면 Status=Suspended를 사용합니다.

Copy
$ aws s3api put-bucket-accelerate-configuration --bucket bucketname --accelerate-configuration Status=Enabled

AWS CLI의 Transfer Acceleration 사용

AWS Config 파일의 프로파일에서 use_accelerate_endpoint 구성 값을 true로 설정하면 s3 및 s3api AWS CLI 명령을 통해 이루어진 Amazon S3 요청이 모두 가속 엔드포인트 s3-accelerate.amazonaws.com으로 지정됩니다. 가속 엔드포인트를 사용하려면 버킷에서 Transfer Acceleration을 사용하도록 설정해야 합니다.

모든 요청은 가상 방식의 버킷 주소 지정 my-bucket.s3-accelerate.amazonaws.com을 사용하여 전송됩니다. ListBuckets, CreateBucket, DeleteBucket 요청은 엔드포인트에서 해당 작업을 지원하지 않기 때문에 가속 엔드포인트로 전송되지 않습니다. use_accelerate_endpoint에 대한 자세한 내용은 AWS CLI S3 구성을 참조하십시오.

다음 예는 기본 프로파일에서 use_accelerate_endpointtrue로 설정합니다.

Copy
$ aws configure set default.s3.use_accelerate_endpoint true

일부 AWS CLI 명령에는 가속 엔드포인트를 사용하고 다른 명령에는 사용하지 않으려면 다음 방법 중 하나를 사용합니다.

  • s3 or s3api 명령에 대해 --endpoint-url 파라미터를 https://s3-accelerate.amazonaws.com 또는 http://s3-accelerate.amazonaws.com으로 설정하여 명령별로 가속 엔드포인트를 사용할 수 잇습니다.

  • AWS Config 파일에 별도의 프로파일을 설정할 수 있습니다. 예를 들어 use_accelerate_endpointtrue로 설정하는 프로파일을 하나 작성하고, use_accelerate_endpoint를 설정하지 않는 프로파일을 하나 작성합니다. 명령을 실행할 때 가속 엔드포인트를 사용할지 여부에 따라 사용하려는 프로파일을 지정합니다.

Transfer Acceleration 설정 버킷에 객체를 업로드하는 AWS CLI 예제

다음은 가속 엔드포인트를 사용하도록 구성된 기본 프로파일을 사용하여 Transfer Acceleration이 설정된 버킷에 파일을 업로드하는 예제입니다.

Copy
$ aws s3 cp file.txt s3://bucketname/keyname --region region

다음은 --endpoint-url 파라미터를 사용하여 가속 엔드포인트를 지정함으로써 Transfer Acceleration 설정된 버킷에 파일을 업로드하는 예제입니다.

Copy
$ aws configure set s3.addressing_style virtual $ aws s3 cp file.txt s3://bucketname/keyname --region region --endpoint-url http://s3-accelerate.amazonaws.com

Java용 AWS SDK의 Transfer Acceleration 사용

이 단원에서는 Transfer Acceleration에 대해 Java용 AWS SDK를 사용하는 예제를 설명합니다. 실제 Java 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Java 코드 예제 테스트 단원을 참조하십시오.

Java용 AWS SDK에서 버킷에 Amazon S3 Transfer Acceleration 설정

다음은 버킷에 Transfer Acceleration을 설정하는 방법을 보여 주는 Java 예제입니다.

Copy
import java.io.IOException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.BucketAccelerateConfiguration; import com.amazonaws.services.s3.model.BucketAccelerateStatus; import com.amazonaws.services.s3.model.GetBucketAccelerateConfigurationRequest; import com.amazonaws.services.s3.model.SetBucketAccelerateConfigurationRequest; public class BucketAccelertionConfiguration { public static String bucketName = "*** Provide bucket name ***"; public static AmazonS3Client s3Client; public static void main(String[] args) throws IOException { s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.setRegion(Region.getRegion(Regions.US_WEST_2)); // 1. Enable bucket for Amazon S3 Transfer Acceleration. s3Client.setBucketAccelerateConfiguration(new SetBucketAccelerateConfigurationRequest(bucketName, new BucketAccelerateConfiguration(BucketAccelerateStatus.Enabled))); // 2. Get the acceleration status of the bucket. String accelerateStatus = s3Client.getBucketAccelerateConfiguration(new GetBucketAccelerateConfigurationRequest(bucketName)).getStatus(); System.out.println("Acceleration status = " + accelerateStatus); } }

Java용 AWS SDK에서 Amazon S3 Transfer Acceleration 엔드포인트를 사용하기 위해 Amazon S3 클라이언트 생성

AmazonS3Client 인스턴스를 생성할 때 Transfer Acceleration 엔드포인트를 사용하기 위해 AWS Java SDK의 setS3ClientOptions 메서드를 사용합니다.

Transfer Acceleration 엔드포인트를 사용하기 위해 Amazon S3 Java 클라이언트 생성

다음 예제는 setS3ClientOptions 인스턴스를 생성할 때 Transfer Acceleration 엔드포인트를 사용하기 위해 AWS Java SDK의 AmazonS3Client 메서드를 사용하는 방법을 보여 줍니다.

Copy
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.setRegion(Region.getRegion(Regions.US_WEST_2)); s3Client.setS3ClientOptions(S3ClientOptions.builder().setAccelerateModeEnabled(true).build());

Transfer Acceleration 듀얼 스택 엔드포인트를 사용하기 위해 Amazon S3 Java 클라이언트 생성

다음 예제는 setS3ClientOptions 인스턴스를 생성할 때 Transfer Acceleration 듀얼 스택 엔드포인트를 사용하기 위해 AWS Java SDK의 AmazonS3Client 메서드를 사용하는 방법을 보여 줍니다.

Copy
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.setRegion(Region.getRegion(Regions.US_WEST_2)); s3Client.setS3ClientOptions(S3ClientOptions.builder().enableDualstack().setAccelerateModeEnabled(true).build());

Transfer Acceleration 듀얼 스택 엔드포인트를 사용하기 위해 Microsoft Windows에서 AWS Java SDK를 사용하는 경우, 다음과 같은 JVM(Java 가상 머신) 속성을 설정해야 할 수 있습니다.

Copy
java.net.preferIPv6Addresses=true

Java용 AWS SDK를 사용하여 Transfer Acceleration 설정 버킷에 객체 업로드

이 단원의 Java 예제는 가속 엔드포인트를 사용하여 객체를 업로드하는 방법을 보여 줍니다. Transfer Acceleration 듀얼 스택 엔드포인트를 사용하기 위해 Amazon S3 Java 클라이언트 생성에서 설명한 바와 같이, AmazonS3Client 인스턴스를 만드는 코드를 변경함으로써 Transfer Acceleration 듀얼 스택 엔드포인트 예제를 사용할 수 있습니다.

실제 Java 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Java 코드 예제 테스트 단원을 참조하십시오.

Java 예제: Transfer Acceleration 설정 버킷에 객체 하나 업로드

다음은 가속 엔드포인트를 사용하여 단일 객체를 업로드하는 방법을 보여 주는 Java 예제입니다.

Copy
import java.io.File; import java.io.IOException; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.S3ClientOptions; import com.amazonaws.services.s3.model.PutObjectRequest; public class AcceleratedUploadSingleObject { private static String bucketName = "*** Provide bucket name ***"; private static String keyName = "*** Provide key name ***"; private static String uploadFileName = "*** Provide file name with full path ***"; public static void main(String[] args) throws IOException { AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.setRegion(Region.getRegion(Regions.US_WEST_2)); // Use Amazon S3 Transfer Acceleration endpoint. s3Client.setS3ClientOptions(S3ClientOptions.builder().setAccelerateModeEnabled(true).build()); try { System.out.println("Uploading a new object to S3 from a file\n"); File file = new File(uploadFileName); s3Client.putObject(new PutObjectRequest( bucketName, keyName, file)); } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which " + "means your request made it " + "to Amazon S3, but was rejected with an error response" + " for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which " + "means the client encountered " + "an internal error while trying to " + "communicate with S3, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } }

Java 예제: Transfer Acceleration 설정 버킷에 멀티파트 업로드

다음은 멀티파트 업로드에 가속 엔드포인트를 사용하는 방법을 보여 주는 Java 예제입니다.

Copy
import java.io.File; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.S3ClientOptions; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.Upload; public class AccelerateMultipartUploadUsingHighLevelAPI { private static String EXISTING_BUCKET_NAME = "*** Provide bucket name ***"; private static String KEY_NAME = "*** Provide key name ***"; private static String FILE_PATH = "*** Provide file name with full path ***"; public static void main(String[] args) throws Exception { AmazonS3Client s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.configureRegion(Regions.US_WEST_2); // Use Amazon S3 Transfer Acceleration endpoint. s3Client.setS3ClientOptions(S3ClientOptions.builder().setAccelerateModeEnabled(true).build()); TransferManager tm = new TransferManager(s3Client); System.out.println("TransferManager"); // TransferManager processes all transfers asynchronously, // so this call will return immediately. Upload upload = tm.upload( EXISTING_BUCKET_NAME, KEY_NAME, new File(FILE_PATH)); System.out.println("Upload"); try { // Or you can block and wait for the upload to finish upload.waitForCompletion(); System.out.println("Upload complete"); } catch (AmazonClientException amazonClientException) { System.out.println("Unable to upload file, upload was aborted."); amazonClientException.printStackTrace(); } } }

.NET용 AWS SDK의 Transfer Acceleration 사용

이 단원에서는 Transfer Acceleration에 .NET용 AWS SDK를 사용하는 예제를 설명합니다. 실제 .NET 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예시 실행 단원을 참조하십시오.

.NET 예제 1: 버킷에 Transfer Acceleration 설정

다음은 버킷에 Transfer Acceleration을 설정하는 방법을 보여 주는 .NET 예제입니다.

Copy
using System; using System.Collections.Generic; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Util; namespace s3.amazon.com.docsamples { class SetTransferAccelerateState { private static string bucketName = "Provide bucket name"; public static void Main(string[] args) { using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USWest2)) try { EnableTransferAcclerationOnBucket(s3Client); BucketAccelerateStatus bucketAcclerationStatus = GetBucketAccelerateState(s3Client); Console.WriteLine("Acceleration state = '{0}' ", bucketAcclerationStatus); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for the service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when setting transfer acceleration", amazonS3Exception.Message); } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void EnableTransferAcclerationOnBucket(IAmazonS3 s3Client) { PutBucketAccelerateConfigurationRequest request = new PutBucketAccelerateConfigurationRequest { BucketName = bucketName, AccelerateConfiguration = new AccelerateConfiguration { Status = BucketAccelerateStatus.Enabled } }; PutBucketAccelerateConfigurationResponse response = s3Client.PutBucketAccelerateConfiguration(request); } static BucketAccelerateStatus GetBucketAccelerateState(IAmazonS3 s3Client) { GetBucketAccelerateConfigurationRequest request = new GetBucketAccelerateConfigurationRequest { BucketName = bucketName }; GetBucketAccelerateConfigurationResponse response = s3Client.GetBucketAccelerateConfiguration(request); return response.Status; } } }

.NET 예제 2: Transfer Acceleration 설정 버킷에 객체 하나 업로드

다음은 가속 엔드포인트를 사용하여 단일 객체를 업로드하는 방법을 보여 주는 .NET 예제입니다.

Copy
using System; using System.Collections.Generic; using Amazon; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Util; namespace s3.amazon.com.docsamples { public class UploadtoAcceleratedBucket { private static RegionEndpoint TestRegionEndpoint = RegionEndpoint.USWest2; private static string bucketName = "Provide bucket name"; static string keyName = "*** Provide key name ***"; static string filePath = "*** Provide filename of file to upload with the full path ***"; public static void Main(string[] args) { using (var client = new AmazonS3Client(new AmazonS3Config { RegionEndpoint = TestRegionEndpoint, UseAccelerateEndpoint = true })) { WriteObject(client); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } } static void WriteObject(IAmazonS3 client) { try { PutObjectRequest putRequest = new PutObjectRequest { BucketName = bucketName, Key = keyName, FilePath = filePath, }; client.PutObject(putRequest); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "For service sign up go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when writing an object" , amazonS3Exception.Message); } } } } }

.NET 예제 3: Transfer Acceleration 설정 버킷에 멀티파트 업로드

다음은 .NET 멀티파트 업로드에 가속 엔드포인트를 사용하는 방법을 보여 주는 Java 예제입니다.

Copy
using System; using System.IO; using Amazon; using Amazon.S3; using Amazon.S3.Model; using Amazon.S3.Transfer; namespace s3.amazon.com.docsamples { class AcceleratedUploadFileMPUHAPI { private static RegionEndpoint TestRegionEndpoint = RegionEndpoint.USWest2; private static string existingBucketName = "Provide bucket name"; private static string keyName = "*** Provide your object key ***"; private static string filePath = "*** Provide file name with full path ***"; static void Main(string[] args) { try { var client = new AmazonS3Client(new AmazonS3Config { RegionEndpoint = TestRegionEndpoint, UseAccelerateEndpoint = true }); using (TransferUtility fileTransferUtility = new TransferUtility(client)) { // 1. Upload a file, file name is used as the object key name. fileTransferUtility.Upload(filePath, existingBucketName); Console.WriteLine("Upload 1 completed"); // 2. Specify object key name explicitly. fileTransferUtility.Upload(filePath, existingBucketName, keyName); Console.WriteLine("Upload 2 completed"); // 3. Upload data from a type of System.IO.Stream. using (FileStream fileToUpload = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { fileTransferUtility.Upload(fileToUpload, existingBucketName, keyName); } Console.WriteLine("Upload 3 completed"); // 4.Specify advanced settings/options. TransferUtilityUploadRequest fileTransferUtilityRequest = new TransferUtilityUploadRequest { BucketName = existingBucketName, FilePath = filePath, StorageClass = S3StorageClass.ReducedRedundancy, PartSize = 6291456, // 6 MB. Key = keyName, CannedACL = S3CannedACL.PublicRead }; fileTransferUtilityRequest.Metadata.Add("param1", "Value1"); fileTransferUtilityRequest.Metadata.Add("param2", "Value2"); fileTransferUtility.Upload(fileTransferUtilityRequest); Console.WriteLine("Upload 4 completed"); } } catch (AmazonS3Exception s3Exception) { Console.WriteLine("{0} {1}", s3Exception.Message, s3Exception.InnerException); } } } }

JavaScript용 AWS SDK의 Transfer Acceleration 사용

JavaScript용 AWS SDK를 사용하여 Transfer Acceleration을 활성화하는 예제는 AWS SDK for JavaScript API ReferenceputBucketAccelerateConfiguration 작업 호출을 참조하십시오.

AWS SDK for Python (Boto)의 Transfer Acceleration 사용

SDK for Python을 사용하여 Transfer Acceleration을 활성화하는 방법은 AWS SDK for Python (Boto 3) API Referenceput_bucket_accelerate_configuration을 참조하십시오.

다른 AWS SDK 사용

다른 AWS SDK 사용에 대한 자세한 내용은 샘플 코드 및 라이브러리를 참조하십시오.