sano11o1

レート制限のあるAPIと疎通するLambda関数の同時実行数の決め方

公開日:

大抵のAPIにはレート制限が設けられており、レート制限を超えるリクエストは無効扱いになります。
例えばLINE Messaging APIの「WebhookエンドポイントのURLを設定するAPI」には以下のようなレート制限があります。
レート制限

WebhookエンドポイントのURLを設定する 1,000リクエスト/分



外部サービスのAPIを叩く処理をLambda関数に委譲する実装パターンを考えます。
Lambda関数は同時実行数を設定できます。同時実行数とは1秒間にLambda関数を最大でいくつ起動するかを決める値です。
必要な同時実行数の制限を計算する

リージョンのデフォルトの同時実行数は 1,000 インスタンスとなっています。


外部サービスのAPIを叩くLambda関数の同時実行数に大きな値を設定するとレート制限を超えてしまうかもしれません。
できるだけ多くのLambda関数を起動し処理を速く終わらせつつ、レートリミットを超えない値を設定する時の考え方を説明します。

1秒間に2000リクエストまでを許容する外部のAPIを例に考えます。

まずLambda関数の実行にかかる時間と外部のAPIを叩く処理にかかる時間を計測し比較します。※ Lambda関数内の処理が外部のAPIを叩くだけの場合、片方の数値で十分です。
両者の値がほぼ変わらない場合、Lambda関数の実行にかかる時間 = 外部APIを叩くときにかかる時間 と考えて問題ないでしょう。
今回の例では、Lambda関数内の処理が外部のAPIを叩くだけで、外部のAPIを叩く処理にかかる時間は0.1sとします。

次に同時実行数が1の場合、同じ関数インスタンスが1秒間に何度呼びされるかを考えます。
1回の呼び出しにかかる時間は0.1秒なので、最大で10回の呼び出しが想定されます。
緑の正方形: 外部APIのリクエスト
緑の正方形: 外部APIの1リクエスト, 1S: 1秒間, L1: 1Lambda関数 を表します。

最後に同時実行数を決めます。
同時実行数が1の場合1秒間に10回の呼び出しが実行されます。1秒間に2000リクエストまでなので、同時実行数は193くらいが妥当でしょう。Lambda関数は1秒間に最大で合計1930回呼び出されます。


AWSのデフォルトの設定をそのまま使うのではなく、適切な値を設定することで安全に運用していきたいですね。