Lambda関数の実行アクティビティをAmazon Elasticsearch Serviceへ配信してみる – ClassmethodサーバーレスAdvent Calendar 2017 #serverless #adventcalendar #reinvent
どうも!大阪オフィスの西村祐二です。
このエントリはServerless Advent Calendar 2017の18日目の記事となります。
今回はLambda関数の実行アクティビティをElasticsearch Serviceへ配信してみたいと思います。 なるべく簡単に済ますために、AWS CloudTrailを中継する形をとります。
AWS CloudTrailでLambda関数の実行ログが取れるようになったので、これを利用したいと思います。
早速やっていきましょう。
Lambda関数を作成
マネージメントコンソールのLambdaから関数を作成します。
設計図から「hello-world-python3」を選択し作成します。
今回、名前は「test-cloudtrail」としています。
CloudTrailを設定
下記ブログを参考にLambda関数の実行アクティビティを取得します。
【速報】AWS CloudTrailでLambda Functionの実行ログが取れるようになりました #reinvent
マネージメントコンソールのCloudTrailからLambda関数の実行アクティビティを取得する設定を行います。
「証跡の作成」をクリックします。
今回は証跡名を「test-lambda」としておきます。 Lambdaのタブをクリックし、実行アクティビティを取得したい関数を選択します。 先程作成した、「test-cloudtrail」にチェックをつけます。
今回、保存するS3のバケットは新しく作成します。 バケット名は「cloudtrail-lambda」として作成します。
証跡が作成されたか確認します。
証跡が作成できたら、対象のLambdaの実行アクティビティが取得できるので、 取得したログをCloudWatch Logsに転送します。
証跡情報から作成した「test-lambda」をクリックします。
下の方に、CloudWatch Logsに転送する設定があります。
デフォルトのまま設定していきます。 ロググループは「CloudTrail/DefaultLogGroup」となっています。
対象のLambdaを実行してみて、きちんとCloudWatch Logsに転送されているか確認します。 ロググループは「CloudTrail/DefaultLogGroup」で、 フィルターを「Invoke」とすると、実行アクティビティのログを確認することができます。
Amazon Elasticsearch Serviceの設定
マネージメントコンソールから作成していきます。
Elasticsearchのドメイン名は、今回「test-es」として作成します。
インスタンスタイプは「t2.small.elasticsearch」としています。
ストレージの設定はデフォルトのままです。
アクセスの設定は パブリックアクセスとして、アクセスポリシーを特定のIPのみ許可するように設定しています。
作成が完了したら、次はCloudWatch Logsの設定です。
CloudWatch Logsでサブスクリプションの設定
CloudWatch LogsをElasticsearch Serviceに転送するために、サブスクリプションを設定します。
Amazon ES クラスターに作成した「test-es」を指定します。 Amazon Elasticsearch Serviceに転送するために、「LogsToElasticsearch」というLambda関数が作成されます。
そのLambdaに設定するロールを指定し、「次へ」をクリックします。
ログの形式を「AWS CloudTrail」、 フィルターパターンを「Invoke」として「次へ」クリックします。
「Kibana4」をクリックし、アクセスできるか確認した後に、「ストリーミングの開始」をクリックします。
Kibanaでログ確認
とりあえず下記のようにインデックスパターンを設定しておきます。 実際に利用する場合、きちんと設定をしておきましょう。
「Discover」へいき、eventNameでフィルターをかけます。
Lambdaの実行アクティビティログが確認できます。
確認したいログをクリックすると実行されたLambdaのさまざまな情報が確認できます。 あとは、各々で自由にグラフ化することができます。
さいごに
ノンプログラミングで簡単にLambdaの実行ログをAmazon Elasticsearch Serviceへ配信することができました。
CloudTrailを経由することで、ログの形式や、フィルターパターンを考える手間を省くことができました。 また、Kibanaで可視化もできるので、Lambdaの監視に活用できそうですね。
誰かの参考になれば幸いです。