はじめに
比較的最近実装された(2017年12月 re:Invent2017にて発表された機能)Lambda新機能を利用し、よく利用されるパターンである定期実行Lambdaにて、同時実行数設定を行い本当に多重起動防止が行えるか確かめてみました。
目次
概要
定期実行Lambda(CloudWatch Events)にて起動されるLambdaの同時実行数を1とする事で、多重起動防止を行えるか試してみました。
結論
稀なケースとは思いますが、多重起動が起きてしまう事を確認しました。(下記ログを参照)
事象
time.sleep(300) としたLambdaを1分毎に定期実行
特に問題なくクリアしました。
(このため、実際のデータ処理をこの方式で実装しましたが...)
データ処理を行なっているLambdaを1分毎に定期実行
データが多い場合 1分内では処理が完了しないが、処理が終わった後に起動してくれている ================================================== 06:24:46 Starting 2521 06:28:08 Ending 2521 REPORT RequestId: 79951b93-XXXX Duration: 202186.40 ms Billed Duration: 202200 ms Memory Size: 256 MB Max Memory Used: 66 MB ================================================== 06:28:14 Starting 7682 06:31:39 Ending 7682 REPORT RequestId: e4df62f0-XXXX Duration: 205384.78 ms Billed Duration: 205400 ms Memory Size: 256 MB Max Memory Used: 71 MB ↓こちらが時間重複ありの部分 ================================================== 06:31:41 Starting 1902 06:35:32 Ending 1902 REPORT RequestId: 2c3c6e11-XXXX Duration: 231481.03 ms Billed Duration: 231500 ms Memory Size: 256 MB Max Memory Used: 64 MB ================================================== 06:34:47 Starting 5117 06:38:15 Ending 5117 REPORT RequestId: df33b496-XXXX Duration: 208681.47 ms Billed Duration: 208700 ms Memory Size: 256 MB Max Memory Used: 67 MB ================================================== ↑こちらが時間重複ありの部分 以降は処理データが少なくなり実行時間が短縮 こちらも処理が終わった後に起動してくれている ================================================== 06:38:17 Starting 189 06:41:48 Ending 189 REPORT RequestId: 4a8d8c9f-XXXX Duration: 211292.77 ms Billed Duration: 211300 ms Memory Size: 256 MB Max Memory Used: 70 MB ================================================== 06:41:53 Starting 5963 06:42:45 Ending 5963 REPORT RequestId: b5efeed5-XXXX Duration: 52585.06 ms Billed Duration: 52600 ms Memory Size: 256 MB Max Memory Used: 62 MB ================================================== 06:42:45 Starting 9470 06:42:52 Ending 9470 REPORT RequestId: d994ff2c-XXXX Duration: 6198.75 ms Billed Duration: 6200 ms Memory Size: 256 MB Max Memory Used: 70 MB ================================================== 06:42:53 Starting 2264 06:42:59 Ending 2264 REPORT RequestId: fd5f7060-XXXX Duration: 6470.71 ms Billed Duration: 6500 ms Memory Size: 256 MB Max Memory Used: 45 MB
結論
AWSサポートに問い合わせた所、ざっくりと下記のような回答をいただきました。
CloudWatch Event からの並列起動を防ぐことは可能だが、期待する「適切な制限」になるかどうかは、関数の実装やユースケースに依存するので、検証等を実施してからお使いください。
このため、同時実行数設定はあくまでも目安として考えることにしました。
既に冪等性が担保されており、複数回実行されても問題ないがアカウント全体の実行数上限数食いつぶし防止等の目的で利用すべきと学習しました。