□S3,SQSを利用中。アップロードされた画像ごとに電子メールを1通送信。複数メールが飛んでいることを発見。対策方法は?

SQSキューの可視性タイムアウトを大きくする。

・SQSキューの可視性タイムアウトを、Lambda関数のタイムアウトとバッチウィンドウタイムアウトの合計よりも大きい値に増やします

この選択肢が正解の理由は以下の通りです。

まず、SQSの可視性タイムアウトは、メッセージがキューから取得されてから再び他のコンシューマーがそれを見るまでの時間を制御します。メッセージの可視性タイムアウトが短すぎると、一つのLambda関数がメッセージをまだ処理している間に、同じメッセージが他のLambda関数によって処理される可能性があり、これが重複メールの発生を引き起こします。

そのため、可視性タイムアウトをLambda関数のタイムアウトとバッチウィンドウタイムアウトの合計よりも大きい値に設定することで、メッセージが処理中のLambda関数によって完全に処理されるまで、他のLambda関数がそのメッセージを見ないようにすることができます。これにより、重複メールの問題が解決します。

さらに、これならば新たにAWSリソースを追加したり、大きなアーキテクチャの変更が不要となり、運用上のオーバーヘッドを最小限に抑えることができます。

選択肢:SQS標準キューをSQS FIFOキューに変更します。重複メッセージを破棄するためにメッセージ重複排除IDを使用します

この選択肢が正しくない理由は以下の通りです。

SQS FIFOキューに変更するとメッセージの順序が保証されるだけで、メッセージが複数回Lambda関数を呼び出す問題が解決するわけではありません。

また、重複排除IDは送信された各メッセージに一意な識別子を提供するものであり、過剰なメッセージ呼び出しを防ぐものではないため、正解の選択肢であるSQSキューの可視性タイムアウトを適切に調整するアプローチに比べて問題の解決に適していません。

コメント

タイトルとURLをコピーしました