IT

【aws】削除されたS3オブジェクトサイズを取得したい

ちょっと詰まったので自身用のナレッジとして記載します。

テキストベースで十分な内容の為、画像は添付しません。

やりたいこと

Amazon S3のオブジェクトバージョニングを有効にした際に、
非現行バージョンのオブジェクトのそれぞれの容量と削除日が知りたい。

  • 前提
    バケットのバージョニングが「有効」になっている。
  • 確認導線
    該当S3 > プロパティ > バケットのバージョニング > 有効

対応方法①

以下リンクに書いてある方法で以下リストを取得し、突き合わせする

・オブジェクトリスト
・削除マーカーリスト

◆参考リンク
AWS S3 で削除したファイルを復旧させる方法 (削除マーカーを削除する方法)
バージョニングが有効なバケットで削除された Amazon S3 オブジェクトを取得するにはどうすればよいですか?

■メリット
・時間的な制約なく実施することが可能

■デメリット
・コマンドライン操作が必要
 AWS CLIやjq等が利用できる環境が必要
・awsアクセスキーと必要な権限が必要
・突き合わせする際には、スクリプト書いたりしないといけない

対処方法②

S3インベントリを利用して、リストを取得する

◆参考リンク
Amazon S3 インベントリ

■メリット
・GUI操作だけで完結できる
・S3のIAM権限だけあればOK
・突き合わせはExcelのVLOOKUPが利用できればOK

■デメリット
・日時イベントの為、出力自体に時間が掛かる
・別途S3にデータを保存する領域が必要

どちらでやったのか

S3インベントリの方がお手軽なので、こちらで対応しました。


発生するコストについて

S3インベントリはその使用料とS3標準の双方のコストが発生します。

Amazon S3 の料金より以下を引用

Amazon S3 の料金 > 管理と分析 > ストレージ分析と洞察の料金
 S3 Inventory リストアップされるオブジェクト 100 万個あたり 0.0028USD

Amazon S3 の料金 > ストレージ > S3 標準
 S3 標準 - 頻繁にアクセスするデータに一般的に使用される、あらゆるタイプのデータの汎用ストレージ
  最初の 50 TB/月 0.025USD/GB
  次の 450 TB/月  0.024USD/GB
  500 TB/月以上   0.023USD/GB


設定手順

  • 導線
    該当S3 > 管理 > インベントリ設定にて、インベントリ設定の作成
  • 設定内容

インベントリ設定名:任意
インベントリスコープ:すべてのバージョンを含める
レポートの詳細:このアカウント
送信先:任意のバケット
頻度:日別
出力形式:CSV
ステータス:有効にする
インベントリレポートの暗号化:暗号化キーを指定しない ※任意
追加のメタデータフィールド - オプション
 サイズ
 最終更新日時
  ※他任意


  • 実行結果
    ドキュメントには初回は最大で48時間待ちとの記載がありましたが、
    2時間程度でレポートが作成されていました。

ポイント

S3 コンソールを使用したインベントリの設定より引用
注記:最初のレポートが配信されるまでに最大で 48 時間かかることがあります。


上述で設定した送信先バケットに以下なオブジェクトが生成されていました。
※オブジェクト名はマスクしていいます。

設定バケット名フォルダ
└対象バケット名フォルダ
 └インベントリ設定名
  ├yyyy-mm-ddT01-00Z
  │ ├manifest.checksum
  │ └manifest.json
  ├data
  │  └xxxxx.csv.gz
    └hive
       └dt=yyyy-mm-dd-01-00
         └symlink.txt

データ突き合わせ

dataフォルダ内に配置されている「~.csv.gz」が該当のリストになるので、
ダウンロードし解凍します。


ポイント

CSVファイルには項目名が入っていないので、以下リンクから項目を引っ張ります。

Amazon S3 インベントリのリスト


上述の設定になっていれば以下のような形式で出力されます。

バケット名キー名バージョン IDIsLatest削除マーカーサイズ最終更新日
xxbuckettest.txtxxxxFALSETRUEyyyy-mm-ddT11:44:30.000Z
xxbuckettest.txtyyyyFALSEFALSE25031yyyy-mm-ddT10:44:20.000Z
出力サンプル

ポイント

IsLatest」が「FALSE」になっているものが、非現行(削除済み)オブジェクトになります。
削除マーカー」が「TRUE」が削除マーカーになります。

⭐︎「削除マーカー」自体も非現行(削除済み)オブジェクトであるので注意です。


あとは、「キー名」をキーとして内容を突き合わせるだけとなります。


私はExcelがあまり得手ではないので、
以下のように対応しました。

①シートをフィルタ&分割し以下2シート用意
 ・「削除マーカーTRUE」シート
 ・削除マーカー:FALSE」シート
削除マーカー:FALSE」のシートにて、
 VLOOKUP関数で、「削除マーカーTRUE」シートの「キー名」の値が一致したら、
 「最終更新日」を返す様に関数の条件を設定
③上記で返した「最終更新日」が削除日になるので、
 項目を編集してリスト完成


終わりに

最後に書いてて気づきましたが、
Amazon S3 Storage Lensの高度なメトリクス設定でも、
同様なことができるかもしれませんね。

ダッシュボード生成に2日程度かかってしまいますが。。。


以上、どなたかのお役に立てれば幸いです。

  • この記事を書いた人

緑川縁

ニートからシステムエンジニアになった人
クラウド案件をメインにやっています。
保持資格:CCNA,AWS SAA&SAP,秘書検定2級
趣味でボカロ曲作り始めました。

-IT
-,