2015年5月25日

S3 の使用量を確認する方法

S3 を使っている場合、今どの程度の容量を使用しているか気になることはありませんか。

リージョン全体の月あたりのサイズであれば、請求書で確認することができます。バケット単位で見るにはタグをつけてコスト配分レポートを使えばわかりそうです。

毎月のコスト配分レポートの設定
http://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/configurecostallocreport.html


しかし、これでは現時点での使用量は確認できません。

AWS CLI の S3 コマンド の ls に summarize というオプションが追加されていました。

AWS CLI s3 ls
http://docs.aws.amazon.com/cli/latest/reference/s3/ls.html


summarize を指定すると、オブジェクト数や合計サイズが出力されます。
recursive を併用することで、"ディレクトリ" 配下のオブジェクトも合計に含めることができますし、human-readable を使うとファイルサイズが Bytes/MiB/KiB/GiB/TiB/PiB/EiB で表示されます。

$ aws s3 ls s3://mybucket --recursive --human-readable --summarize
(オブジェクトの一覧が出力)

Total Objects: 14182
Total Size: 4.1 GiB

S3 の API には合計を出力するものは無いと思うので、単に取得したオブジェクトのリストを内部的にカウントしてくれているだけだと思いますが、余計なひと手間がいらなくなりました。

これは便利ですね!

2015年5月20日

General Purpose (SSD) Volumes を使うときの注意

General Purpose (SSD) Volumesをデフォルトで使ううよう勧められるため、ほとんどGeneral Purpose (SSD) Volumesばかり使っています。

しかしながらGeneral Purpose (SSD) Volumesには落とし穴があります。

ドキュメントを見てみましょう。
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_gp2
ベースラインパフォーマンスの I/O レベルよりも高いレベルがボリュームで必要となる場合は、クレジットバランスの I/O クレジットを使用して、必要なパフォーマンスレベルまでバーストします(最大レベルは 3,000 IOPS です)。

I/O クレジットバランスが空になったらどうなりますか。

ボリュームがすべての I/O クレジットバランスを使用した場合、I/O デマンドがベースラインレベルを下回り、未使用のクレジットが I/O クレジットバランスに追加されるまで、ボリュームの最大 IOPS パフォーマンスはベースライン IOPS パフォーマンスレベル(ボリュームがクレジットを取得するレート)のままになり、スループットの限界はベースライン IOPS に最大スループットを乗算して 3,000 で除算した値まで下がります。

つまり8GBのEBSを使う場合、ベースラインである24IOPSを超える場合にはクレジットを消費します。
そして、クレジットが尽きた場合には24IOPSとなってしまいます。また、スループットも 128 * 24 / 3000 = 1.024 MiB/秒になります。
これはマグネティック ボリュームの平均 100 IOPS、最大スループット 40 ~ 90 MiB/秒よりも著しく小さいです。

こんなディスクでは使い物にならないですね。。。
スナップショットをとって新しいボリュームに作り直しましょう。
待つよりも初期クレジットをもらったほうが手っ取り早そうです。

各ボリュームは、初期 I/O クレジットバランス(5,400,000 I/O クレジット)を受け取ります。

継続的にIOが発生する場合にはもっとサイズを大きくするか、Provisioned IOPS (SSD)を使ったほうが良さそうですね。


ところで、General Purpose (SSD) Volumesにデフラグとかウィルススキャンかけたらどうなるんですかね。。。