S3 Express One Zone をサポートするディレクトリバケットをAWSCLIで操作してみた

AWSCLIを利用して、S3 Express One Zoneをサポートするディレクトリバケット、バケット作成、一覧確認などを試してみました。
2023.12.16

S3 Express One Zone ストレージクラスをサポートする ディレクトリバケット、 作成、削除や、一覧確認などの操作を AWS CLIを利用して試す機会がありましたので、紹介させて頂きます。

準備

Amazon Linux 2023 の AMIで起動したEC2を実行完了として利用。 ARMアーキテクチャ用のawscliを最新バージョンに更新して利用しました。

sudo dnf remove awscli -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
sudo ln -s /usr/local/bin/aws /usr/bin/aws
rm -rf aws awscliv2.zip
$ aws --version
aws-cli/2.15.1 Python/3.11.6 Linux/6.1.66-91.160.amzn2023.aarch64 exe/aarch64.amzn.2023 prompt/off

S3バケット操作

create-bucket

東京リージョンのS3にディレクトリバケットを作成を試みました。

バケット名のサフィックスは、ディレクトリバケットが求める仕様としました。

BASE_NAME='test-000000000000'
AZ_NAME='apne1-az4'
BUCKET_NAME="${BASE_NAME}--${AZ_NAME}--x-s3"

aws s3api create-bucket \
 --bucket ${BUCKET_NAME} \
 --create-bucket-configuration "Location={Type=AvailabilityZone,Name=${AZ_NAME}},Bucket={DataRedundancy=SingleAvailabilityZone,Type=Directory}"

‐ 実行結果

{
    "Location": "https://test-000000000000--apne1-az4--x-s3.s3express-apne1-az4.ap-northeast-1.amazonaws.com/"
}

AWS CLI スケルトン

スケルトンを利用する場合、ディレクトリバケットがサポートしない項目は除外します。

cat << EoL > config.json
{
    "Bucket": "test-000000000000--apne1-az4--x-s3",
    "CreateBucketConfiguration": {
        "Location": {
            "Type": "AvailabilityZone",
            "Name": "apne1-az4"
        },
        "Bucket": {
            "DataRedundancy": "SingleAvailabilityZone",
            "Type": "Directory"
        }
    }
}
EoL
aws s3api create-bucket --cli-input-json file://config.json

list-directory-buckets

ディレクトリバケットの一覧は専用APIを利用して取得します。

$ aws s3api list-directory-buckets
{
    "Buckets": [
        {
            "Name": "test-000000000000--apne1-az4--x-s3",
            "CreationDate": "2023-12-15T13:56:16.485000+00:00"
        }
    ]
}

list-objects-v2

バケット内のオブジェクトの確認を試みました。

aws s3api list-objects-v2 --bucket test-000000000000--apne1-az4--x-s3
  • 実行例
$ aws s3api list-objects-v2 --bucket test-000000000000--apne1-az4--x-s3 | head -n 10
{
    "Contents": [
        {
            "Key": "s3/xxxx/2023-12-09-07-38-18-1874FCFFC6B053DE",
            "LastModified": "2023-12-15T13:59:08+00:00",
            "ETag": "\"xxxx\"",
            "Size": 1302,
            "StorageClass": "EXPRESS_ONEZONE"
        },

prefix指定

ディレクトリバケット、末尾が「/」で終わるプリフィックスを指定のみをサポートします。

aws s3api list-objects-v2 --bucket test-000000000000--apne1-az4--x-s3  --prefix 's3/'

末尾が「/」以外を指定すると、ディレクトリバケットではエラーとなります。

$ aws s3api list-objects-v2 --bucket test-000000000000--apne1-az4--x-s3  --prefix 's3/2023-12'

An error occurred (InvalidRequest) when calling the ListObjectsV2 operation: This bucket does not support a prefix that does not end in a delimiter. Specify a prefix path ending with a delimiter and try again.

「start-after」も、ディレクトリバケットはサポート外になりました。

$ aws s3api list-objects-v2 --bucket test-000000000000--apne1-az4--x-s3  --start-after 's3/2023-12'

An error occurred (NotSupported) when calling the ListObjectsV2 operation: This bucket does not support start-after query parameter for ListObjectsV2 API.

delete-bucket

バケットの削除は、ディレクトリバケットもこれまでと差異なく可能でした。

BASE_NAME='test-000000000000'
AZ_NAME='apne1-az4'
BUCKET_NAME="${BASE_NAME}--${AZ_NAME}--x-s3"

aws s3api delete-bucket  --bucket ${BUCKET_NAME}

まとめ

最大10倍のIO性能で利用できるとされる ディレクトリバケット、従来のS3(汎用)とは互換性がないAPIなどが存在します。

S3 Express One Zone の採用を検討される場合、ディレクトリバケット独自の機能制限や、仕様変更への追従可能な事を確認してご利用ください。