

# 로컬 영역에서 디렉터리 버킷 생성
<a name="create-directory-bucket-LZ"></a>

전용 로컬 영역에서는 디렉터리 버킷을 생성하여 특정 데이터 경계 내에서 객체를 저장하고 검색하여 데이터 레지던시 및 데이터 격리 사용 사례를 충족할 수 있습니다. S3 디렉터리 버킷은 로컬 영역에서 지원되는 유일한 버킷 유형이며 `LocalZone`이라는 버킷 위치 유형을 포함합니다. 디렉터리 버킷 이름은 사용자가 제공하는 기본 이름과 버킷 위치의 영역 ID 및 `--x-s3`가 포함된 접미사로 구성됩니다. [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html) API 작업을 사용하여 로컬 영역 ID의 목록을 가져올 수 있습니다. 자세한 내용은 [디렉터리 버킷 이름 지정 규칙](directory-bucket-naming-rules.md) 섹션을 참조하세요.

**참고**  
전용 로컬 영역에서 리소스를 생성하거나 액세스하려면 먼저 AWS 전용 로컬 영역(전용 로컬 영역)의 S3를 비롯한 모든 서비스에 대해 관리자가 AWS 계정을 활성화해야 합니다. 자세한 내용은 [로컬 영역에 대해 계정 활성화](opt-in-directory-bucket-lz.md) 섹션을 참조하세요.
데이터 레지던시 요구 사항의 경우 게이트웨이 VPC 엔드포인트에서만 버킷에 액세스할 수 있도록 활성화하는 것이 좋습니다. 자세한 내용은 [VPC에서의 프라이빗 연결](connectivity-lz-directory-buckets.md) 섹션을 참조하세요.
로컬 영역 네트워크 경계 그룹 내로만 액세스를 제한하려면 IAM 정책에서 `s3express:AllAccessRestrictedToLocalZoneGroup` 조건 키를 사용할 수 있습니다. 자세한 내용은 [로컬 영역의 디렉터리 버킷에 대한 인증 및 권한 부여](iam-directory-bucket-LZ.md) 섹션을 참조하세요.

다음은 AWS Management Console, AWS CLI 및 AWS SDK를 사용하여 단일 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 설명합니다.

## S3 콘솔 사용
<a name="create-directory-bucket-lz-console"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. 페이지 상단의 탐색 모음에서 현재 표시된 AWS 리전의 이름을 선택합니다. 그런 다음 디렉터리 버킷을 생성하려는 로컬 영역의 상위 리전을 선택합니다.
**참고**  
상위 리전에 대한 자세한 내용은 [로컬 영역의 디렉터리 버킷에 대한 개념](s3-lzs-for-directory-buckets.md) 섹션을 참조하세요.

1. 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택합니다.

1. **버킷 만들기**를 선택합니다.

   **버킷 만들기** 페이지가 열립니다.

1. **일반 구성**에서 버킷이 생성될 AWS 리전을 확인합니다.

1.  **버킷 유형**에서 **디렉터리**를 선택합니다.
**참고**  
디렉터리 버킷을 지원하지 않는 리전을 선택한 경우 버킷 유형이 범용 버킷으로 기본 설정됩니다. 디렉터리 버킷을 생성하려면 지원되는 리전을 선택해야 합니다. 디렉터리 버킷을 지원하는 리전 목록은 [디렉터리 버킷에 대한 리전 및 영역 엔드포인트](s3-express-Regions-and-Zones.md) 섹션을 참조하세요.
버킷을 생성한 후에는 버킷 유형을 변경할 수 없습니다.

1. **버킷 위치**에서 사용할 로컬 영역을 선택합니다.
**참고**  
버킷 생성 후에는 로컬 영역을 변경할 수 없습니다.

1. **버킷 위치**에서 확인란을 선택하여 로컬 영역 중단 시 데이터를 사용할 수 없거나 데이터가 손실될 수 있음을 확인합니다.
**중요**  
디렉터리 버킷은 단일 로컬 영역 내의 여러 디바이스에 저장되지만 로컬 영역 간에 데이터를 중복으로 저장하지는 않습니다.

