1.前書き
S3の特定バケット内にあるファイルのストレージクラスをCLIから確認したくなり、やり方を調べてみた。
s3apiコマンドを使用すれば、json形式でS3に保存されているファイル情報を確認することができる。
そして出力されるパラメータのうち、「StorageClass」を確認すればいいことが分かった。
<出力イメージ>.json
{
"Contents": [
{
"Key": "hoge.txt",
"LastModified": "2023-09-01T02:22:22+00:00",
"ETag": "\"999999999999\"",
"Size": 99,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "hogehoge",
"ID": "999999999999999999"
}
}
]
}
ここで正直な心の声が聞こえた。
「ファイル数が増えるとパッと確認しづらい!」
「json形式じゃなくて表形式で確認したいんじゃ...」
そんな心の声にしたがい、スクリプトを書いてみた。
本記事はその備忘録である。
2.処理の概要
- s3apiの結果をjsonファイルに出力する。
- 出力したjsonファイルをConvertFrom-Json コマンドレットをベースに整え、表形式で出力する。
3.作成したスクリプト
exp_S3api_01.ps1
# 変数設定
$bucket_name = "<特定のバケット名>"
$path = "C:\Work\Test"
$json_file = $path + "\s3api_list.json" #s3apiコマンドの出力ファイル
# s3apiコマンドで特定バケット内のファイル情報を出力(json形式)
aws s3api list-objects --bucket $bucket_name | Out-File $json_file
# jsonファイルを読み込んで表形式で出力
(Get-Content $json_file | ConvertFrom-Json).Contents |
Select-Object Key,StorageClass,Size,LastModified
4.できあがるもの
問題なくどのファイルが、どのストレージクラスで保存されているのか、
表形式で出力することができた。
(ファイル数が増えるなら、やはり表形式の方が見やすいでしょう...)

また、オプションとしてcsvファイルでの出力も簡単にできる。
exp_S3api_02.ps1
# 変数設定
$bucket_name = "<特定のバケット名>"
$path = "C:\Work\Test"
$json_file = $path + "\s3api_list.json" #s3apiコマンドの出力ファイル
$exp_file = $path + "\s3file_list.csv" #出力するcsvファイル
# s3apiコマンドで特定バケット内のファイル情報を出力(json形式)
aws s3api list-objects --bucket $bucket_name | Out-File $json_file
# jsonファイルを読み込んでcsvファイルへ変換
(Get-Content $json_file | ConvertFrom-Json).Contents |
Select-Object Key,StorageClass,Size,LastModified |
Export-Csv $exp_file -Encoding default
出力結果は以下の通り。

ファイル数が増えたりストレージクラスの種類が増えたりすると、
フィルターをかけて見たくなる瞬間があると思うので、今後もどこかで使うかなーと考えている。
5.参照