

# アベイラビリティーゾーンでのディレクトリバケットの作成
<a name="directory-bucket-create"></a>

Amazon S3 Express One Zone ストレージクラスの使用を開始するには、ディレクトリバケットを使用する必要があります。S3 Express One Zone ストレージクラスを使用するには、ディレクトリバケットを使用する必要があります。S3 Express One Zone ストレージ クラスは、低レイテンシーのユースケースをサポートし、単一のアベイラビリティーゾーン内でより高速なデータ処理を提供します。アプリケーションのパフォーマンスが重視され、1 桁のミリ秒単位の `PUT` と `GET` のレイテンシーでの利点が得られる場合は、S3 Express One Zone ストレージクラスを使用できるようにディレクトリバケットを作成することをお勧めします。

Amazon S3 バケットには、汎用バケットとディレクトリバケットの 2 種類があります。アプリケーションとパフォーマンス要件に最適なバケットタイプを選択する必要があります。汎用バケットはオリジナルの S3 バケットタイプです。汎用バケットはほとんどのユースケースとアクセスパターンに推奨されます。S3 Express One Zone を除くすべてのストレージクラスにわたってオブジェクトを保存できます。汎用バケットの詳細については、「[汎用バケットの概要](UsingBucket.md)」を参照してください。

ディレクトリバケットは、S3 Express One Zone ストレージクラスを使用します。これは、一貫して 1 桁ミリ秒のレイテンシーに維持する必要があるワークロードまたはパフォーマンス重視のアプリケーション向けに設計されています。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 サービスレベル契約](https://aws.amazon.com/s3/sla/)に基づいています。詳細については、[アベイラビリティーゾーン](directory-bucket-high-performance.md#s3-express-overview-az)を参照してください。

ディレクトリバケットは、汎用バケットのフラットなストレージ構造とは対照的に、データを階層的にディレクトリにまとめます。ディレクトリバケットにはプレフィックスの制限はなく、個々のディレクトリは水平方向にスケールできます。

ディレクトリバケットの詳細については、「[ディレクトリバケットの使用](directory-buckets-overview.md)」を参照してください。

**ディレクトリバケット名**  
ディレクトリバケット名は次の形式を使用し、ディレクトリバケットの命名規則に従う必要があります。

```
{{bucket-base-name}}--{{zone-id}}--x-s3
```

例えば、次のディレクトリバケット名にはアベイラビリティーゾーン ID `usw2-az1` が含まれています。

```
{{bucket-base-name}}--usw2-az1--x-s3
```

ディレクトリバケットの命名規則の詳細については、「[ディレクトリバケットの命名規則](directory-bucket-naming-rules.md)」を参照してください。

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

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

1. ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、バケットを作成するリージョンを選択します。
**注記**  
レイテンシーとコストを最小化するため、さらに規制条件に対応するために、最寄りのリージョンを選択します。明示的に別のリージョンに移動する場合を除き、特定のリージョンに保管されたオブジェクトは、そのリージョンから移動されることはありません。Amazon S3 AWS リージョン のリストについては、**「Amazon Web Services 全般のリファレンス」の「[AWS のサービス エンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)」を参照してください。

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

1. [**Create bucket (バケットの作成)**] を選択します。**[バケットの作成]** ページが開きます。

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

   **[バケットタイプ]** で **[ディレクトリ]** を選択します。
**注記**  
ディレクトリバケットをサポートしていないリージョンを選択した場合、**[バケットタイプ]** オプションは表示されなくなり、バケットタイプはデフォルトで汎用バケットになります。ディレクトリバケットを作成するには、サポートされているリージョンを選択する必要があります。ディレクトリバケットと Amazon S3 Express One Zone ストレージクラスをサポートするリージョンのリストについては、「[S3 Express One Zone のアベイラビリティーゾーンとリージョン](s3-express-Endpoints.md)」を参照してください。
バケット作成後にバケットタイプは変更できません。
**注記**  
このアベイラビリティーゾーンは、バケットの作成後に変更することはできません。

1. **[アベイラビリティーゾーン]** では、コンピューティングサービスにローカルなアベイラビリティーゾーンを選択します。ディレクトリバケットと S3 Express One Zone ストレージクラスをサポートするアベイラビリティーゾーンのリストについては、「[S3 Express One Zone のアベイラビリティーゾーンとリージョン](s3-express-Endpoints.md)」を参照してください。

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

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

   ディレクトリバケットの命名には、次のルールが適用されます。
   + 選択したゾーン (AWS アベイラビリティーゾーンまたは AWS Local Zone) 内で一意である必要があります。
   + 名前は、サフィックスを含め 3 文字 (最短) から 63 文字 (最長) の長さでなければなりません。
   + 小文字の英文字、数字、およびハイフン (-) で構成されていること。
   + 文字や数字で始まり、文字や数字で終わります。
   + `--{{zone-id}}--x-s3` のサフィックスを含める必要があります。
   + バケット名のプレフィックスは `xn--` で始まってはいけません。
   + バケット名のプレフィックスは `sthree-` で始まってはいけません。
   + バケット名のプレフィックスは `sthree-configurator` で始まってはいけません。
   + バケット名のプレフィックスは ` amzn-s3-demo-` で始まってはいけません。
   + バケット名のサフィックスは `-s3alias` で終わってはいけません。このサフィックスは、アクセスポイントのエイリアス名用に予約されています。詳細については、「[アクセスポイントエイリアス](access-points-naming.md#access-points-alias)」を参照してください。
   + バケット名のサフィックスは `--ol-s3` で終わってはいけません。このサフィックスは、Object Lambda アクセスポイントのエイリアス名用に予約されています。詳細については、「[S3 バケット Object Lambda アクセスポイントでのバケット形式のエイリアスの使用方法](olap-use.md#ol-access-points-alias)」を参照してください。
   + バケット名のサフィックスは `.mrap` で終わってはいけません。このサフィックスは、マルチリージョンアクセスポイント名用に予約されています。詳細については、「[Amazon S3 マルチリージョンアクセスポイントの命名規則](multi-region-access-point-naming.md)」を参照してください。

   コンソールを使用してディレクトリバケットを作成すると、指定したベース名にサフィックスが自動的に追加されます。このサフィックスには、選択したアベイラビリティーゾーンのアベイラビリティーゾーン ID が含まれます。

   バケットを作成したら、その名前を変更することはできません。バケットの命名の詳細については、「[汎用バケットの命名規則](bucketnamingrules.md)」を参照してください。
**重要**  
バケット名にアカウント番号などの機密情報を含めないでください。バケット名は、バケット内のオブジェクトを参照する URL に表示されます。

1. **[オブジェクト所有者]** で、**[バケット所有者の強制]** の設定が自動的に有効になり、アクセスコントロールリスト (ACL) が無効になります。ディレクトリバケットの場合、ACL は有効にできません。

    **バケット所有者の強制 (デフォルト)** – ACL は無効になり、バケット所有者は汎用バケット内のすべてのオブジェクトを自動的に所有し、完全に制御します。ACL は、S3 汎用バケット内のデータへのアクセス許可に影響を与えなくなりました。このバケットはアクセスコントロールを定義するためだけにポリシーを使用します。

1. **[このバケットのブロックパブリックアクセス設定]** で、ディレクトリバケットのパブリックアクセスブロック設定がすべて自動的に有効になります。ディレクトリバケットの場合、この設定は変更できません。ブロックパブリックアクセスの詳細については、[Amazon S3 ストレージへのパブリックアクセスのブロック](access-control-block-public-access.md) を参照してください。

1. デフォルトの暗号化を設定するには、**[暗号化タイプ]** で次のいずれかを選択します。
   + **[Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)**]
   + **[AWS Key Management Service キーによるサーバー側の暗号化 (SSE-KMS)]**

   Amazon S3 のサーバー側の暗号化を使用してデータを暗号化する方法の詳細については、「[データ保護と暗号化](s3-express-data-protection.md)」を参照してください。
**重要**  
デフォルト暗号化設定に SSE-KMS オプションを使用する場合、AWS KMS の 1 秒あたりのリクエスト (RPS) 制限が適用されます。AWS KMS クォータの詳細およびクォータの引き上げをリクエストする方法については、**「AWS Key Management Service デベロッパーガイド」の「[クォータ](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)」を参照してください。  
デフォルト暗号化を有効にする際、バケットポリシーの更新が必要な場合があります。詳細については、「[クロスアカウント操作での SSE-KMS 暗号化の使用](bucket-encryption.md#bucket-encryption-update-bucket-policy)」を参照してください。

1. **[Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)]** を選択した場合は、**[バケットキー]** の下に **[有効]** が表示されます。ディレクトリバケットが SSE-S3 でデフォルトの暗号化を使用するように設定すると、S3 バケットキーは常に有効になります。S3 バケットキーは、ディレクトリバケット内の `GET` および `PUT` オペレーションで常に有効になっており、無効にすることはできません。SSE-KMS で暗号化されたオブジェクトを、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)、[バッチオペレーションの Copy オペレーション](directory-buckets-objects-Batch-Ops.md)、または [import ジョブ](create-import-job.md)を使用して、汎用バケットからディレクトリバケットへ、ディレクトリバケットから汎用バケットへ、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトのコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。

   S3 バケットキーは、Amazon S3 から AWS KMS へのリクエストトラフィックを減らし、暗号化のコストを削減します。詳細については、「[Amazon S3 バケットキーを使用した SSE−KMS のコストの削減](bucket-key.md)」を参照してください。

1. **[AWS Key Management Service キーによるサーバー側の暗号化 (SSE-KMS)]** を選択した場合は、**[AWS KMS キー]** で次のいずれかの方法で AWS Key Management Service キーを指定するか、新しいキーを作成します。
   + 使用可能な KMS キーのリストから選択するには、**[AWS KMS keys から選択する]** を選択し、**[使用可能な AWS KMS keys]** のリストから自分の **[KMS キー]** を選択します。

     カスタマーマネージドキーのみがこのリストに表示されます。AWS マネージドキー (`aws/s3`) はディレクトリバケットではサポートされていません。カスタマーマネージドキーの詳細については、*AWS Key Management Serviceデベロッパーガイド*の「[カスタマーキーと AWS キー](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt)」を参照してください。
   + KMS キーの ARN またはエイリアスを入力するには、**[AWS KMS key ARN を入力]** を選択し、**[AWS KMS key ARN]** に KMS キーの ARN またはエイリアスを入力します。
   + AWS KMS コンソールで新しいカスタマーマネージドキーを作成するには、**[KMS キーを作成]** を選択します。

     AWS KMS key の作成の詳細については、**「AWS Key Management Service デベロッパーガイド」の「[キーの作成](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)」を参照してください。
**重要**  
SSE-KMS 設定では、バケットの存続期間中、ディレクトリバケットごとに 1 つの[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)しかサポートできません。[https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`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 デベロッパーガイド*の「[他のアカウントで使用できる KMS キーを作成する](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)」を参照してください。SSE-KMS に関する詳細は、「[ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する](s3-express-specifying-kms-encryption.md)」を参照してください。
ディレクトリバケットでサーバー側の暗号化に AWS KMS key を使用する場合は、対称暗号化 KMS キーを選択する必要があります。Amazon S3 では、対称暗号化 KMS キーのみがサポートされ、非対称暗号化 KMS キーはサポートされません。詳細については、*AWS Key Management Service デベロッパーガイド*の「[Identifying symmetric and asymmetric KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)」(対称および非対称 KMS キーの識別) を参照してください。

   Amazon S3 での AWS KMS の使用に関する詳細は、「[ディレクトリバケットでの AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](s3-express-UsingKMSEncryption.md)」を参照してください。

1. **[バケットを作成する]** を選択します。バケットを作成したら、ファイルやフォルダをバケットに追加できます。詳細については、「[ディレクトリバケットでのオブジェクトの使用](directory-buckets-objects.md)」を参照してください。

## AWS SDK の使用
<a name="create-directory-bucket-sdks"></a>

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

AWS SDK for Go を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**Example**  

```
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 を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**Example**  

```
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 を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**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 = "{{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 を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**Example**  

```
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 を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**Example**  

```
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 ]

AWS SDK for Python (Boto3) を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**Example**  

```
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 を使用してディレクトリバケットを作成する方法は、次の例のとおりです。

**Example**  

```
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
<a name="create-directory-bucket-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=AvailabilityZone,Name={{usw2-az1}}},Bucket={DataRedundancy=SingleAvailabilityZone,Type=Directory}'
--region {{us-west-2}}
```

詳細については、「AWS Command Line Interface」の「[create-bucket](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html)」を参照してください。