この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon S3 は用途に応じて、様々なストレージクラスが提供されています。 今回は AWS CLI からストレージクラス系操作を行う方法を紹介します。
ストレージクラス概要
まずは S3 のストレージクラスを軽くおさらいします。
ストレージクラスの特徴
ストレージクラス | 用途 | 耐久性 | 可用性 | 保存コスト | 取得コスト |
---|---|---|---|---|---|
STANDARD | デフォルトのストレージクラス。アクセス頻度の高いデータ | 99.999999999% | 0.9999 | △ | ◯ |
STANDARD_IA | アクセスが頻繁ではないデータ | 99.999999999% | 0.999 | ◯ | △ |
ONEZONE_IA | アクセスが頻繁ではないデータ 1 つのアベイラビリティーゾーンでのみ保存するため、可用性と回復性が劣る。 | 99.999999999% | 0.995 | ◯ | △ |
GLACIER | アクセスが頻繁ではないデータのアーカイブ。リアルタイムアクセスできない。データ取得のコストが高い。 | 99.999999999% | 0.9999 | ◎ | ☓ |
RRS | 非推奨 | 99.99% | 0.9999 | △ | ◯ |
大きく
- STANDARD
- IA(Infrequent Access)
- GLACIER
の3種類があることを覚えておきましょう。
適切なストレージクラスの選択
適切なストレージクラスを選択するために、ストレージクラスを分析分析することも出来ます。 詳細は次のドキュメントを参照下さい。
AWS ドキュメント » Amazon Simple Storage Service (S3) » 開発者ガイド » Amazon S3 分析 – ストレージクラス分析
RRS(Reduced Redundancy Storage)は現在では非推奨です。
耐久性が他のクラスに比べて大きく劣るにも関わらず、現在では他のクラスより保存コストが高くかかり、デメリットしかありません。 現在、RSSをご利用の場合は、他のクラスへの切り替えを検討下さい。
ストレージクラスの歴史
- 2006/03 : Amazon S3 発表(Standard ストレージクラスのみ)
- 2010/05 : Reduced Redundancy ストレージクラス開始
- 2012/08 : Glacier ストレージクラス開始
- 2015/09 : Infrequent Access ストレージ開始
- 2018/04 : One Zone-Infrequent Acces開始
というように、数年ごとに新しいストレージクラスが追加されています。
AWS CLI から S3 ストレージクラスを操作
AWS CLI から S3 を操作する場合、2種類のコマンドが用意されています。
- aws s3 : S3 の頻出操作向け高レベルコマンド
- aws s3api : REST API に対応する低レベルコマンド
この記事では、できるかぎり両方のコマンドで操作方法を紹介します。
ストレージクラスの指定
S3 オブジェクトの PUT/COPY 時にはストレージクラスを指定します。 以下のストレージクラスの物理名を利用します。
- STANDARD
- STANDARD_IA
- ONEZONE_IA
- GLACIER
- RRS
ストレージクラスを指定して S3 に PUT
新規に S3 にオブジェクトを保存する際に、ストレージクラスを指定する方法を紹介します。
aws s3
単一オブジェクトの場合 cp コマンドを利用します。
--storage-class
でストレージクラスを指定します。
$ aws s3 cp ONEZONE_IA s3://YOUR-BUCKET/storage-class/bar --storage-class STANDARD
upload: ./ONEZONE_IA to s3://YOUR-BUCKET/storage-class/bar
sync
, mv
コマンドでも同様に --storage-class
を指定します。
aws s3api
put-object コマンドを利用します。
--storage-class
でストレージクラスを指定します。
$ aws s3api put-object \
--bucket YOUR-BUCKET \
--key storage-class/foo \
--body ONEZONE_IA \
--storage-class ONEZONE_IA
{
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\""
}
ストレージクラスを変更
S3 に保存済みオブジェクトのストレージクラスを変更する方法を紹介します。
aws s3
cp コマンドを利用します。
ストレージクラスだけを変更する API は存在せず source と destination を同じにして --storage-class
を指定します。
$ aws s3 cp \
s3://YOUR-BUCKET/storage-class/foo \
s3://YOUR-BUCKET/storage-class/foo \
--storage-class STANDARD_IA
copy: s3://YOUR-BUCKET/storage-class/foo to s3://YOUR-BUCKET/storage-class/foo
オブジェクト個別ではなく、特定のプリフィックス以下、あるいは、バケット全体でまとめて変更したい場合は --recursive
オプションを渡します。
$ aws s3 cp \
s3://YOUR-BUCKET/ \
s3://YOUR-BUCKET/ \
--recursive \
--storage-class STANDARD_IA
aws s3api
copy-object コマンドを利用します。
source と destination を同じにして --storage-class
を指定します。
$ aws s3api copy-object \
--copy-source YOUR-BUCKET/storage-class/STANDARD \
--bucket YOUR-BUCKET --key storage-class/STANDARD \
--storage-class STANDARD_IA
{
"CopyObjectResult": {
"LastModified": "2018-05-03T10:56:09.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\""
}
}
オブジェクトのストレージクラスを確認
S3 オブジェクトのストレージクラスを確認します。
aws s3
対応するコマンドは存在しません。
s3api 系コマンドをご利用下さい。
aws s3api
- 一覧の場合は list-objects-v2 コマンド
- オブジェクト個別の場合は head-object コマンド
を利用します。
一覧表示の場合
list-objects-v2 コマンドを利用し、バケット(--bucket
)とプリフィックス(--prefix
)を指定します。
レスポンスの Contents
の StorageClass
からストレージクラスを確認出来ます。
$ aws s3api list-objects-v2 --bucket YOUR-BUCKET --prefix storage-class
{
"Contents": [
{
"LastModified": "2018-05-03T10:36:59.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "ONEZONE_IA",
"Key": "storage-class/ONEZONE_IA",
"Size": 0
},
…
{
"LastModified": "2018-05-03T10:37:01.000Z",
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "STANDARD_IA",
"Key": "storage-class/STANDARD_IA",
"Size": 0
}
]
}
オブジェクト個別の場合
head-object コマンドを利用します。
レスポンスの StorageClass
からストレージクラスを確認出来ます。
ストレージクラスがデフォルトの STANDARD
の場合、この属性はレスポンスに含まれません。
Provides storage class information of the object. Amazon S3 returns this header for all objects except for Standard storage class objects.
https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html
# STANDARD クラスの場合
$ aws s3api head-object --bucket YOUR-BUCKET --key storage-class/STANDARD
{
"AcceptRanges": "bytes",
"ContentType": "binary/octet-stream",
"LastModified": "Thu, 03 May 2018 10:37:01 GMT",
"ContentLength": 0,
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"Metadata": {}
}
# STANDARD_IA クラスの場合
$ aws s3api head-object --bucket YOUR-BUCKET --key storage-class/STANDARD_IA
{
"AcceptRanges": "bytes",
"ContentType": "binary/octet-stream",
"LastModified": "Thu, 03 May 2018 10:37:01 GMT",
"ContentLength": 0,
"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"",
"StorageClass": "STANDARD_IA",
"Metadata": {}
}
まとめ
Amazon S3 ストレージクラスに関連する AWS CLI の操作方法を紹介しました。
各種 SDK に読み替える場合は、 REST API がベースになっている s3api を参考にして下さい。