

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS の FIFO キューと Lambda の同時実行動作
<a name="fifo-queue-lambda-behavior"></a>

FIFO (先入れ先出し) キューを Lambda で使用すると、各メッセージグループ内のメッセージを順序どおりに処理できます。Lambda 関数は、同じメッセージグループに対して複数のインスタンスを同時に実行しないため、順序が維持されます。ただし、複数のメッセージグループを並列処理するようにスケールアップできるため、キューのワークロードを効率的に処理できます。メッセージグループ ID に関して Amazon SQS の FIFO キューのメッセージを Lambda 関数が処理する動作のポイントを以下に示します。
+ **メッセージグループごとに 1 つのインスタンス:** どの時点においても、特定のメッセージグループ ID のメッセージを処理しているのは 1 つの Lambda インスタンスのみです。これにより、同じグループ内のメッセージは順番に処理され、FIFO シーケンスの整合性が維持されます。
+ **複数の異なるグループの同時処理:** Lambda は、複数のインスタンスを使用して、複数の異なるメッセージグループ ID のメッセージを同時に処理できます。つまり、Lambda の同時実行機能を活用すると、複数のグループを並列処理できるため、Lambda 関数の 1 つのインスタンスで 1 つのメッセージグループ ID のメッセージを処理するとともに、他のインスタンスで他のメッセージグループ ID のメッセージを同時に処理できます。

## FIFO キューのメッセージのグループ化
<a name="fifo-queue-message-grouping"></a>

FIFO キューでは、メッセージを送信順どおりに処理します。**メッセージグループ ID** を使用して、順次処理する必要があるメッセージをグループ化します。

同じメッセージグループ内のメッセージは順番に処理されます。この順序を維持するために、各グループのメッセージは一度に 1 つだけ処理されます。

## FIFO キューでの Lambda の同時実行
<a name="lambda-concurrency-fifo-queues"></a>

キューを作成したら、そのキューにメッセージを送信できます。

Amazon SQS の FIFO キューのメッセージを処理するように Lambda 関数を設定すると、Lambda は FIFO キューの順序付けに厳密に従って処理します。メッセージグループ ID を使用して Amazon SQS の FIFO キューのメッセージを処理する際の Lambda 関数の同時実行とスケーリングに関する動作のポイントを以下に示します。
+ **メッセージグループ内の同時実行:** Lambda の 1 つのインスタンスのみが、特定のメッセージグループ ID のメッセージを一度に 1 つ処理します。これにより、グループ内のメッセージが順番に処理されます。
+ **スケーリングと複数のメッセージグループ:** Lambda はメッセージグループが異なる場合に限り、複数のメッセージを同時に処理するようにスケールアップできます。複数のメッセージグループがある場合、Lambda は複数のグループを並列して処理できます。グループごとに別個の Lambda インスタンスで処理します。

詳細については、「*AWS Lambda デベロッパーガイド*」の「Lambda のスケーリングと同時実行」を参照してください。

## ユースケースの例
<a name="lambda-concurrency-fifo-queues-example"></a>

FIFO キューが同じメッセージグループ ID のメッセージを受信し、Lambda 関数の同時実行の制限が高い (最大 1,000) とします。

グループ ID「A」の 1 つのメッセージを処理中に、グループ ID「A」から別のメッセージが到着した場合、最初のメッセージが完全に処理されるまで、2 番目のメッセージは新しい Lambda インスタンスをトリガーしません。

ただし、グループ ID「A」とグループ ID「B」からメッセージが到着した場合、両方のメッセージは別々の Lambda インスタンスで同時に処理できます。