
S3 Express One Zone をサポートするディレクトリバケットをAWSCLIで操作してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 の採用を検討される場合、ディレクトリバケット独自の機能制限や、仕様変更への追従可能な事を確認してご利用ください。






