S3 Express One Zone をサポートするディレクトリバケットをAWSCLIで操作してみた
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 の採用を検討される場合、ディレクトリバケット独自の機能制限や、仕様変更への追従可能な事を確認してご利用ください。