🪣

S3でファイル操作した時に発生するイベントを調べてみた

2023/02/05に公開

こんにちは。深緑です。

S3バケットにファイルを作成した場合にLambdaを実行しているのですが、
削除したファイルを元に戻した場合は何のイベントになるのだろうか?というのが気になりました。
復元?いや作成イベントが起きてLambdaが動いてしまう?
というわけで検証してみました。

検証方法

S3バケットのイベント通知にSNSトピックを追加します。
SNSトピックにはEメールのサブスクリプションを追加。
Eメールでイベントの内容を受け取って調べます。
(最初CloudTrailで調べようと思いましたが、ログが多すぎて解読が無理でした💦)

S3バケットのイベント通知設定

これでイベントごとにEメールが届くようになります。
メール本文にイベントの内容がJSONで記載されているので、そこから発生したイベントを解読します。

S3バケットのイベント通知でSNSを使用する場合の注意点

S3バケットのイベント通知でSNSトピックを発行する場合、
トピック側のアクセスポリシーに当該バケットからの発行許可を追加する必要があります。

これについてはインターステラ株式会社様の技術ブログを参考にさせていただきました。
ありがとうございます。
Amazon S3でイベント通知をAmazon SNSに送信するよう設定しようとしたら “Unable to validate the following destination configurations” というエラーが出る場合の対処

検証結果

念の為、バージョニングあり・なし両方のバケットで調べてみました。

バージョニングありの場合

操作 イベント 備考
ファイルのアップロード ObjectCreated:Put
ファイルの上書きアップロード ObjectCreated:Put
ファイルの削除 ObjectRemoved:DeleteMarkerCreated
削除ファイルを戻す
(削除マーカーの削除)
ObjectRemoved:Delete
完全に削除 ObjectRemoved:Delete バージョンの数だけ発生
ファイルの移動
(移動元)
ObjectRemoved:DeleteMarkerCreated
ファイルの移動
(移動先)
ObjectCreated:Copy
Glacierに移動 ObjectCreated:Copy ストレージクラス:Glacier Flexible Retrieval (旧 Glacier)
Glacierから復元 ObjectRestore:Post
ObjectRestore:Completed
ストレージクラス:Glacier Flexible Retrieval (旧 Glacier)

なんと、削除したファイルを元に戻した場合、発生するのは削除イベントのObjectRemoved:Deleteであることがわかりました。

  1. バージョニングありのバケットでファイルを削除すると、まず削除マーカーができる。
    ObjectRemoved:DeleteMarkerCreated
  2. これを消すことで削除ファイルが元に戻る。
    ObjectRemoved:Delete

削除したファイルを元に戻すのは、「削除マーカー」というバージョンを消す操作なんですね。
わざわざ「削除マーカー」という言葉がある理由がやっとわかりました。
Windowsのゴミ箱の操作とは感覚が違いますね。

あと興味深いのはファイルの移動は削除とコピーであること。
MacOSみたいですね。

バージョニングなしの場合

操作 イベント 備考
ファイルのアップロード ObjectCreated:Put
ファイルの上書きアップロード ObjectCreated:Put
ファイルの削除 ObjectRemoved:Delete
ファイルの移動
(移動元)
ObjectRemoved:Delete
ファイルの移動
(移動先)
ObjectCreated:Copy
Glacierに移動 ObjectCreated:Copy ストレージクラス:Glacier Flexible Retrieval (旧 Glacier)
Glacierから復元 ObjectRestore:Post
ObjectRestore:Completed
ストレージクラス:Glacier Flexible Retrieval (旧 Glacier)

「削除マーカー」に関するところがないだけですね。

余談

削除したファイルを元に戻すのをマネジメントコンソールでやると、
微妙にわかりづらいので念の為書いておきます。

削除したファイルを元に戻すのをマネジメントコンソールでやると、微妙にわかりづらい

タイプ:「削除マーカー」の行をチェックして「削除」です。

Discussion