web-dev-qa-db-ja.com

AWS Lambda SQSトリガースロットル/制限

いくつかの処理作業を行うためにキューに追加されるすべてのアイテムに対してLambda関数を実行するためにLambda関数トリガーでセットアップするAWS SQSキューがあります。

処理の1つのステップは、APIエンドポイントにアクセスして、キューに追加されたすべてのアイテムのデータを取得し、それをDynamoDBテーブルに格納します。コストを管理し、このプロセスの制御を維持するために、このLambda関数が特定の期間に呼び出される回数を抑制したいと思います。

たとえば、DynamoDBテーブルの容量やAPIエンドポイントを圧迫しないように、この関数を1日あたり最大100回実行する必要があります。また、一度に最大5つの同時アクションが実行され、再度実行されるまでに1秒の遅延が生じるように、スロットルを調整することもできます。このタイプの制御により、機能をDynamoDBテーブル制限に直接マップして、容量を超えないようにし、APIレート制限に準拠することができます。

私は AWS Lambda Managing Concurrency を調べました。具体的には、「関数レベルの同時実行制限」セクション。しかし、このセクションでは、1日あたり100回の制限や、次の関数の実行間の1秒の遅延については触れていません。

また、一度に(または1日あたり)キューに入れるアイテムの数を制限することで、反対側でそれを制限できることも知っています。しかし、私がこのシステムをどのように計画しているかのせいで、それは私が避けたいと思う多くの複雑さを追加するでしょう。

AWS SQSとLambdaを使用してこれを達成し、これらのLambda関数を制限する方法はありますか?

11
Charlie Fish

SQSをイベントソースとして使用する場合のLambda呼び出しの数を1日あたり100に制限する方法はないと思います。

別の方法は、スケジュールされたイベントがLambdaをトリガーすることで、SQSキューをポーリングします。これにより、SQSからDynamoDBに送信されるデータ間のラグが増加する可能性がありますが、DynamoDBへの書き込みの数と速度をより詳細に制御できます。

100カウントを管理するには、毎日の書き込みカウント状態を外部で保持するか(S3など)、100をスケジュールされた呼び出しの数で除算します(例: Lambdaの10回の呼び出し。10回のメッセージの処理後に停止します。どちらの方法でも、Lambdaがメッセージの処理の途中でタイムアウトしないようにする必要があります。

Lambdaの1回の呼び出しでDynamoDBに複数の書き込みが行われるため、1秒あたりの書き込み数を管理したり、再試行を組み込んだりできます。

3
K Mo