今年のre:Inventで下記のようなLambdaのアップデートがありました。
【AWS発表】AWS Lambdaのアップデート
– Python, VPC, 実行時間の増加, スケジュールなど
ということで
- Pythonファンクション
- 文字通りLambdaのロジックをPythonで記述・実行する
- スケジュールされたファンクション
- Cronのように指定した時間にLambdaを実行する
を試してみました。
更に、Lambdaのログを下記で紹介したようにKibanaで分析できるようにも
してみました。(指定した時間での実行状況が確認できます)
CloudTrailのログをKibanaで確認する(CloudWatch → Lambda → Elasticsearch
絵にすると、こんな感じです。
Lambdaの作成
まずはファンクションの作成です。
blueprintと呼ばれるサンプルが用意されており、ちょうどlambda-canaryが
“Python & Cron”のサンプルだったので、今回は、こちらを利用しました。
イベントソースの設定ではタイプを「Scheduled Event」としています。
また5分ごとに実行するようにスケジュールを設定しています。
ラインタイムはPythonです。
コードはこんな感じです。
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の設定も忘れずに。
今回は”Scheduled Event”が、すぐに適用(いきなり5分ごとに実行)されるようにしました。
以上でLambdaの作成は終了です。
CloudWatchの設定
Lambdaファンクションを作成すると”CloudWatch Logs”のロググループが
自動的に作成され、実際にログが出力されていることが確認できます。
このログをES(Elasticsearch Service)にストリーミングします。
あらかじめ”test”というドメインのESが作成済みで、それを指定しています。
IAMの設定もしています。
フォーマットは、もちろん”AWS Lambda”です。
フィルターパターンは、すべてのログが該当するように空欄にしています。
確認して完了すれば、ESへのストリーミングが始まります。
Kibanaの設定
まずはESの状態を確認します。
Kibanaの設定で、上記で確認した情報を設定します。
Discoverのタブを開くと
下記のように、ログが5分おきに出力されていることが確認できます。