環境 fluent-plugin-s3 1.6.0
関係性のまとめ
| アクション | 関係ある設定 | 説明 |
|---|---|---|
| s3:ListBucket | check_bucket true | trueであればfluent起動時にbucket存在をチェック。存在しなければ起動をリトライするfalseだと起動はするが書き込み時に失敗する |
| s3:GetObject | check_object true | trueであれば同じobjectがあると上書きせずエラーになるfalseだと同名objectは上書きされる |
| s3:PutObject | 書き込み全般 |
つまり check_bucket check_object が false ならアクションは最小限の PutObject のみでよい
check_object false の注意
check_object false の時も s3_object_key_format が同名にしない事で不用意な上書きを防ぐ事ができる。
s3_object_key_format を設定していなければ、デフォルト値自体が上書きされにくいフォーマットに自動で変更される。
(s3_object_key_format "%{path}/%{date_slice}_%{hms_slice}.%{file_extension}" になる)
さらに uuid_flush hex_random index hostname などを使えばより重複を防止し安全に扱える。
uuid_flush- bufferがフラッシュされる際、常にUUIDに置き換えられる
- 書き込み失敗のリトライ時も新しいUUIDに置き換えられる
hostname- ホストネームに置き換えられるので、
%sや%{hms_slice}などと組み合わせると重複を防止できる
- ホストネームに置き換えられるので、
hex_random:- bufferに使われるhashで置き換えられる
- 例えば同名エラーでリトライしたときも同じ値が使われる
%{index}を組み合わせればリトライ時は%{index}が更新される
fluent-plugin-s3 v0.12 の注意
正確には fluent-plugin-s3 < 1.0.0rc7 のとき。
この時 check_object false だと s3_object_key_format が固定されるので注意
check_bucket true と APIリクエストにかかる料金の注意
check_bucket は起動時のチェックなので、 true でもほとんどAPIリクエストはしない。
しかし check_object は true だと書き込みの度にAPI GetObject を発行する。
そのため、特に書き込み頻度が高い場合は、APIリクエストが常に GetObject -> PutObject と二重に発生し料金が嵩むので注意。