RDSのログをLambda(python3.6)経由でS3に保存する
目的はRDS Auroraのaudit.logをS3に保存するため。 audit.logについてはこちら。
どうせならLambdaでやりたくて、誰か作ってないかなと探したらありました。
ただちょっと物足りなくて、具体的には
- 初回実行時はフラグを変えなきゃいけない
- 設定値を直接スクリプトに埋め込むのもうーん
- ログが更新されていたら1から全取得してアップし直すのもちょっと。。
という点をどうにかしたいなーと。
特に全取得->アップというのがちょっとよろしくなくて、Auroraのaudit.logは現状100M毎のローテーションになるのでそれを毎回取得していたら結構重いなと。
ついでにS3にアップされたらそれをトリガーにさらに何かしらの処理をする、ということもやりたかったということもあります。
というわけでryanhollanさんのを参考にしつつ作り直してみました。
変更点はこちら。
- 設定値は環境変数で設定
- ログがS3に保存されていなかったら勝手に1から取得してくれる
- 前回取得時からの増分を取得、S3に保存
- ログファイルの圧縮に対応
- ついでにpython3.6で動作
ただ、初回実行時はサイズが大きいログやログの数が多いとLambdaの実行時間である3分で終わらない可能性があります。
その場合はLambda以外の環境で実行する必要があります。Lambda以外でもboto3入れてIAMの権限あればそのまま動くようにはなってます。
あと、audit.logだけじゃなくてerror.logやslow_query.logも取得できます(RDSのパラメータでlog_outputをFILEにする必要がありますが)
次は保存されたファイルを元にETL処理するとこまでやる予定。