投稿日:
2019年1月21日
最終更新日:
【サーバーレスアーキテクチャ】AWS lambdaとCloudWatch Eventsを組み合わせてCron処理でLambda関数をスケジューリング処理する方法【バッチ/自動化】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
Lambda関数を定期実行しよう
サーバーレスを実現出来るLambda関数
先日まで、AWS Lambdaに関する記事をご紹介しました。
Lambda関数を使えば、サーバーを用意せずにAWSサービスをトリガーに処理を実装出来るので今注目されている技術です。
Cronによる定期実行も可能
そして、もう一つの強みが何と言ってもCron指定により定期実行をスケジューリング出来ることです!
これを知った時、サーバーを用意せずに実現出来ることが素晴らしすぎて感動しました。
また、設定自体もとても簡単に行うことが出来たので、今回は手順をご紹介致します。
手順
前提
サンプルとしては以下の記事で作成したLambda関数を利用します。
しかし、定期実行の場合はeventを取得出来ない為、CloudWatch Logsに以下のようなエラーログが出てしまいます。
1
2
3
4
5
6
7
8
9
|
START RequestId: 043f221c-84c9-452a-a8a5-4c6a7c4d1171 Version: $LATEST
'url': KeyError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 4, in lambda_handler
response = requests.get(event['url'])
KeyError: 'url'
END RequestId: 043f221c-84c9-452a-a8a5-4c6a7c4d1171
REPORT RequestId: 043f221c-84c9-452a-a8a5-4c6a7c4d1171 Duration: 1.51 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 32 MB
|
ですので、lambda_function.py
を以下のように修正しておきましょう。
1
2
3
4
5
|
import requests
def lambda_handler(event, context):
response = requests.get('https://blogenist.jp')
return 'Status : %d' % response.status_code
|
トリガーの作成
まずはLambda関数の設定画面を開き、設定タブを選択した状態でDesignerのCloudWatch Eventsを選択します。
すると、下部エリアがトリガーの設定画面になるので新規のルール作成を選択し、ルール名・ルールの説明を入力したら、ルールタイプをスケジュール式にチェックを入れ、スケジュール式にcron形式を入寮します。
今回は試しに1分ごとに起動したいのでcron(0/1 * * * ? *)
と入力しましょう。
そして、トリガーの有効化にチェックを入れたら追加ボタンをクリックしましょう。
CloudWatch Eventsがセットされていることを確認して保存ボタンをクリックします。
正常に保存されたらスケジュールに則ってLambda関数が実行されるはずです。
確認
では、CloudWatch Logsを覗いてみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
10:24:16
START RequestId: fb9f45e6-19e9-43a4-98bd-60dc4a6bacd6 Version: $LATEST
START RequestId: fb9f45e6-19e9-43a4-98bd-60dc4a6bacd6 Version: $LATEST
10:24:16
END RequestId: fb9f45e6-19e9-43a4-98bd-60dc4a6bacd6
END RequestId: fb9f45e6-19e9-43a4-98bd-60dc4a6bacd6
10:24:16
REPORT RequestId: fb9f45e6-19e9-43a4-98bd-60dc4a6bacd6 Duration: 257.63 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 32 MB
REPORT RequestId: fb9f45e6-19e9-43a4-98bd-60dc4a6bacd6 Duration: 257.63 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 32 MB
10:25:16
START RequestId: f7a91c50-8ea0-4780-ab21-ca398443de1c Version: $LATEST
START RequestId: f7a91c50-8ea0-4780-ab21-ca398443de1c Version: $LATEST
10:25:17
END RequestId: f7a91c50-8ea0-4780-ab21-ca398443de1c
END RequestId: f7a91c50-8ea0-4780-ab21-ca398443de1c
10:25:17
REPORT RequestId: f7a91c50-8ea0-4780-ab21-ca398443de1c Duration: 272.58 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 32 MB
REPORT RequestId: f7a91c50-8ea0-4780-ab21-ca398443de1c Duration: 272.58 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 32 MB
|
正しく1分ごとに実行されていますね♪
終わりに
以上のようにサーバーレスで定期実行処理を実装することが出来ました。
この機能を組み合わせて使うことで、バッチ処理なども行う事が出来るので興味のある方は試してみてください♪