

# Local Zone でのディレクトリバケットの作成
<a name="create-directory-bucket-LZ"></a>

専有ローカルゾーンでは、特定のデータ境界にオブジェクトを保存および取得するディレクトリバケットを作成して、データレジデンシーとデータ分離のユースケースに対応できます。S3 ディレクトリバケットは Local Zones でサポートされている唯一のバケットタイプであり、`LocalZone` というバケットの場所タイプが含まれています。ディレクトリバケット名は、指定するベース名と、バケットの場所と `--x-s3` の Zone ID を含むサフィックスで構成されます。Local Zone ID のリストは、[DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html) API オペレーションを使用して取得できます。詳細については、「[ディレクトリバケットの命名規則](directory-bucket-naming-rules.md)」を参照してください。

**注記**  
S3 を含む AWS 専有ローカルゾーン (専有ローカルゾーン) のすべてのサービスでは、専有ローカルゾーン内のリソースを作成またはアクセスする前に、管理者が AWS アカウントを有効にする必要があります。詳細については、「[ローカルゾーンのアカウントを有効にする](opt-in-directory-bucket-lz.md)」を参照してください。
データレジデンシー要件については、ゲートウェイ VPC エンドポイントからのみバケットへのアクセスを有効にすることをお勧めします。詳細については、「[VPC からのプライベート接続](connectivity-lz-directory-buckets.md)」を参照してください。
Local Zone のネットワーク境界グループ内のみにアクセスを制限するには、IAM ポリシーで条件キー `s3express:AllAccessRestrictedToLocalZoneGroup` を使用できます。詳細については、「[Local Zones でのディレクトリバケットの認証と認可](iam-directory-bucket-LZ.md)」を参照してください。

以下に、AWS マネジメントコンソール、AWS CLI、AWS SDK を使用して単一の Local Zone にディレクトリバケットを作成する方法について説明します。

## S3 コンソールの使用
<a name="create-directory-bucket-lz-console"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、ディレクトリバケットの作成先となる Local Zone の親リージョンを選択します。
**注記**  
親リージョンの詳細については、「[Local Zones のディレクトリバケットの概念](s3-lzs-for-directory-buckets.md)」を参照してください。

1. 左側のナビゲーションペインで、[**バケット**] を選択します。

1. [**Create bucket (バケットの作成)**] を選択します。

   **[バケットの作成]** ページが開きます。

1. **[全般設定]** で、バケットが作成される AWS リージョン を確認します。

1.  **[バケットタイプ]** で **[ディレクトリ]** を選択します。
**注記**  
ディレクトリバケットをサポートしていないリージョンを選択した場合、バケットタイプはデフォルトで汎用バケットになります。ディレクトリバケットを作成するには、サポートされているリージョンを選択する必要があります。ディレクトリバケットをサポートするリージョンのリストについては、「[ディレクトリバケットのリージョンエンドポイントとゾーンエンドポイント](s3-express-Regions-and-Zones.md)」を参照してください。
バケット作成後にバケットタイプは変更できません。

1. **[バケットの場所]** で、使用する Local Zone を選択します。
**注記**  
この Local Zone は、バケットの作成後に変更することはできません。

1. **[バケットの場所]** でチェックボックスをオンにして、Local Zone に障害が発生した場合に、データが使用できなくなったり、データが失われたりする場合があることに同意します。
**重要**  
ディレクトリバケットは、単一の Local Zone 内の複数のデバイスに保存されますが、ディレクトリバケットは Local Zones 間でデータを冗長に保存することはありません。

1. **[バケット名]** には、ディレクトリバケット名を入力します。

   ディレクトリバケットの命名規則の詳細については、「[汎用バケットの命名規則](bucketnamingrules.md)」を参照してください。コンソールを使用してディレクトリバケットを作成すると、指定したベース名にサフィックスが自動的に追加されます。このサフィックスには、選択した Local Zone の Zone 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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。このコマンドを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

ディレクトリバケットを作成する際は、設定の詳細を指定して、`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
```

Local Zone ID と親リージョンコードの詳細については、「[Local Zones のディレクトリバケットの概念](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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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) を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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 を使用して Local Zone でディレクトリバケットを作成する方法を示しています。

**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' }
  }
)
```

------