インフラ

RDS for PostgreSQLのエラーログをlambdaでCloudwatchLogsに出力する

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がうまく認識されないです。
うまいこと綺麗にしたい。