Amazon SQS の請求額が予想よりも高くなるのはなぜですか?

所要時間1分
0

Amazon Simple Queue Service (Amazon SQS) の料金が、自分の使用状況から予想していた金額よりも高額になりました。

  • または - Amazon SQS 無料利用枠の上限に達していますが、請求期間中に送信したメッセージは数件に過ぎません。 Amazon SQS の料金をよりよく理解するにはどうしたらよいですか? また、Amazon SQS のコストを削減する方法を教えてください。

簡単な説明

SQS リクエスト数が多くなる最も一般的な原因は、空の受信です。これは、メッセージを返さない ReceiveMessage リクエストとして請求されます。Amazon SQS の料金は、リクエストのボリュームと Amazon SQS との間で転送されるデータに基づいています。SQS キューをポーリングするコンシューマーは、空の受信が継続的に発生します。このような空の受信は、SQS キューからメッセージが送受信されない場合でも、Amazon SQS の料金に応じて課金されます。

解決方法

NumberOfEmptyReceives CloudWatch メトリクスを確認する

空の受信が高額の Amazon SQS 料金の一因になっているかどうかを判断するには、SQS キューの Amazon CloudWatch NumberOfEmptyReceives メトリクスを確認します。何も受信しない回数が多い場合は、コンシューマーが多数の ReceiveMessage リクエストを行っていることを示します。

SQS キューが Lambda 関数を呼び出すように設定されているかどうかを確認する

SQS キューが AWS Lambda 関数を呼び出すように設定されている場合、Lambda はキューをロングポーリングします。つまり、SQS キューを使用していなくても、Lambda 関数の呼び出しによって空の受信と関連する料金が発生します。

Amazon SQS のコストを削減するためのベストプラクティス

Amazon SQS のコストを最小限に抑えるには、次のベストプラクティスに従ってください。

不要なキューを削除する

非アクティブキューに対する ReceiveMessage リクエストを防止するには、SQS キューが不要になったときに削除することを検討してください。

コンシューマーをスケールダウンする

水平スケーリングは、ボリューム要件の増加に応じてメッセージプロデューサーとコンシューマーの両方の数を増やすことで、Amazon SQS キューのスループットを最大化するために使用されます。同様に、メッセージレートが低下した場合は、不要な ReceiveMessage リクエストが行われるのを防ぐためにコンシューマーをスケールダウンしてください。

ロングポーリング

Amazon SQS のロングポーリングは、コストと空の受信の両方を削減するのに役立ちます。ReceiveMessage の待機時間を最大値の 20 に設定して、ロングポーリングをアクティブ化することができます。次のいずれかの方法を使用して、待機時間を指定できます。

  • キューレベルではReceiveMessageWaitTimeSeconds キュー属性を設定できます。
  • メッセージレベルでは、ReceiveMessageWaitTime パラメータを使用して ReceiveMessage API 呼び出しを送信できます。
    : ReceiveMessage API でメッセージレベルで ReceiveMessageWaitTime パラメータを設定すると、キューレベルで設定されたパラメータ値が上書きされます。Amazon SQS を使用して呼び出される Lambda 関数の場合、Lambda はロングポーリングを使用してキューをポーリングします。

バッチ操作

Amazon SQS の料金は、リクエスト数に基づいています。メッセージアクションをバッチ処理することで、リクエスト数を減らし、コストを削減できます。例えば、SendMessage API を 10 回呼び出す代わりに、10 件のメッセージを送信するように 1 つの SendMessageBatch オペレーションを設定できます。他に利用できるバッチ操作アクションには、DeleteMessageBatchChangeMessageVisibilityBatch などがあります。


関連情報

Amazon SQS のコストの削減

AWS公式
AWS公式更新しました 3年前