가용 영역에서 디렉터리 버킷 만들기
가용 영역에서 디렉터리 버킷 만들기 (Creating directory buckets in an Availability Zone)
Amazon S3 Express One Zone 스토리지 클래스를 사용하려면 디렉터리 버킷을 만들어야 해요. S3 Express One Zone 스토리지 클래스는 디렉터리 버킷에서만 사용할 수 있어요. S3 Express One Zone 스토리지 클래스는 저지연 사용 사례를 지원하고 단일 가용 영역 안에서 더 빠른 데이터 처리를 제공해요. 애플리케이션이 성능에 민감하고 한 자릿수 밀리초(단일 자릿수 ms)의 PUT·GET 지연 시간이 유리하다면 S3 Express One Zone 스토리지 클래스를 사용할 수 있도록 디렉터리 버킷을 만들 것을 권장해요.
Amazon S3 버킷에는 일반 목적 버킷과 디렉터리 버킷 두 종류가 있어요. 애플리케이션과 성능 요구 사항에 가장 잘 맞는 버킷 유형을 선택해야 해요. 일반 목적 버킷은 원래의 S3 버킷 유형이에요. 일반 목적 버킷은 대부분의 사용 사례와 접근 패턴에 권장되며, S3 Express One Zone을 제외한 모든 스토리지 클래스에 걸쳐 저장된 객체를 허용해요. 일반 목적 버킷에 대한 자세한 내용은 "일반 목적 버킷 개요"를 참고해요.
디렉터리 버킷은 일관된 한 자릿수 밀리초의 지연 시간이 필요한 워크로드나 성능에 중요한 애플리케이션을 위해 설계된 S3 Express One Zone 스토리지 클래스를 사용해요. S3 Express One Zone은 단일 가용 영역을 선택하고 객체 스토리지와 컴퓨팅 리소스를 함께 배치할 수 있는 최초의 S3 스토리지 클래스로, 가능한 가장 높은 접근 속도를 제공해요. 디렉터리 버킷을 만들 때 성능 최적화를 위해 사용자의 Amazon EC2, Amazon Elastic Kubernetes Service 또는 Amazon Elastic Container Service(Amazon ECS) 컴퓨팅 인스턴스에 지역적으로 가까운 AWS 리전과 가용 영역을 선택적으로 지정할 수 있어요.
S3 Express One Zone에서 데이터는 단일 가용 영역 내의 여러 장치에 중복 저장돼요. S3 Express One Zone은 단일 가용 영역 내에서 99.95% 가용성으로 설계됐고 Amazon S3 서비스 수준 계약(SLA)으로 보장돼요. 자세한 내용은 "가용 영역"을 참고해요.
디렉터리 버킷은 일반 목적 버킷의 평면 저장 구조와 달리 데이터를 디렉터리로 계층적으로 정리해요. 디렉터리 버킷에는 프리픽스 한도가 없고, 개별 디렉터리는 수평으로 확장될 수 있어요.
디렉터리 버킷에 대한 자세한 내용은 "디렉터리 버킷 작업하기 (Working with directory buckets)"를 참고해요.
출처: 문서
본문
디렉터리 버킷 이름
디렉터리 버킷 이름은 다음 형식을 따라야 하고 디렉터리 버킷 명명 규칙을 준수해야 해요:
bucket-base-name--zone-id--x-s3
예를 들어, 다음 디렉터리 버킷 이름은 가용 영역 ID usw2-az1을 포함해요:
bucket-base-name--usw2-az1--x-s3
디렉터리 버킷 명명 규칙에 대한 자세한 내용은 "디렉터리 버킷 명명 규칙 (Directory bucket naming rules)"을 참고해요.
콘솔에서 디렉터리 버킷 만들기
- AWS Management Console에 로그인하고 Amazon S3 콘솔(https://console.aws.amazon.com/s3/)을 열어요.
- 탐색 표시줄에서 현재 표시된 AWS 리전의 이름을 선택한 다음, 버킷을 만들 리전을 선택해요.
참고: 지연 시간과 비용을 최소화하고 규제 요구 사항을 충족하려면 가까운 리전을 선택해요. 리전에 저장된 객체는 명시적으로 다른 리전으로 전송하지 않는 한 그 리전을 벗어나지 않아요. Amazon S3 AWS 리전 목록은 Amazon Web Services General Reference의 "AWS 서비스 엔드포인트"를 참고해요.
- 왼쪽 탐색 창에서 Directory buckets(디렉터리 버킷)을 선택해요.
- Create bucket(버킷 만들기)을 선택해요. Create bucket 페이지가 열려요.
- General configuration(일반 구성) 아래에서 버킷이 만들어질 AWS 리전을 확인해요. Bucket type(버킷 유형) 아래에서 Directory(디렉터리)를 선택해요.
참고: 디렉터리 버킷을 지원하지 않는 리전을 선택하면 버킷 유형 옵션이 사라지고 버킷 유형이 일반 목적 버킷으로 기본 설정돼요. 디렉터리 버킷을 만들려면 지원되는 리전을 선택해야 해요. 디렉터리 버킷과 Amazon S3 Express One Zone 스토리지 클래스를 지원하는 리전 목록은 "S3 Express One Zone 가용 영역과 리전"을 참고해요. 버킷을 만든 뒤에는 버킷 유형을 바꿀 수 없어요. 참고: 버킷을 만든 뒤에는 가용 영역을 바꿀 수 없어요.
- Availability Zone(가용 영역)에서 컴퓨팅 서비스에 지역적으로 가까운 가용 영역을 선택해요. 디렉터리 버킷과 S3 Express One Zone 스토리지 클래스를 지원하는 가용 영역 목록은 "S3 Express One Zone 가용 영역과 리전"을 참고해요. Availability Zone 아래에서 가용 영역 장애가 발생할 경우 데이터를 사용할 수 없거나 유실될 수 있다는 점을 인지한다는 확인란을 선택해요.
중대한 사항: 디렉터리 버킷은 단일 가용 영역 내의 여러 장치에 저장되지만, 가용 영역 전체에 걸쳐 중복 저장되지는 않아요.
- Bucket name(버킷 이름)에 디렉터리 버킷 이름을 입력해요. 디렉터리 버킷에는 다음 명명 규칙이 적용돼요.
- 선택한 존(AWS 가용 영역 또는 AWS 로컬 존) 내에서 고유해야 해요.
- 이름은 접미사를 포함해 3자(최소)에서 63자(최대) 사이여야 해요.
- 소문자, 숫자, 하이픈(-)으로만 구성돼야 해요.
- 문자나 숫자로 시작하고 끝나야 해요.
- 다음 접미사를 포함해야 해요:
--zone-id--x-s3. - 버킷 이름은
xn--프리픽스로 시작하면 안 돼요. - 버킷 이름은
sthree-프리픽스로 시작하면 안 돼요. - 버킷 이름은
sthree-configurator프리픽스로 시작하면 안 돼요. - 버킷 이름은
amzn-s3-demo-프리픽스로 시작하면 안 돼요. - 버킷 이름은
-s3alias접미사로 끝나면 안 돼요. 이 접미사는 접근 포인트 별칭 이름용으로 예약돼 있어요. 자세한 내용은 "접근 포인트 별칭"을 참고해요. - 버킷 이름은
--ol-s3접미사로 끝나면 안 돼요. 이 접미사는 Object Lambda Access Point 별칭 이름용으로 예약돼 있어요. 자세한 내용은 "S3 버킷 Object Lambda Access Point에 버킷 스타일 별칭 사용하기"를 참고해요. - 버킷 이름은
.mrap접미사로 끝나면 안 돼요. 이 접미사는 Multi-Region Access Point 이름용으로 예약돼 있어요. 자세한 내용은 "Amazon S3 Multi-Region Access Point 명명 규칙"을 참고해요. - 콘솔로 디렉터리 버킷을 만들 때 기본 이름에 접미사가 자동으로 추가돼요. 이 접미사에는 선택한 가용 영역의 가용 영역 ID가 포함돼요. 버킷을 만든 뒤에는 이름을 바꿀 수 없어요. 버킷 명명에 대한 자세한 내용은 "일반 목적 버킷 명명 규칙"을 참고해요.
중대한 사항: 계정 번호 같은 민감한 정보는 버킷 이름에 넣지 마세요. 버킷 이름은 버킷의 객체를 가리키는 URL에 그대로 보여요.
- Object Ownership(객체 소유권) 아래에서 Bucket owner enforced(버킷 소유자 강제) 설정이 자동으로 활성화되고 모든 접근 제어 목록(ACL)이 비활성화돼요. 디렉터리 버킷에서는 ACL을 활성화할 수 없어요.
- Bucket owner enforced(기본값) – ACL이 비활성화되고 버킷 소유자가 일반 목적 버킷의 모든 객체를 자동으로 소유하며 완전한 제어권을 가져요. ACL은 더 이상 S3 일반 목적 버킷 데이터에 대한 접근 권한에 영향을 주지 않아요. 버킷은 접근 제어를 정의하는 데 정책만 사용해요.
- Block Public Access settings for this bucket(이 버킷의 퍼블릭 액세스 차단 설정) 아래에서 디렉터리 버킷의 모든 Block Public Access 설정이 자동으로 활성화돼요. 이 설정은 디렉터리 버킷에서 수정할 수 없어요. 공개 접근 차단에 대한 자세한 내용은 "Amazon S3 스토리지에 대한 공개 접근 차단"을 참고해요.
- 기본 암호화를 구성하려면 Encryption type(암호화 유형) 아래에서 다음 중 하나를 선택해요:
- Server-side encryption with Amazon S3 managed key(SSE-S3)(Amazon S3 관리형 키를 이용한 서버 측 암호화)
- Server-side encryption with AWS Key Management Service key(SSE-KMS)(AWS KMS 키를 이용한 서버 측 암호화) Amazon S3 서버 측 암호화로 데이터를 암호화하는 방법은 "데이터 보호와 암호화"를 참고해요.
중대한 사항: 기본 암호화 구성에 SSE-KMS 옵션을 사용하면 AWS KMS의 초당 요청(RPS) 쿼터가 적용돼요. AWS KMS 쿼터와 쿼터 증가를 요청하는 방법은 AWS Key Management Service Developer Guide의 "쿼터 (Quotas)"를 참고해요. 기본 암호화를 활성화하면 버킷 정책을 업데이트해야 할 수도 있어요. 자세한 내용은 "교차 계정 연산에 SSE-KMS 암호화 사용하기"를 참고해요.
- Server-side encryption with Amazon S3 managed keys(SSE-S3)를 선택했다면 Bucket Key 아래에 Enabled(활성화)가 표시돼요. S3 Bucket Keys는 디렉터리 버킷을 SSE-S3로 기본 암호화하도록 구성하면 항상 활성화돼요. S3 Bucket Keys는 디렉터리 버킷의 GET과 PUT 연산에서 항상 활성화되고 비활성화할 수 없어요. S3 Bucket Keys는 CopyObject, UploadPartCopy, Batch Operations의 Copy 연산 또는 가져오기 작업을 통해 SSE-KMS로 암호화된 객체를 일반 목적 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 일반 목적 버킷으로, 또는 디렉터리 버킷 사이에 복사할 때는 지원되지 않아요. 이 경우 Amazon S3는 KMS로 암호화된 객체에 대한 복사 요청이 있을 때마다 AWS KMS를 호출해요. S3 Bucket Keys는 Amazon S3에서 AWS KMS로 가는 요청 트래픽을 줄여 암호화 비용을 낮춰 줘요. 자세한 내용은 "Amazon S3 Bucket Keys로 SSE-KMS 비용 줄이기"를 참고해요.
- Server-side encryption with AWS Key Management Service key(SSE-KMS)를 선택했다면 AWS KMS key 아래에서 다음 방법 중 하나로 AWS Key Management Service 키를 지정하거나 새 키를 만들어요.
- 사용 가능한 KMS 키 목록에서 선택하려면 Choose from your AWS KMS keys(AWS KMS 키에서 선택)을 선택하고 Available AWS KMS keys에서 KMS 키를 선택해요. 이 목록에는 사용자의 고객 관리형 키만 표시돼요. AWS 관리형 키(aws/s3)는 디렉터리 버킷에서 지원되지 않아요. 고객 관리형 키에 대한 자세한 내용은 AWS Key Management Service Developer Guide의 "고객 키와 AWS 키"를 참고해요.
- KMS 키 ARN 또는 별칭을 입력하려면 Enter AWS KMS key ARN을 선택하고 AWS KMS key ARN에 KMS 키 ARN 또는 별칭을 입력해요.
- AWS KMS 콘솔에서 새 고객 관리형 키를 만들려면 Create a KMS key(KMS 키 만들기)를 선택해요. AWS KMS 키를 만드는 방법은 AWS Key Management Service Developer Guide의 "키 만들기"를 참고해요.
중대한 사항: SSE-KMS 구성은 버킷의 수명 동안 디렉터리 버킷당 고객 관리형 키 1개만 지원할 수 있어요. AWS 관리형 키(aws/s3)는 지원되지 않아요. 또한 SSE-KMS용 고객 관리형 키를 지정한 뒤에는 버킷의 SSE-KMS 구성에 대한 고객 관리형 키를 재정의할 수 없어요. 버킷의 SSE-KMS 구성에 지정한 고객 관리형 키는 다음 방법으로 확인할 수 있어요: HeadObject API 연산 요청을 보내 응답에서
x-amz-server-side-encryption-aws-kms-key-id값을 찾아요. 데이터에 새 고객 관리형 키를 사용하려면 기존 객체를 새 고객 관리형 키를 가진 새 디렉터리 버킷으로 복사할 것을 권장해요. 버킷과 같은 AWS 리전에서 사용할 수 있는 KMS 키만 사용할 수 있어요. Amazon S3 콘솔은 버킷과 같은 리전의 처음 100개 KMS 키만 나열해요. 목록에 없는 KMS 키를 사용하려면 KMS 키 ARN을 입력해야 해요. 다른 계정이 소유한 KMS 키를 사용하려면 먼저 키를 사용할 권한이 있어야 하고 KMS 키 ARN을 입력해야 해요. KMS 키의 교차 계정 권한에 대한 자세한 내용은 AWS Key Management Service Developer Guide의 "다른 계정이 사용할 수 있는 KMS 키 만들기"를 참고해요. SSE-KMS에 대한 자세한 내용은 "디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS) 서버 측 암호화 지정하기"를 참고해요. 디렉터리 버킷에서 서버 측 암호화에 AWS KMS 키를 사용할 때는 대칭 암호화 KMS 키를 선택해야 해요. Amazon S3는 대칭 암호화 KMS 키만 지원하고 비대칭 KMS 키는 지원하지 않아요. 자세한 내용은 AWS Key Management Service Developer Guide의 "대칭 및 비대칭 KMS 키 식별하기"를 참고해요. Amazon S3에서 AWS KMS를 사용하는 방법은 "디렉터리 버킷에서 AWS KMS 키(SSE-KMS) 서버 측 암호화 사용하기"를 참고해요. - Create bucket(버킷 만들기)을 선택해요. 버킷을 만든 뒤에는 버킷에 파일과 폴더를 추가할 수 있어요. 자세한 내용은 "디렉터리 버킷에서 객체 작업하기"를 참고해요.
SDK 예제로 디렉터리 버킷 만들기
SDK for Go
이 예제는 AWS SDK for Go로 디렉터리 버킷을 만드는 방법을 보여 줘요.
var bucket = "..."
func runCreateBucket(c *s3.Client) {
resp, err := c.CreateBucket(context.Background(), &s3.CreateBucketInput{
Bucket: &bucket,
CreateBucketConfiguration: &types.CreateBucketConfiguration{
Location: &types.LocationInfo{
Name: aws.String("usw2-az1"),
Type: types.LocationTypeAvailabilityZone,
},
Bucket: &types.BucketInfo{
DataRedundancy: types.DataRedundancySingleAvailabilityZone,
Type: types.BucketTypeDirectory,
},
},
})
var terr *types.BucketAlreadyOwnedByYou
if errors.As(err, &terr) {
fmt.Printf("BucketAlreadyOwnedByYou: %s\n", aws.ToString(terr.Message))
fmt.Printf("noop...\n")
return
}
if err != nil {
log.Fatal(err)
}
fmt.Printf("bucket created at %s\n", aws.ToString(resp.Location))
}
SDK for Java 2.x
이 예제는 AWS SDK for Java 2.x로 디렉터리 버킷을 만드는 방법을 보여 줘요.
public static void createBucket(S3Client s3Client, String bucketName) {
//Bucket name format is {base-bucket-name}--{az-id}--x-s3
//example: doc-example-bucket--usw2-az1--x-s3 is a valid name for a directory bucket created in
//Region us-west-2, Availability Zone 2
CreateBucketConfiguration bucketConfiguration = CreateBucketConfiguration.builder()
.location(LocationInfo.builder()
.type(LocationType.AVAILABILITY_ZONE)
.name("usw2-az1").build()) //this must match the Region and Availability Zone in your bucket name
.bucket(BucketInfo.builder()
.type(BucketType.DIRECTORY)
.dataRedundancy(DataRedundancy.SINGLE_AVAILABILITY_ZONE)
.build()).build();
try {
CreateBucketRequest bucketRequest = CreateBucketRequest.builder().bucket(bucketName).createBucketConfiguration(bucketConfiguration).build();
CreateBucketResponse response = s3Client.createBucket(bucketRequest);
System.out.println(response);
}
catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
AWS SDK for JavaScript
이 예제는 AWS SDK for JavaScript로 디렉터리 버킷을 만드는 방법을 보여 줘요.
// file.mjs, run with Node.js v16 or higher
// To use with the preview build, place this in a folder
// inside the preview build directory, such as /aws-sdk-js-v3/workspace/
import { S3 } from "@aws-sdk/client-s3";
const region = "us-east-1";
const zone = "use1-az4";
const suffix = `${zone}--x-s3`;
const s3 = new S3({ region });
const bucketName = `...--${suffix}`;
const createResponse = await s3.createBucket(
{ Bucket: bucketName,
CreateBucketConfiguration: {Location: {Type: "AvailabilityZone", Name: zone},
Bucket: { Type: "Directory", DataRedundancy: "SingleAvailabilityZone" }}
}
);
SDK for .NET
이 예제는 SDK for .NET으로 디렉터리 버킷을 만드는 방법을 보여 줘요.
using (var amazonS3Client = new AmazonS3Client())
{
var putBucketResponse = await amazonS3Client.PutBucketAsync(new PutBucketRequest
{
BucketName = "DOC-EXAMPLE-BUCKET--usw2-az1--x-s3",
PutBucketConfiguration = new PutBucketConfiguration
{
BucketInfo = new BucketInfo { DataRedundancy = DataRedundancy.SingleAvailabilityZone, Type = BucketType.Directory },
Location = new LocationInfo { Name = "usw2-az1", Type = LocationType.AvailabilityZone }
}
}).ConfigureAwait(false);
}
SDK for PHP
이 예제는 AWS SDK for PHP로 디렉터리 버킷을 만드는 방법을 보여 줘요.
require 'vendor/autoload.php';
$s3Client = new S3Client([
'region' => 'us-east-1',
]);
$result = $s3Client->createBucket([
'Bucket' => 'doc-example-bucket--use1-az4--x-s3',
'CreateBucketConfiguration' => [
'Location' => ['Name'=> 'use1-az4', 'Type'=> 'AvailabilityZone'],
'Bucket' => ["DataRedundancy" => "SingleAvailabilityZone" ,"Type" => "Directory"] ],
]);
SDK for Python (Boto3)
이 예제는 AWS SDK for Python(Boto3)으로 디렉터리 버킷을 만드는 방법을 보여 줘요.
import logging
import boto3
from botocore.exceptions import ClientError
def create_bucket(s3_client, bucket_name, availability_zone):
'''
Create a directory bucket in a specified Availability Zone
:param s3_client: boto3 S3 client
:param bucket_name: Bucket to create; for example, 'doc-example-bucket--usw2-az1--x-s3'
:param availability_zone: String; Availability Zone ID to create the bucket in, for example, 'usw2-az1'
:return: True if bucket is created, else False
'''
try:
bucket_config = {
'Location': {
'Type': 'AvailabilityZone',
'Name': availability_zone
},
'Bucket': {
'Type': 'Directory',
'DataRedundancy': 'SingleAvailabilityZone'
}
}
s3_client.create_bucket(
Bucket = bucket_name,
CreateBucketConfiguration = bucket_config
)
except ClientError as e:
logging.error(e)
return False
return True
if __name__ == '__main__':
bucket_name = 'BUCKET_NAME'
region = 'us-west-2'
availability_zone = 'usw2-az1'
s3_client = boto3.client('s3', region_name = region)
create_bucket(s3_client, bucket_name, availability_zone)
SDK for Ruby
이 예제는 AWS SDK for Ruby로 디렉터리 버킷을 만드는 방법을 보여 줘요.
s3 = Aws::S3::Client.new(region:'us-west-2')
s3.create_bucket(
bucket: "bucket_base_name--az_id--x-s3",
create_bucket_configuration: {
location: { name: 'usw2-az1', type: 'AvailabilityZone' },
bucket: { data_redundancy: 'SingleAvailabilityZone', type: 'Directory' }
}
)
AWS CLI
이 예제는 AWS CLI로 디렉터리 버킷을 만드는 방법을 보여 줘요. 이 명령을 사용하려면 사용자 입력 자리 표시자를 자신의 정보로 바꿔요.
디렉터리 버킷을 만들 때는 구성 세부 정보를 제공하고 다음 명명 규칙을 사용해야 해요: bucket-base-name--zone-id--x-s3
aws s3api create-bucket
--bucket bucket-base-name--zone-id--x-s3
--create-bucket-configuration 'Location={Type=AvailabilityZone,Name=usw2-az1},Bucket={DataRedundancy=SingleAvailabilityZone,Type=Directory}'
--region us-west-2
자세한 내용은 AWS Command Line Interface의 create-bucket을 참고해요.