S3でファイル操作した時に発生するイベントを調べてみた
こんにちは。深緑です。
S3バケットにファイルを作成した場合にLambdaを実行しているのですが、
削除したファイルを元に戻した場合は何のイベントになるのだろうか?というのが気になりました。
復元?いや作成イベントが起きてLambdaが動いてしまう?
というわけで検証してみました。
検証方法
S3バケットのイベント通知にSNSトピックを追加します。
SNSトピックにはEメールのサブスクリプションを追加。
Eメールでイベントの内容を受け取って調べます。
(最初CloudTrailで調べようと思いましたが、ログが多すぎて解読が無理でした💦)
これでイベントごとに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
であることがわかりました。
- バージョニングありのバケットでファイルを削除すると、まず削除マーカーができる。
ObjectRemoved:DeleteMarkerCreated
- これを消すことで削除ファイルが元に戻る。
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