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 활성화하기
- AWS Management Console에 로그인하고 Amazon S3 콘솔(
https://console.aws.amazon.com/s3/)을 엽니다. - 왼쪽 탐색 창에서 General purpose buckets를 선택하고, Transfer Acceleration을 활성화할 버킷 이름을 선택해요.
- Properties를 선택해요.
- Transfer acceleration 아래에서 Edit을 선택해요.
- 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 구성을 활성화할 수 있어요.