S3 Transfer Acceleration 활성화 및 사용

S3 Transfer Acceleration 활성화 및 사용

Amazon S3 Transfer Acceleration을 사용해 클라이언트와 S3 일반 목적 버킷 사이의 장거리 파일 전송을 빠르고 안전하게 할 수 있어요. S3 콘솔, AWS Command Line Interface(AWS CLI), API, 또는 AWS SDK로 Transfer Acceleration을 활성화할 수 있어요.

이 섹션은 버킷에서 Transfer Acceleration을 활성화하고, 활성화된 버킷의 가속화 엔드포인트를 사용하는 예시를 제공해요. Transfer Acceleration 요구 사항에 대한 자세한 내용은 "빠르고 안전한 파일 전송 구성" 문서를 참고하세요.

참고: 가속화 업로드와 비가속화 업로드 속도를 비교하려면 Amazon S3 Transfer Acceleration Speed Comparison 도구를 여세요. 이 도구는 멀티파트 업로드로 브라우저에서 여러 AWS 리전으로 파일을 Transfer Acceleration 유무에 따라 전송하며, 리전별로 직접 업로드와 가속화 업로드 속도를 비교할 수 있어요.

출처: 문서

본문

콘솔로 Transfer Acceleration 활성화하기

  1. AWS Management Console에 로그인하고 Amazon S3 콘솔(https://console.aws.amazon.com/s3/)을 엽니다.
  2. 왼쪽 탐색 창에서 General purpose buckets를 선택하고, Transfer Acceleration을 활성화할 버킷 이름을 선택해요.
  3. Properties를 선택해요.
  4. Transfer acceleration 아래에서 Edit을 선택해요.
  5. Enable을 선택하고 Save changes를 선택해요.

가속화 데이터 전송에 접근하기

Amazon S3가 버킷의 Transfer Acceleration을 활성화한 후에는 버킷의 Properties 탭을 확인하세요. Transfer acceleration 아래의 Accelerated endpoint에 버킷의 Transfer Acceleration 엔드포인트가 표시돼요. 이 엔드포인트로 버킷으로·버킷에서 가속화 데이터 전송에 접근할 수 있어요. Transfer Acceleration을 일시 중지하면 accelerate 엔드포인트가 더 이상 작동하지 않아요.

AWS CLI 명령 예시

버킷에서 Transfer Acceleration 활성화 — put-bucket-accelerate-configuration 명령으로 활성화하거나 일시 중지할 수 있어요. Status=Enabled로 설정하면 활성화하고, Status=Suspended로 설정하면 일시 중지해요.

$ aws s3api put-bucket-accelerate-configuration --bucket amzn-s3-demo-bucket --accelerate-configuration Status=Enabled

Transfer Acceleration 사용하기 — s3와 s3api AWS CLI 명령이 만든 모든 Amazon S3 요청을 accelerate 엔드포인트(s3-accelerate.amazonaws.com)로 보낼 수 있어요. 이렇게 하려면 AWS Config 파일의 프로필에서 구성 값 use_accelerate_endpoint를 true로 설정하세요. 모든 요청은 가상 스타일 버킷 주소 지정(amzn-s3-demo-bucket.s3-accelerate.amazonaws.com)으로 전송돼요. ListBuckets, CreateBucket, DeleteBucket 요청은 이 엔드포인트가 지원하지 않으므로 accelerate 엔드포인트로 보내지지 않아요.

$ aws configure set default.s3.use_accelerate_endpoint true

일부 AWS CLI 명령에만 accelerate 엔드포인트를 사용하려면 다음 두 가지 방법 중 하나를 사용할 수 있어요.

  • s3 또는 s3api 명령에 --endpoint-url https://s3-accelerate.amazonaws.com 파라미터를 설정해 accelerate 엔드포인트를 사용.
  • AWS Config 파일에 별도 프로필을 설정 — use_accelerate_endpoint를 true로 설정한 프로필과 설정하지 않은 프로필을 만들고, 명령 실행 시 사용할 프로필을 지정.

Transfer Acceleration이 활성화된 버킷에 객체 업로드 — accelerate 엔드포인트를 사용하도록 구성된 기본 프로필로 파일을 업로드할 수 있어요:

$ aws s3 cp file.txt s3://amzn-s3-demo-bucket/key-name --region region

--endpoint-url 파라미터로 accelerate 엔드포인트를 지정할 수도 있어요:

$ aws configure set s3.addressing_style virtual
$ aws s3 cp file.txt s3://amzn-s3-demo-bucket/key-name --region region --endpoint-url https://s3-accelerate.amazonaws.com

AWS SDK로 Transfer Acceleration 사용하기

일부 AWS SDK 지원 언어(예: Java, .NET)는 accelerate 엔드포인트 클라이언트 구성 플래그를 사용하므로 명시적으로 엔드포인트를 설정할 필요가 없어요.

Java 예시 — AWS SDK for Java로 accelerate 엔드포인트를 사용하려면 accelerate 엔드포인트를 사용하도록 구성된 S3Client를 만들고, 지정된 버킷에서 Transfer Acceleration을 활성화한 뒤(이미 활성화되어 있지 않다면), 활성화 여부를 확인하고 가속화 엔드포인트로 새 객체를 업로드해요.

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.BucketAccelerateStatus;
import software.amazon.awssdk.services.s3.model.GetBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutBucketAccelerateConfigurationRequest;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.AccelerateConfiguration;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.core.exception.SdkClientException;

public class TransferAcceleration {
    public static void main(String[] args) {
        Region clientRegion = Region.US_EAST_1;
        String bucketName = "*** Provide bucket name ***";
        String keyName = "*** Provide key name ***";

        try {
            // Create an Amazon S3 client that is configured to use the accelerate endpoint.
            S3Client s3Client = S3Client.builder()
                    .region(clientRegion)
                    .credentialsProvider(ProfileCredentialsProvider.create())
                    .accelerate(true)
                    .build();

            // Enable Transfer Acceleration for the specified bucket.
            s3Client.putBucketAccelerateConfiguration(
                    PutBucketAccelerateConfigurationRequest.builder()
                            .bucket(bucketName)
                            .accelerateConfiguration(AccelerateConfiguration.builder()
                                    .status(BucketAccelerateStatus.ENABLED)
                                    .build())
                            .build());

            // Verify that transfer acceleration is enabled for the bucket.
            String accelerateStatus = s3Client.getBucketAccelerateConfiguration(
                    GetBucketAccelerateConfigurationRequest.builder()
                            .bucket(bucketName)
                            .build())
                    .status().toString();
            System.out.println("Bucket accelerate status: " + accelerateStatus);

            // Upload a new object using the accelerate endpoint.
            s3Client.putObject(PutObjectRequest.builder()
                            .bucket(bucketName)
                            .key(keyName)
                            .build(),
                    RequestBody.fromString("Test object for transfer acceleration"));
            System.out.println("Object \"" + keyName + "\" uploaded with transfer acceleration.");
        } catch (S3Exception e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}

.NET 예시 — AWS SDK for .NET으로 버킷의 Transfer Acceleration을 활성화할 수 있어요:

using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class TransferAccelerationTest
    {
        private const string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;
        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            EnableAccelerationAsync().Wait();
        }

        static async Task EnableAccelerationAsync()
        {
            try
            {
                var putRequest = new PutBucketAccelerateConfigurationRequest
                {
                    BucketName = bucketName,
                    AccelerateConfiguration = new AccelerateConfiguration
                    {
                        Status = BucketAccelerateStatus.Enabled
                    }
                };
                await s3Client.PutBucketAccelerateConfigurationAsync(putRequest);

                var getRequest = new GetBucketAccelerateConfigurationRequest
                {
                    BucketName = bucketName
                };
                var response = await s3Client.GetBucketAccelerateConfigurationAsync(getRequest);

                Console.WriteLine("Acceleration state = '{0}'", response.Status);
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
                Console.WriteLine(
                    "Error occurred. Message:'{0}' when setting transfer acceleration",
                    amazonS3Exception.Message);
            }
        }
    }
}

Transfer Acceleration이 활성화된 버킷에 객체를 업로드할 때는 클라이언트 생성 시점에 accelerate 엔드포인트를 지정해요:

var client = new AmazonS3Client(new AmazonS3Config
{
    RegionEndpoint = TestRegionEndpoint,
    UseAccelerateEndpoint = true
});

JavaScript / Python (Boto3) — AWS SDK for JavaScript로 활성화하는 예시는 PutBucketAccelerateConfiguration 명령을, AWS SDK for Python (Boto3)은 put_bucket_accelerate_configuration을 참고하세요.

REST API — PutBucketAccelerateConfiguration 작업으로 기존 버킷의 accelerate 구성을 활성화할 수 있어요.

더 알아보기 (Learn more)