takafumi blog

日々の勉強メモ

fluent-plugin-s3 設定と IAMロール アクションの関係と注意

環境   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_objectfalse ならアクションは最小限の 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 が固定されるので注意

github.com

check_bucket trueAPIリクエストにかかる料金の注意

check_bucket は起動時のチェックなので、 true でもほとんどAPIリクエストはしない。

しかし check_objecttrue だと書き込みの度にAPI GetObject を発行する。

そのため、特に書き込み頻度が高い場合は、APIリクエストが常に GetObject -> PutObject と二重に発生し料金が嵩むので注意。