【新機能】Amazon CloudWatch LogsのログデータをAWS Lambdaでリアルタイムに処理する

2015.10.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。今日はCloudWatch Logsのログをより扱いやすくするための新機能をご紹介します。

より手軽になりました

CloudWatch Logsのデータをリアルタイムに処理する方法は基本的には一緒で、フィルタパターンを作成し、CloudWatch Logsに適応させ、ログの中にフィルタパターンに一致する文字列がヒットしたら後続の処理を行う、というものです。 今までは

  • CloudWatchのアラーム
  • Amazon Kinesis

などを後ろにつけることができました。今日の新機能であらたにここにLambdaが利用できるようになりました!ログ処理でkinesisを持ち出すのはちょっと、という場合などに手軽に使えるLambdaは便利ですね。

やってみた

それでは早速やってみましょう。マネージメントコンソールからLambdaを開き、ファンクションの新規作成を選びます。

cloudwatchlogs_lambda

Blueprintの中にCloudWatchLogsと連携するサンプルがあるのでこちらを使います。 選択すると対象となるCloudWatch Logsのロググループとフィルタパターンを入力する画面が表示されます。

cloudwatchlogs_lambda2

今回はVPC FlowLogのデータから特定のEC2にアクセスされた時のデータをLambdaで拾ってみたいと思います。対象のEC2のIPをフィルタパターンにセットします。

cloudwatchlogs_lambda3

サンプルのコードを見てみると、CloudWatch Logsのデータをgunzipで展開してjsonをパースしているようですね。今回はこのまま使います。 他のAWSリソースは今回は使いませんのでRoleはBasicなものを新規に作ります。

cloudwatchlogs_lambda4

出来上がったのがこちらです。すぐに適用させる場合は[Enable Event Source]を[Enable now]に選択して下さい。

cloudwatchlogs_lambda5

それでは試してみます。対象となるEC2にSSHアクセスします。

ssh ec2-user@54.92.3.207 -i ~/dev/key/cm_
cm_experimentation.pem  cm_winkey
cm_us_east1.pem         cm_winkey_private.ppk
Tsuyoshis-iMac:~ Tsuyoshi$ ssh ec2-user@54.92.3.207 -i ~/dev/key/cm_experimentation.pem
Warning: Permanently added '54.92.3.207' (RSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
[ec2-user@ip-10-0-1-142 ~]$

CloudWatchのログを見てみて、Lambdaが反応したログが出力されていれば成功です。

cloudwatchlogs_lambda6

反応していますね。成功です。

まとめ

いかがでしたでしょうか。とても簡単に連携することができました。 ログの警告データを元にセキュリティグループを変更する等色々なアイデアでお使いになってみてください。

参考サイト