雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

RDSのログをLambda(python3.6)経由でS3に保存する

目的はRDS Auroraのaudit.logをS3に保存するため。 audit.logについてはこちら。

dev.classmethod.jp

どうせならLambdaでやりたくて、誰か作ってないかなと探したらありました。

github.com

ただちょっと物足りなくて、具体的には

  • 初回実行時はフラグを変えなきゃいけない
  • 設定値を直接スクリプトに埋め込むのもうーん
  • ログが更新されていたら1から全取得してアップし直すのもちょっと。。

という点をどうにかしたいなーと。

特に全取得->アップというのがちょっとよろしくなくて、Auroraのaudit.logは現状100M毎のローテーションになるのでそれを毎回取得していたら結構重いなと。

ついでにS3にアップされたらそれをトリガーにさらに何かしらの処理をする、ということもやりたかったということもあります。

というわけでryanhollanさんのを参考にしつつ作り直してみました。

github.com

変更点はこちら。

  • 設定値は環境変数で設定
  • ログがS3に保存されていなかったら勝手に1から取得してくれる
  • 前回取得時からの増分を取得、S3に保存
  • ログファイルの圧縮に対応
  • ついでにpython3.6で動作

ただ、初回実行時はサイズが大きいログやログの数が多いとLambdaの実行時間である3分で終わらない可能性があります。

その場合はLambda以外の環境で実行する必要があります。Lambda以外でもboto3入れてIAMの権限あればそのまま動くようにはなってます。

あと、audit.logだけじゃなくてerror.logやslow_query.logも取得できます(RDSのパラメータでlog_outputをFILEにする必要がありますが)

次は保存されたファイルを元にETL処理するとこまでやる予定。