share facebook facebook2 twitter menu hatena pocket slack

2015.11.30 MON

"Scheduled Event"でLambda(Python)を実行してログをKibanaで分析

鈴木 宏康

WRITTEN BY鈴木 宏康

今年のre:Inventで下記のようなLambdaのアップデートがありました。

【AWS発表】AWS Lambdaのアップデート
 – Python, VPC, 実行時間の増加, スケジュールなど

ということで

  • Pythonファンクション
    • 文字通りLambdaのロジックをPythonで記述・実行する
  • スケジュールされたファンクション
    • Cronのように指定した時間にLambdaを実行する

を試してみました。

更に、Lambdaのログを下記で紹介したようにKibanaで分析できるようにも
してみました。(指定した時間での実行状況が確認できます)

CloudTrailのログをKibanaで確認する(CloudWatch → Lambda → Elasticsearch

絵にすると、こんな感じです。
Untitled(1) (8)

Lambdaの作成

まずはファンクションの作成です。
2015-10-08_14-08-06
blueprintと呼ばれるサンプルが用意されており、ちょうどlambda-canaryが
“Python & Cron”のサンプルだったので、今回は、こちらを利用しました。

2015-10-08_14-08-48
イベントソースの設定ではタイプを「Scheduled Event」としています。
また5分ごとに実行するようにスケジュールを設定しています。

2015-10-08_14-10-21
ラインタイムはPythonです。

2015-10-08_14-11-15

コードはこんな感じです。

from datetime import datetime
from urllib2 import urlopen

SITE = 'https://www.amazon.com/'  # URL of the site to check
EXPECTED = 'Online Shopping'  # String expected to be on the page


def validate(res):
    '''Return False to trigger the canary
        Currently this simply checks whether the EXPECTED string is
    present.
    However, you could modify this to perform any number of arbitrary
    checks on the contents of SITE.
    '''
    return EXPECTED in res


def lambda_handler(event, context):
    print('Checking {} at {}...'.format(SITE, event['time']))
    try:
        if not validate(urlopen(SITE).read()):
            raise Exception('Validation failed')
   except:
       print('Check failed!')
       raise
   else:
       print('Check passed!')
       return event['time']
   finally:
       print('Check complete at {}'.format(str(datetime.now())))

IAMの設定も忘れずに。
2015-10-08_14-11-46

2015-10-08_14-12-19

2015-10-08_14-12-46
今回は”Scheduled Event”が、すぐに適用(いきなり5分ごとに実行)されるようにしました。
2015-10-08_14-13-26
以上でLambdaの作成は終了です。

2015-10-08_14-14-26

CloudWatchの設定

Lambdaファンクションを作成すると”CloudWatch Logs”のロググループが
自動的に作成され、実際にログが出力されていることが確認できます。

2015-10-08_14-18-59

2015-10-08_14-19-53

2015-10-08_14-25-31

このログをES(Elasticsearch Service)にストリーミングします。
2015-10-08_15-12-33

あらかじめ”test”というドメインのESが作成済みで、それを指定しています。
IAMの設定もしています。

2015-10-08_15-13-14
2015-10-08_15-14-10
2015-10-08_15-14-38
フォーマットは、もちろん”AWS Lambda”です。
フィルターパターンは、すべてのログが該当するように空欄にしています。

2015-10-08_16-12-26

確認して完了すれば、ESへのストリーミングが始まります。
2015-10-08_15-15-46
2015-10-08_15-16-21

Kibanaの設定

まずはESの状態を確認します。
2015-10-08_15-19-27
2015-10-08_15-19-56
Kibanaの設定で、上記で確認した情報を設定します。
2015-10-08_15-26-04

Discoverのタブを開くと
2015-10-08_15-26-58

下記のように、ログが5分おきに出力されていることが確認できます。
2015-10-08_16-35-43

元記事はこちら

“Scheduled Event”でLambda(Python)を実行してログをKibanaで分析

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。