

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

# Lambda イベントフィルタリング実装のベストプラクティス
<a name="best-practices-event-filtering"></a>

以下は、[Amazon SQS イベントソース用 Lambda イベントフィルタリング](https://aws.amazon.com//about-aws/whats-new/2021/11/aws-lambda-event-filtering-amazon-sqs-dynamodb-kinesis-sources/)設定のベストプラクティスです。
+ [Lambda サービスのフィルタールール構文](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-syntax)、具体的には[Lambda が Amazon SQS に使用するフィルタールール構文](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-sqs)を十分に理解してください。次に、ビジネスロジックに従ってイベントフィルターを設計します。イベントフィルターの効果は、必要なときにのみ Lambda 関数を呼び出すことができるかどうかにかかっています。これを実現するには、フィルタールールに正しい構文を適用して、ルールにアプリケーションのビジネスロジックのニーズを反映させる必要があります。
+ アプリケーションのビジネスロジックがより複雑な一連のフィルター条件を必要とする場合は、必ずマルチレベルのフィルタリングを使用してください。詳細とデータオブジェクトの例については、「AWS Lambda デベロッパーガイド」の「[マルチレベルのフィルタリング](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#multi-level-filtering)」を参照してください。
+ Amazon SQS が未処理のメッセージを保持する期間を制限するには、Amazon SQS リクエストパラメータ内の **MessageRetentionPeriod** 値を定義します。有効なメッセージが処理されるまでに通常かかる時間を特定して、定義する値がアプリケーションのユースケースにフィットすることを確認してください。詳細については、「Amazon SQS API リファレンス」の「[SetQueueAttributes](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)」を参照してください。このガイドの「[Avoiding non-matching message accumulation](#avoiding-non-matching-message-accumulation)」のセクションも参照してください。
+ Lambda 関数を使用できないために有効なメッセージを処理できない可能性がある場合は、Amazon SQS デッドレターキューを設定します。この追加の Amazon SQS キューは、サーバーレスアプリケーションのアーキテクチャにスノーボールアンチパターンが発生するのを防ぎます。詳細については、このガイドの「[Avoiding snowball anti-patterns](best-practices-partial-batch-responses.md#snowball-anti-patterns)」のセクションを参照してください。
+ Lambda サービスのイベントフィルター機能を必ず有効にしてください。この機能は、Lambda 関数を最初に作成するときに有効にする必要があります。手順については、「AWS Lambda デベロッパーガイド」の「[イベントソースマッピングへのフィルター条件のアタッチ (コンソール)](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-console)」または「[イベントソースマッピングへのフィルター条件のアタッチ (AWS CLI)](https://docs.aws.amazon.com//lambda/latest/dg/invocation-eventfiltering.html#filtering-cli)」を参照してください。

## 一致しないメッセージの蓄積を回避する
<a name="avoiding-non-matching-message-accumulation"></a>

イベントフィルターが適切に設計されていないと、無関係な大量のメッセージにより、Lambda 関数の Amazon SQS キューがすぐに使い果たされてしまいます。このシナリオでは、関連するメッセージがほとんどない場合でも、Lambda 関数が最初のメッセージバッチ内のすべてのメッセージを処理します。関数は追加の無関係なメッセージの処理に時間がかかるため、無関係なメッセージは Amazon SQS キューに追加されます。これらの新しいメッセージが原因となり、次のメッセージバッチの処理にはさらに時間がかかります。ただし、**MessageRetentionPeriod** パラメーターが設定されている場合を除きます。。経時的に、ソースキュー内の無関係なメッセージの数は有効なメッセージの数を上回ります。

**MessageRetentionPeriod** パラメーターは、Amazon SQS キューが未処理のメッセージを保持する期間を秒単位で制限します。例えば、**MessageRetentionPeriod** の値を 3,600 秒に設定すると、1 時間後に未処理のメッセージがすべてキューから削除されます。

手順については、「Amazon SQS API リファレンス」の「[SetQueueAttributes](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)」を参照してください。