web-dev-qa-db-ja.com

AWS Lambdaの同時呼び出しを制限できますか?

S3バケットへのPUTによってトリガーされるLambda関数があります。

このLambda関数を制限して、一度に1つのインスタンスのみを実行するようにします。2つのインスタンスを同時に実行することは望ましくありません。

Lambdaの設定とドキュメントを確認しましたが、明らかなものは見当たりません。独自のロックシステムを作成することもできますが、これが既に解決済みの問題である場合はいいでしょう。

ラムダの同時呼び出しの数を制限するにはどうすればよいですか?

40
alexwlchan

AWS Lambdaは、個々の関数の同時実行制限をサポートするようになりました: https://aws.Amazon.com/about-aws/whats-new/2017/11/set-concurrency-limits-on-individual-aws-lambda- functions /

enter image description here

48
Robert Chen

Kinesis Streams (またはDynamoDB + DynamoDB Streams、基本的に同じ動作をする)を使用することをお勧めします。

Kinesis Streamsqueueとして表示できます。良い点は、Kinesis StreamTriggerとしてLambda関数として使用できることです。したがって、このqueueに挿入されるものはすべて、順番に関数に自動的に渡されます。したがって、それらを処理できますS3 events one、by Lambda execution after other(一度に1つのインスタンス)。

そのためには、S3 Eventsを取得してKinesis Streamに入れるという単純な目的でLambda関数を作成する必要があります。 =。次に、Kinesis StreamLambda Triggerとして設定します。

Event Flow

Kinesis StreamLambda Triggerとして設定する場合、次の設定を使用することをお勧めします。

  • バッチサイズ:1
    • つまり、Lambdaは、Kinesisからonly one eventで呼び出されます。より大きな数を選択すると、そのサイズのイベントのリストが表示されます(たとえば、連続した10回のLambda実行ではなく、1回のLambda実行で最後の10個のイベントを処理する場合)。
  • 開始位置:トリムホライズン
    • これは、キューとして動作することを意味します([〜#〜] fifo [〜#〜]

AWS May Webinar Series-Amazon KinesisとAWS Lambdaを使用したスト​​リーミングデータ処理 の詳細情報。

これが同様の問題を抱えている人に役立つことを願っています。

追伸Kinesis Streamsには独自の 価格設定 があることに注意してください。 DynamoDB + DynamoDB Streamsを使用すると、より安価になる可能性があります(または、期限が切れないために無料になることもあります Free Tier DynamoDBの場合)。

17
dsaiztc

いいえ、これはLambdaのサポートを期待したいことの1つですが、現在のところそうではありません。問題の1つは、S3 PUT操作が多数発生した場合、AWSは何らかの形ですべてのLambda呼び出しをキューに入れる必要があり、現在はサポートされていないことです。

Lambda関数にロックメカニズムを組み込んだ場合、ロックのために処理しないリクエストをどうしますか?これらのS3通知を破棄しますか?

ほとんどの人が推奨する解決策は、S3から通知をSQSキューに送信し、Lambda関数を1分に1回など定期的に実行するようにスケジュールし、処理する必要のあるアイテムがキューにあるかどうかを確認することです。

あるいは、S3からSQSに通知を送信し、シングルスレッドサービスがキューをポーリングするt2.nano EC2インスタンスのみを持つようにします。

11
Mark B

(ラムダ関数を使用する代わりに)S3の「Putイベント」によってメッセージがキューに配置されるようにします。メッセージには、S3オブジェクトへの参照が含まれている必要があります。次に、ラムダを「キュー全体をポーリングする」ようにスケジュールします。

PS:S3イベントはKinesisストリームをトリガーできません... SQS、SMS、Lambdaのみ( http://docs.awsを参照) .Amazon.com/AmazonS3/latest/dev/NotificationHowTo.html#supported-notification-destinations )。 Kinesis Streamは高価であり、リアルタイムのイベント処理に使用されます。

1
William Choy