LoginSignup
9
4

More than 1 year has passed since last update.

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ドル超えてます!なので「いらないファイルとバケットを調査して、削除!」の気持ちになります。

マネジメントコンソール

あるバケットが使われてない古いファイルを見つかって削除した!マネジメントコンソール入って、フォルダを選んで!
Screen Shot 2022-03-15 at 14.12.11.png

そんなに簡単だと思ってたら色々問題が出てました。。大きファイルに対しては優秀!小さい大量のファイルだと。。

Screen Shot 2022-03-15 at 19.42.47.png

なぜか画面が真っ白になってました、別にセッションが切れてたわけではないので完全にバグですね。。

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 cps3 mvs3 syncs3 rm のいずれかのコマンドを使用する場合、--exclude オプションまたは --include オプションを使用して結果をフィルタリングできます。--exclude オプションは、コマンドからオブジェクトのみを除外するようにルールを設定します。各オプションは、指定した順に適用されます。これを次の例で示します。

「d」から始まるファイル名を出す
$ aws s3 sync s3://bucket/logs/ . --exclude "*" --include "d*" --dryrun

フィルタリングするんだったらもっと早いでしょうね!ではなかった。。コスパとしてはあんまり変わりません、実は s3 lsgrepを使うと同じ効率でした。

同じコスパ:
$ 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 rms3 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日になったら削除の設定もします。
結果:
Screen Shot 2022-06-17 at 18.24.06.png
それで自動に古いログがそんなに料金は取らないし、確認しやすいし。

バケット毎に設定する物です、これは設定画面:
screencapture-s3-console-aws-amazon-s3-management-data-analytics-metaps-com-lifecycle-edit-2022-06-17-18_25_48.png

気になってたのは「アップロードされてから」の言葉、設定した前のファイルに対象にならない?
古いファイルのバケットのライフサイクルを新規設定してました、古いファイルが無事に削除されてました!!結構コスパが良い!画面で設定して、全部を任せする!

以上。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4