1. **버킷 이름**에서 디렉터리 버킷 이름을 입력합니다.

   디렉터리 버킷 이름 지정 규칙에 대한 자세한 내용은 [범용 버킷 이름 지정 규칙](bucketnamingrules.md) 섹션을 참조하세요. 콘솔을 사용하여 디렉터리 버킷을 생성하면 제공하는 기본 이름에 접미사가 자동으로 추가됩니다. 이 접미사에는 선택한 로컬 영역의 영역 ID가 포함됩니다.

   버킷을 생성한 후에는 해당 이름을 변경할 수 없습니다.
**중요**  
버킷 이름에 계정 번호와 같은 중요한 정보를 포함하지 마세요. 버킷 이름은 버킷의 객체를 가리키는 URL에 표시됩니다.

1. **객체 소유권**에서 **버킷 소유자 적용** 설정이 자동으로 활성화되고 모든 액세스 제어 목록(ACL)이 비활성화됩니다. 디렉터리 버킷의 경우 ACL은 비활성화되어 있으며 활성화할 수 없습니다.

   **버킷 소유자 적용** 설정이 활성화되어 있으면 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 독점적으로 사용하여 액세스 제어를 정의합니다. Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하세요.

1. **이 버킷의 퍼블릭 액세스 차단 설정**에서 디렉터리 버킷의 퍼블릭 액세스 차단 설정이 자동으로 활성화됩니다. 디렉터리 버킷의 경우 이 설정을 수정할 수 없습니다. 퍼블릭 액세스 차단에 대한 자세한 내용은 [Amazon S3 스토리지에 대한 퍼블릭 액세스 차단](access-control-block-public-access.md) 섹션을 참조하십시오.

1. **기본 암호화**에서 디렉터리 버킷은 기본적으로 **Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)**를 통해 데이터를 암호화합니다. 또한 **AWS Key Management Service 키를 사용한 서버 측 암호화(SSE-KMS)**를 사용하여 디렉터리 버킷의 데이터를 암호화하는 옵션도 있습니다.

1. **버킷 생성**을 선택합니다.

   버킷을 생성한 후 버킷에 파일 및 폴더를 추가할 수 있습니다. 자세한 내용은 [디렉터리 버킷의 객체 작업](directory-buckets-objects.md) 섹션을 참조하세요.

## AWS CLI 사용
<a name="create-directory-bucket-lz-cli"></a>

이 예시는 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=LocalZone,Name=local-zone-id},Bucket={DataRedundancy=SingleLocalZone,Type=Directory}'
--region parent-region-code
```

로컬 영역 ID 및 상위 리전 코드에 대한 자세한 내용은 [로컬 영역의 디렉터리 버킷에 대한 개념](s3-lzs-for-directory-buckets.md) 섹션을 참조하세요. AWS CLI 명령에 대한 자세한 내용은 *AWS CLI Command Reference*의 [create-bucket](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html)을 참조하세요.

## AWS SDK 사용
<a name="create-directory-bucket-lz-sdks"></a>

------
#### [ SDK for Go ]

이 예시는 AWS SDK for Go를 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
var bucket = "bucket-base-name--zone-id--x-s3" // The full directory bucket name

func runCreateBucket(c *s3.Client) {
    resp, err := c.CreateBucket(context.Background(), &s3.CreateBucketInput{
        Bucket: &bucket,
        CreateBucketConfiguration: &types.CreateBucketConfiguration{
            Location: &types.LocationInfo{
                Name: aws.String("local-zone-id"),
                Type: types.LocationTypeLocalZone,
            },  
            Bucket: &types.BucketInfo{
                DataRedundancy: types.DataRedundancySingleLocalZone,
                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") // No operation performed, just printing a message
        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를 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
public static void createBucket(S3Client s3Client, String bucketName) {

    //Bucket name format is {base-bucket-name}--{local-zone-id}--x-s3
    //example: doc-example-bucket--local-zone-id--x-s3 is a valid name for a directory bucket created in a Local Zone.

    CreateBucketConfiguration bucketConfiguration = CreateBucketConfiguration.builder()
             .location(LocationInfo.builder()
                     .type(LocationType.LOCAL_ZONE)
                     .name("local-zone-id").build()) //this must match the Local Zone ID in your bucket name
             .bucket(BucketInfo.builder()
                    .type(BucketType.DIRECTORY)
                    .dataRedundancy(DataRedundancy.SINGLE_LOCAL_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를 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
// 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 = "parent-region-code";
const zone = "local-zone-id";
const suffix = `${zone}--x-s3`;

const s3 = new S3({ region });

const bucketName = `bucket-base-name--${suffix}`; // Full directory bucket name

const createResponse = await s3.createBucket( 
    { Bucket: bucketName, 
      CreateBucketConfiguration: {Location: {Type: "LocalZone", Name: "local-zone-id"},
      Bucket: { Type: "Directory", DataRedundancy: "SingleLocalZone" }}
    } 
   );
```

