Amazon S3オブジェクトのストレージクラスがSTANDARDの場合、"s3api head-object"ではストレージクラスが表示されません。
{
"AcceptRanges": "bytes",
"LastModified": "2026-01-10T03:18:23+00:00",
"ContentLength": 0,
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"ContentType": "text/plain",
"ServerSideEncryption": "AES256",
"Metadata": {}
}
今回の記事では、ストレージクラスがSTANDARDでもawscliでストレージクラスを知るコマンドを紹介します。
S3オブジェクトのストレージクラスが知りたい
■s3api head-objectではダメ?
awscliにはS3のオブジェクトのストレージクラスを知るコマンドが複数用意されています。単一オブジェクトの属性を知りたいだけなら"aws s3api head-object"を利用するのですが、オブジェクトのストレージクラスがSTANDARDの場合出力されません。
【コマンド結果】
C:\Users\csnp0001>aws s3api head-object --bucket saito-awsclitest-bucket --key test-folder/test-file.txt
{
"AcceptRanges": "bytes",
"LastModified": "2026-01-10T03:18:23+00:00",
"ContentLength": 0,
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"ContentType": "text/plain",
"ServerSideEncryption": "AES256",
"Metadata": {}
}
ためしにクエリしてみても、"null"と返ってきます。
aws s3api head-object --bucket <バケット名> --key <キー> --query StorageClass
【コマンド結果】
C:\Users\csnp0001>aws s3api head-object --bucket saito-awsclitest-bucket --key test-folder/test-file.txt --query StorageClass
null
しかし、他のストレージクラスの場合は、"s3api head-object"でも出力されます。例えば、"S3 Glacier Deep Archive"の場合です。
ストレージクラスを変更して、
aws s3api copy-object --bucket <バケット名> --key <キー> --copy-source <バケット名/キー> --storage-class DEEP_ARCHIVE
【コマンド結果】
C:\Users\csnp0001>aws s3api copy-object --bucket saito-awsclitest-bucket --key test-folder/test-file.txt --copy-source saito-awsclitest-bucket/test-folder/test-file.txt --storage-class DEEP_ARCHIVE
{
"Expiration": "expiry-date=\"Thu, 12 Feb 2026 00:00:00 GMT\", rule-id=\"CPI-Default-LC-Policy\"",
"ServerSideEncryption": "AES256",
"CopyObjectResult": {
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"LastModified": "2026-01-11T02:41:42+00:00",
"ChecksumCRC64NVME": "AAAAAAAAAAA="
}
head-objectを実行すると、先ほどまでなかった"StorageClass"が出力されています。
aws s3api head-object --bucket <バケット名> --key <キー>
【コマンド結果】
C:\Users\csnp0001>aws s3api head-object --bucket saito-awsclitest-bucket --key test-folder/test-file.txt
{
"AcceptRanges": "bytes",
"Expiration": "expiry-date=\"Thu, 12 Feb 2026 00:00:00 GMT\", rule-id=\"CPI-Default-LC-Policy\"",
"LastModified": "2026-01-11T02:41:42+00:00",
"ContentLength": 0,
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"ContentType": "text/plain",
"ServerSideEncryption": "AES256",
"Metadata": {},
"StorageClass": "DEEP_ARCHIVE"
}
クエリすると、次のように出力させることができます。
aws s3api head-object --bucket <バケット名> --key <キー> --query StorageClass
【コマンド結果】
C:\Users\csnp0001>aws s3api head-object --bucket saito-awsclitest-bucket --key test-folder/test-file.txt --query StorageClass
"DEEP_ARCHIVE"
ストレージクラスが"STANDARD"の場合でも、明示的に知りたい場合はどうすればいいのでしょうか?
■STANDARD の場合でもストレージクラスを知りたいとき
答えは、"list-objects-v2"を使うです。
"list-objects-v2"は、バケット内のオブジェクトの一部またはすべて(最大1,000個)を返すコマンドのため、個別オブジェクトの情報を取得する場合には不向きではあります。
ですので、"query"オプションで絞って出力させましょう。
実際に実行してみると、
aws s3api list-objects-v2 --bucket <バケット名> --query "Contents[?Key=='<キー>'].StorageClass"
【コマンド結果】出力例(STANDARDの場合)
C:\Users\csnp0001>aws s3api list-objects-v2 --bucket saito-awsclitest-bucket --query "Contents[?Key=='test-folder/test-file.txt'].StorageClass"
[
"STANDARD"
]
【コマンド結果】出力例(DEEP_ARCHIVEの場合)
C:\Users\csnp0001>aws s3api list-objects-v2 --bucket saito-awsclitest-bucket --query "Contents[?Key=='test-folder/test-file.txt'].StorageClass"
[
"DEEP_ARCHIVE"
]
まとめ
awscliでS3を操作するコマンドには、s3やs3apiがあり、さらにその中でも似たようなコマンドが複数あります。
そして、返ってくる値が微妙に違うため、状況に応じて使い分ける必要があります。リファレンスを読んで対応していきましょう。
参考リンク:AWS CLI コマンドリファレンス
↓ほかの協栄情報メンバーのAmazon S3についての記事を公開しています。ぜひ参考にしてみてください。
■KMSキー暗号化バケットでのS3レプリケーション設定の解決方法(齊藤弘樹)

