スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信

Amazon AuroraのエラーログをLambdaで取得してみる

はじめに

Amazon Aurora(以下Aurora)ではデフォルトでエラーログが出力するようになっています。
(スロークエリログや一般ログはデフォルトでは出力されないため、設定が必要です)
ただ現時点では残念ながらAuroraのエラーログについては、公式でのドキュメントが存在しておりません。
そのため、仕様についての確認はサポートに問い合わせるしかない状況です。
以前、少し確認したところ以下の仕様は、RDS for MySQLと同様のようでした。参考:RDS for MySQL用ページ

  • 1 時間ごとにローテートされ、最大30日間、またログの合計サイズが 128 MB まで保存
  • 最大保持期間、もしくはログの合計サイズに達した場合にRDSが自動的に削除

上記内容からAWSでエラーログを保持してくれるのは、30日間までということが分かります。
しかし場合によっては、それ以上の期間で保持が必要なケースもあると思います。
その際に、手動で取得するのは手間だと思いますので、自動化を検討する事にします。

方法として

私が考えたのは下記3点です。

  1. AWS CLIを使用し、crontabと組み合わせて定期実行
  2. AWS SDKを使用し、crontabを組み合わせて定期実行
  3. AWS Lambdaを使用し、CloudWatchと組み合わせて定期実行

今回はタイトルでも出てますが、3の方法で行います。
またLambdaは[Node.js,Java,C#,Python]で利用することが可能なのですが、今回はPython3.6を選択しました。

要件としては下記を想定しました。

  • ログの取得は前日分の[mysql-error-running.log.タイムスタンプ]
  • ログはS3に保存

Lambda関数作成

今回はPythonの学習も兼ねてチャレンジしている為、ローカル環境にPythonのSDKであるboto3をインストールし、作成したコードをzip化しアップロードしました。
その為、ローカル環境からも利用しやすくなっているかと思います。

boto3とAWS Lambda関数のリファレンスを確認しながら作成していきます。

1. まずは関数を1から作成するように、コンソールから選択していきます。

2. トリガーについては後ほど設定するので、ここはそのまま次にいきます。

3. そして基本的な設定をいれて、作成したコードをzipでアップロードします。

4. 同じ画面よりハンドラ及びロールの設定も行います。


作成したロールのポリシーは下記

5.詳細でタイムアウト値を設定します

デフォルトが3秒となってます。
今回テストした際には約30秒程度かかっているので、タイムアウト値も伸ばしました。

そして実際にアップロードしたコードは下記になります。
リファレンスでは例外エラーが発生した時の設定なども記載されておりますが、今回は割愛しました。
とりあえず要件は満たしているのでよしとしておきます。

スケジュール

上記作成したLambda関数のスケジューリングを行います。
作成した関数から[トリガーを追加]を選択します。

トリガータイプを[CloudWatch Events]にし[新規ルールの作成]を選択します。
ルール名、ルールの説明を適宜入力し、ルールタイプでスケジュール式にチェックを入れます。
スケジュールの書き方はこちらを参考にしました。

まとめ

今回は最低限の要件を満たす形で作成しましたが、溜まったログの削除や
エラー時の設定など、機能追加はまだまだ必要だと思います。
今後もブラッシュアップしていき、AWSのサービスをより有効に活用していきたいですね。

Return Top