------
#### [ SDK for .NET ]

이 예시는 SDK for .NET을 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
using (var amazonS3Client = new AmazonS3Client())
{
    var putBucketResponse = await amazonS3Client.PutBucketAsync(new PutBucketRequest
    {

       BucketName = "bucket-base-name--local-zone-id--x-s3",
       PutBucketConfiguration = new PutBucketConfiguration
       {
         BucketInfo = new BucketInfo { DataRedundancy = DataRedundancy.SingleLocalZone, Type = BucketType.Directory },
         Location = new LocationInfo { Name = "local-zone-id", Type = LocationType.LocalZone }
       }
     }).ConfigureAwait(false);
}
```

------
#### [ SDK for PHP ]

이 예시는 AWS SDK for PHP를 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
require 'vendor/autoload.php';

$s3Client = new S3Client([

    'region'      => 'parent-region-code',
]);


$result = $s3Client->createBucket([
    'Bucket' => 'bucket-base-name--local-zone-id--x-s3',
    'CreateBucketConfiguration' => [
        'Location' => ['Name'=> 'local-zone-id', 'Type'=> 'LocalZone'],
        'Bucket' => ["DataRedundancy" => "SingleLocalZone" ,"Type" => "Directory"]   ],
]);
```

------
#### [ SDK for Python ]

이 예시는 AWS SDK for Python (Boto3)을 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
import logging
import boto3
from botocore.exceptions import ClientError

def create_bucket(s3_client, bucket_name, local_zone):
    '''
    Create a directory bucket in a specified Local Zone

    :param s3_client: boto3 S3 client
    :param bucket_name: Bucket to create; for example, 'bucket-base-name--local-zone-id--x-s3'
    :param local_zone: String; Local Zone ID to create the bucket in
    :return: True if bucket is created, else False
    '''

    try:
        bucket_config = {
                'Location': {
                    'Type': 'LocalZone',
                    'Name': local_zone
                },
                'Bucket': {
                    'Type': 'Directory', 
                    'DataRedundancy': 'SingleLocalZone'
                }
            }
        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 = 'parent-region-code'
    local_zone = 'local-zone-id'
    s3_client = boto3.client('s3', region_name = region)
    create_bucket(s3_client, bucket_name, local_zone)
```

------
#### [ SDK for Ruby ]

이 예시는 AWS SDK for Ruby를 사용하여 로컬 영역에서 디렉터리 버킷을 생성하는 방법을 보여줍니다.

**Example**  

```
s3 = Aws::S3::Client.new(region:'parent-region-code')
s3.create_bucket(
  bucket: "bucket-base-name--local-zone-id--x-s3",
  create_bucket_configuration: {
    location: { name: 'local-zone-id', type: 'LocalZone' },
    bucket: { data_redundancy: 'SingleLocalZone', type: 'Directory' }
  }
)
```

------