ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
スポンサーリンク
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分ごとに実行されていますね♪
終わりに
以上のようにサーバーレスで定期実行処理を実装することが出来ました。
この機能を組み合わせて使うことで、バッチ処理なども行う事が出来るので興味のある方は試してみてください♪