Lambdaの同時実行数設定にて多重起動防止を行えるか確かめてみました

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

比較的最近実装された(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 からの並列起動を防ぐことは可能だが、期待する「適切な制限」になるかどうかは、関数の実装やユースケースに依存するので、検証等を実施してからお使いください。

このため、同時実行数設定はあくまでも目安として考えることにしました。
既に冪等性が担保されており、複数回実行されても問題ないがアカウント全体の実行数上限数食いつぶし防止等の目的で利用すべきと学習しました。

投稿者プロフィール

takashi
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。
個人ブログではRaspberryPiを利用したシステムやロボット作成も
実施しております。

スカイアーチネットワークスで一緒に働きましょう!

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.

ABOUTこの記事をかいた人

開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。 個人ブログではRaspberryPiを利用したシステムやロボット作成も 実施しております。 スカイアーチネットワークスで一緒に働きましょう!