Lambda を使ってみた①
仕事で Lambda を触る機会があったので、どのような仕組みで Lambda が動いているのか、基本的なことを解説していきたいと思います。
マネージドサービスって使うの難しそうだな、という印象を私は持っていましたが、決してそんなことはありません。
実は使ってみると、Lambda は意外と使いやすく感じています。
Lambda の利用シーン
Lambda は以下のような使い方をすることが多いと思います。
何かのトリガーを契機にプログラムで処理をしたい場合に Lambda を利用します。
ここでいう何かのトリガーとは、スケジュールでもいいですし、APIコールでもいいですし、何かのAWSサービスが備えているイベント発生でも構いません。
具体性がないと理解できませんので、今回は CloudWatch Logs のトリガーを参考に見ていきたいと思います。
CloudWatch Logs から送信されてくる Event の中身を紐解く
CloudWatch Logs のイベントは公式ページに記載されています。
はい。暗号化されています。デコードすると、こんな感じのJSONデータであることが分かります。
見て分かる通り、ロググループ、ログストリーム、ログイベントID、タイムスタンプ、メッセージといった情報が記載されています。
受け取った Event は Lambda でそうやって処理してるの?
では、CloudWatch Logs から受け取った Event を Lambda ではどうやって処理しているのでしょうか。
今回は、Python を使って説明します。
handler / event / context
プログラム言語を扱える方は理解しやすいと思いますが、Lambda は Event を二つの object で受け取ります。それが、event と context です。
event の中身が上記で触れたデータそのものです。context の中身は Lambda の持つメタデータになります。
詳しくは公式ページを参照ください。
そして、handler とは関数の名称です。本当は何でも OK です。
この形で event と context を受け取って、処理を記述していきます。
今回の CloudWatch Logs から送信される Event がどんなものか見たいときは、Lambda の関数定義の画面にて、こう記述して『テスト』を実行してみてください。
以下のような結果が得られます。
最後は Lambda の中のプログラムで煮るやり焼くなり
JSON形式でデータを取得できることが分かれば、あとは好きなように Python で処理させることが出来ます。
S3 など他の AWS のサービスに CloudWatch Logs のデータを転送するのであれば、boto3 というライブラリが便利です。
注意するポイント
Lambda 実行時、設定されたロールを使用してプログラムを実行します。
環境変数で API ACCESS KEY や API SECRET KEY を定義することも出来ますが、AWS のベストプラクティスに従うのであれば、Lambda 専用ロールを作成しておくことをお勧めします。