

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在可用區域中建立目錄儲存貯體
<a name="directory-bucket-create"></a>

若要開始使用 Amazon S3 Express One Zone 儲存類別，請建立目錄儲存貯體。S3 Express One Zone 儲存類別只能搭配目錄儲存貯體使用。S3 Express One Zone 儲存類別支援低延遲使用案例，並可在單一可用區域內提供更快速的資料處理。如果您的應用程式對效能很敏感，且受益於個位數毫秒的 `PUT` 和 `GET` 延遲，則建議您建立目錄儲存貯體，以便使用 S3 Express One Zone 儲存類別。

有兩種類型的 Amazon S3 儲存貯體：一般用途儲存貯體和目錄儲存貯體。您應該選擇最適合您的應用程式和效能需求的儲存貯體類型。一般用途儲存貯體是原始 S3 儲存貯體類型。針對大多數使用案例和存取模式，建議使用一般用途儲存貯體，此類型允許儲存在所有儲存類別的物件，但 S3 Express One Zone 除外。如需有關一般用途儲存貯體的詳細資訊，請參閱 [一般用途儲存貯體概觀](UsingBucket.md)。

目錄儲存貯體使用 S3 Express One Zone 儲存類別，這是專供需要一致的個位數毫秒延遲的工作負載或效能關鍵應用程式使用所設計的類別。S3 Express One Zone 是第一款可讓您選取單一可用區域的 S3 儲存類別，還可選擇將物件儲存體與運算資源共置，藉此盡可能提供最高存取速度。建立目錄儲存貯體時，您可以選擇指定 AWS 區域 和 可用區域，該區域位於 Amazon EC2、Amazon Elastic Kubernetes Service 或 Amazon Elastic Container Service (Amazon ECS) 運算執行個體的本機，以最佳化效能。

使用 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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在頁面頂端的導覽列中，選擇目前顯示的名稱 AWS 區域。​接下來，選擇您要在其中建立儲存貯體的區域。
**注意**  
請選擇接近您的區域，以充分降低延遲及成本，並因應法規要求。除非您明確地將儲存在區域中的物件傳輸到其他區域，否則物件絕對不會離開該區域。如需 Amazon S3 AWS 區域的清單，請參閱 中的[AWS 服務 端點](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)*Amazon Web Services 一般參考*。

1. 在左側導覽窗格中，選擇**目錄儲存貯體**。

1. 選擇 **Create bucket** (建立儲存貯體)。**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 本機區域）。
   + 名稱長度必須介於 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的每秒請求數目 (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 儲存貯體金鑰。目錄儲存貯體中的 `GET` 和 `PUT` 操作一律會啟用 S3 儲存貯體金鑰，且無法停用。當您透過 [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)、[Batch Operations 中的 Copy 操作](directory-buckets-objects-Batch-Ops.md)或 [import 作業](create-import-job.md)，將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時，不支援 S3 儲存貯體金鑰。在此情況下，Amazon S3 AWS KMS 會在每次對 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**，然後在 ARN 中輸入您的 KMS 金鑰 **AWS KMS key 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 開發人員指南》**中的[識別對稱和非對稱 KMS 金鑰](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)。

   如需 AWS KMS 搭配 Amazon S3 使用 的詳細資訊，請參閱 [在目錄儲存貯體中使用伺服器端加密與 AWS KMS 金鑰 (SSE-KMS)](s3-express-UsingKMSEncryption.md)。

1. 選擇**建立儲存貯體**。建立儲存貯體之後，您可以新增檔案和資料夾至儲存貯體。如需詳細資訊，請參閱[使用目錄儲存貯體中的物件](directory-buckets-objects.md)。

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

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

此範例示範如何使用 適用於 Go 的 AWS SDK建立目錄儲存貯體。

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

------
#### [ 適用於 JavaScript 的 AWS SDK ]

此範例示範如何使用 適用於 JavaScript 的 AWS SDK建立目錄儲存貯體。

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

------
#### [ 適用於 .NET 的 SDK ]

此範例示範如何使用 適用於 .NET 的 SDK建立目錄儲存貯體。

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

此範例示範如何使用 適用於 Python (Boto3) 的 AWS SDK建立目錄儲存貯體。

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

此範例示範如何使用 適用於 Ruby 的 AWS SDK建立目錄儲存貯體。

**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)。