Amazon SQS の料金が想定よりも高くなった理由を知りたいです。

所要時間1分
0

次の 2 通りのシナリオについて、質問があります。Amazon Simple Queue Service (Amazon SQS) の料金が、使用状況に応じて想定したものよりも高額になりました。または、請求期間中に送信したメッセージはごくわずかだったにもかかわらず、Amazon SQS 無料利用枠の上限に近づいています。Amazon SQS の料金を正しく理解する方法と、Amazon SQS のコストを削減する方法を教えてください。

簡単な説明

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

解決策

CloudWatch メトリクス NumberOfEmptyReceives をレビューする

空白の受信が 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 回呼び出す代わりに 1 回の SendMessageBatch 操作を設定すると、10 件のメッセージを送信することができます。他には、DeleteMessageBatchChangeMessageVisibilityBatch などのバッチ操作アクションを使用できます。


関連情報

Amazon SQS のコストを削減する