RDS for PostgreSqlのログをLamdbaを使って
CloudwatchLogsに出力する方法を書きます。
Lamdbaでは、情報量が多そうなのでpython3を使います。
なぜRDSのエラーログをCloudwatchLogsに?
DBのエラーログを監視するという要件があるらしく。
しかし、RDSのエラーログはデフォルトではCloudwatchで見れないません。
(マネジメントコンソールのRDSのとこからは見れる)
そこで、監視ツールを導入するらしいのですが監視ツールでは
CloudwachLogsを監視しているようなのです。
以下の流れで監視します。
RDS→Lamdba→CloudwatchLogs→監視ツール
本記事では、CloudwachLogsに出力するのをゴールにします。
具体的な手順
Lambda用のIAMロールを作成する。
あらかじめ、Lambdaに割り当てるIAMロールを作成しておきましょう。
以下のロールで、CloudwatchLogsとRDSの操作の許可を与えます。
Lamdbaを作成する。
PostgreSQLのログを取得して、CloudwatchLogsに出力する関数を作ります。
ランタイムは、python3.6にします。
IAMロールは、既存のロールからあらかじめ作ったものを選択してください。
CloudwatchEventで10分ごとにLambdaを起動する。
CloudwatdchEventの画面で、新規にイベントを作成します。
今回は、10分ごとにLamdbaを起動するので以下になります。
cron式の書き方
[bash]cron(0/10 * * * * *)[/bash]
LamdbaでRDSのログを取得し、CloudwatchLogsに出力。
以下のコードをLambdaに書きます。
boto3書き方
まとめ
最初は、実現できないかと思ったんですけどLambdaとかで調べてみたらなんとかなりました。
今のLambdaのコードだと毎回全てのログが出てしまうので、差分だけにできるようにしなければ。
boto3のrdsログを取得するコマンドだと、dist型で返ってきて¥nがうまく認識されないです。
うまいこと綺麗にしたい。