AWS S3とは
S3とはデータを格納・管理できるオブジェクトストレージサービスです。 主にウェブサイトやアプリケーションなどのデータバックアップおよび復元、アーカイブなど、さまざまなことに利用します。
また、ファイルのバックアップ、ファイル処理の加工前、あるいは加工後のファイルの保存、動画・画像ファイルやCSSなどWebで使う静的なファイルをS3に置いて配信するなど、非常に広範囲な使い方ができます。
削除?
大きプロジェクトが終わると色々がいらなくになります、サーバーもそうですし、ELBなどもいらないです。S3も同じです!
料金を見ると:
最初の 50 TB/月 0.023USD/GB
次の 450 TB/月 0.022USD/GB
500 TB/月以上 0.021USD/GB
これを見ると安いってイメージですが、100TBあったら月で2000ドル超えてます!なので「いらないファイルとバケットを調査して、削除!」の気持ちになります。
マネジメントコンソール
あるバケットが使われてない古いファイルを見つかって削除した!マネジメントコンソール入って、フォルダを選んで!
そんなに簡単だと思ってたら色々問題が出てました。。大きファイルに対しては優秀!小さい大量のファイルだと。。
なぜか画面が真っ白になってました、別にセッションが切れてたわけではないので完全にバグですね。。
AWScliを使えましょう
高レベル aws s3 コマンドを使用すると、Amazon S3 オブジェクトの管理が容易になります。これらのコマンドにより、Amazon S3 のコンテンツの管理をそれ自体の内部およびローカルディレクトリ内で管理することができます。
ファイル確認
バケット、フォルダ、オブジェクトのいずれかを一覧表示するには、s3 ls コマンドを使用します。ターゲットまたはオプションを指定せずにコマンドを使用すると、すべてのバケットが一覧表示されます。
$ aws s3 ls s3://bucket/
バケット丸ごと見たい場合は全部出てますので確認出来ますがフィルターを付けたい場合は s3 ls
だけで足りないです!その場合はs3 sync
を使う場合!
s3 sync コマンドはバケットとディレクトリの内容、または 2 つのバケットの内容を同期します。通常、s3 sync は欠落しているか古くなったファイルやオブジェクトを、ソースとターゲットの間でコピーします。ですが、--dryrun
をオプション付けたら、ファイルの名前だけは出来ます!
他の便利オプションはlsと違ってフィルタリングが出来ます!s3 cp
、s3 mv
、s3 sync
、s3 rm
のいずれかのコマンドを使用する場合、--exclude
オプションまたは --include
オプションを使用して結果をフィルタリングできます。--exclude
オプションは、コマンドからオブジェクトのみを除外するようにルールを設定します。各オプションは、指定した順に適用されます。これを次の例で示します。
$ aws s3 sync s3://bucket/logs/ . --exclude "*" --include "d*" --dryrun
フィルタリングするんだったらもっと早いでしょうね!ではなかった。。コスパとしてはあんまり変わりません、実は s3 ls
とgrep
を使うと同じ効率でした。
$ aws s3 ls s3://bucket/ | grep "d*"
$ aws s3 sync s3://bucket/logs/ . --exclude "*" --include "d*" --dryrun
削除対象のファイルを確認出来たら次のステップは削除!
ファイル削除
これも分かりやすいです、macとlinuxと一緒のrmコマンド。
$ aws s3 rm s3://bucket/file.txt
残念ながらrmのエンドポイントはワイルドカードは使えません!s3 sync
と同じく、--exclude
と--include
を使うべきです!
$ aws s3 rm s3://bucket/logs/ --exclude "*" --include "d*" --recursive
注意
s3 rm
はs3 ls
の結果を見て削除しています。とは、削除対象のファイルをlsの結果出てから削除始まります!「d」を削除対象にしても、「a,b,c」のファイル名を読んでるんです、「d」のファイルを削除終わっただとしても、「z」までのファイルを読んでますのでプロセスがすごく長い場合もありま。
確認しやすいコマンド:
function s3google(){
letter=$1 | tr "." "\."
aws s3 ls s3://bucket/ 2>/dev/null | grep -m1 "PRE $letter.*"
}
それでいくつのファイル名を確認出来ます、grepの-m1は初めてのgrepヒットだけ出して、プロセスを切ってますのでlsの終わりを待てないきて大丈夫ですが、一気にs3 lsを切るとエラーが表示されてますので2>/dev/null
を入れてます。
$ s3google l;s3google c;
leets.txt
console.txt
それで削除出来ます!コスパはそんなに良くない、数億ファイルあれば数日かかってます。
それでやっと良いコスパを見つかりました!
ストレージのライフサイクル
オブジェクトがライフサイクルを通じてコスト効率の高い方法で保存されるように管理するには、Amazon S3 ライフサイクルを設定します。S3 ライフサイクル設定は、Amazon S3 がオブジェクトのグループに適用するアクションを定義するルールのセットです。
ファイルがアップロードされてから数日後にアクションを入れてます!ストレージの設定なので別のストレージクラスに移動出来ます、削除も出来ます。
例えば、logsをキープしたいですがそんなに1週間前のログはあんまり見ないのでログがアップロードされてから1週間後にstandardからGlacierに移動します!それで半年前のログいる?いらないですね、じゃ180日になったら削除の設定もします。
結果:
それで自動に古いログがそんなに料金は取らないし、確認しやすいし。
気になってたのは「アップロードされてから」の言葉、設定した前のファイルに対象にならない?
古いファイルのバケットのライフサイクルを新規設定してました、古いファイルが無事に削除されてました!!結構コスパが良い!画面で設定して、全部を任せする!
以上。