今回は、AWSの重要サービスでありながら、ちょっと理解がしにくいSQSについてまとめます。
この記事を見れば、SQSの概要・主要機能を理解して、日々の業務に活かしたり、AWS認定資格の対策になります。
また、SQSを含めたAWSのサービスを、ハンズオン形式で学ぶなら動画で学べるUdemy の講座がぴったりです。
\ AWS学習の決定版!30日以内なら返品もOK! /
AWSのおすすめ書籍については、以下にまとめております。
文量が多いので、目次から知りたい情報だけ、読んで下さい。
SQSはなぜ必要なのか?
SQS(Amazon Simple Queue Service)は、柔軟性の高いアプリケーションを作るために使うサービスです。
なぜ、アプリケーションに柔軟性が必要かと言うと、サービスの変更がしやすいからです。
SQSの概要
SQSの概要を一言でいうと、以下となります。
ほぼ無制限のスケーラビリティを備えたフルマネージドな分散メッセージキュー
小さなアプリケーション同士を繋げる、マイクロサービス・アーキテクチャが流行っていますが、SQSは上記の特徴と相まって、「マイクロサービス・アーキテクチャと凄く相性が良い」です。
マイクロサービス・アーキテクチャとは?
SQSの概要図は以下の通りです。
SQSはPull型のサービス
SQSはPull型のサービスです。上記のSQS概要図の受信側からキューに対して伸びている矢印に着目して下さい。
メッセージの送信者(Producer)がメッセージをSQSに対して発行したら、SQSのキューにメッセージが貯まります。
貯まったメッセージは受信側(Consumer)がキューに問い合わせを行うと、キューからメッセージが配信されて、受信側はメッセージを取得することが出来ます。
SQSは非同期処理を実現する
送信側のメッセージ送信と受信側のメッセージ取得は非同期で処理されます。
そのため、受信側が好きなタイミングでキューにあるメッセージを取得することが可能です。
SQSのキューは自動的にスケールアップされる
送信側、受信側の数が増えて、メッセージが増加したら、SQSはマネジメントサービスのため、キューは自動的にスケールアップします。
この仕組みによって、高スループットの処理を実現しています。
キュータイプ
SQSのキューは2種類あります。
- スタンダードキュー
- FIFOキュー
マネジメントコンソールでSQSを作成しようとすると、キューのタイプとして「標準」と「FIFO」が選択出来ることが分かります。
これは一体何なんでしょうか?では、一個ずつ詳しく見ていきましょう。
スタンダードキューとは何か?
マネジメントコンソールのキュータイプで、「標準」を選択すると、スタンダードキューになります。
スタンダードキューは「少なくとも1回は配信される」ことが仕様として決まっています。
これは受信側のリクエストのタイミングによっては、メッセージが重複して送信されることがあるということを意味します。
また、キュー内のメッセージ処理順は順不同であり、順番に処理されることは保証されていません。
そのため、処理の順番を識別出来るような情報をメッセージボディや属性情報に含める必要があります。
特徴をまとめると、以下のようになります。
- 少なくとも1回は配信なので、1回以上配信されることもある。
- キュー内のメッセージ処理順は順不同のため、順番が前後する可能性がある
FIFOキューとは何か?
マネジメントコンソールのキュータイプで、「FIFO」を選択すると、FIFOキューになります。
そのため、スタンダードキューでは処理順は順不同でしたが、FIFOキューでは順番が守られます。
またFIFOキューはスタンダードキューと異なり、1回だけ配信されることが仕様として決まっています。
ただし、FIFOキューはスタンダードキューに比べると、料金が高くなることには注意が必要です。
- キュー内のメッセージ処理順が順番通りになることが保証されている
- 1回だけ配信される
- スタンダードキューに比べると料金が高い
キュータイプの選択基準
キュータイプは途中で変更できません。しっかりと設計して、選択する必要があります。
まとめると以下になります。
- メッセージの重複・処理順が順不同を許容できるなら、スタンダードキュー
- 許容出来ない場合は、FIFOキュー。
可視性タイムアウトとは何か?
マネジメントコンソールでは、以下のように「可視性タイムアウト」という設定項目で、可視性タイムアウトを実行する時間を設定することが出来ます。
可視性タイムアウトとは、「メッセージが取得されてから、一定期間同じメッセージを他のシステムから取得出来ないようにブロックするようにする」という設定です。
図解すると、以下です。
仮に可視性タイムアウトを5分に設定した場合、ConsumerAがメッセージAを取得したら、5分間の間はその他のConsumerからメッセージが見えなくなります。
可視性タイムアウトの用途としては、二重処理の防止のため使用されます。
また設定値のデフォルト値は30秒であり、0秒から12時間の間で設定することが出来ます。
遅延キューとは何か?
マネジメントコンソールでは、以下のように「配信遅延」という設定項目で、遅延キューを実行する時間を設定できます。
遅延キューとは、「キューに新しいメッセージを送信した後に、指定した時間が経過してから受信側にメッセージが表示されるようにする」という設定です。
図解すると、以下です。
仮に遅延キューを5分に設定していた場合、Producerがキューにメッセージを送信してから、5分間の間はConsumerがメッセージを取得することが出来ません。
キュー全体に設定することも、メッセージタイマーを利用して個々のメッセージに設定することも可能です。
キューの取得方法
マネジメントコンソールでは、以下のように「メッセージ受信待機時間」という設定項目で、キューのポーリング間隔を設定できます。
ショートポーリングとは何か?
SQSでのデフォルトの設定であり、メッセージ受信待機時間を0秒にすると、ショートポーリングが適用されます。
ポーリング処理は、キュー内のメッセージ有無に関わらず、キューに対してメッセージの取得要求を送信します。
そのため、キューは空のレスポンスを返すこともあります。
メッセージの発生頻度によっては、メッセージ取得の際に空振りが多数発生しますが、空振りであっても、リクエストを行っていることになりますので、コストパフォーマンス効率が悪くなります。
AWSも下記で説明するロングポーリングを設定することを推奨しています。
ロングポーリングとは何か?
メッセージ取得までの待ち時間は設定を変更することで、変更することが出来ます。
メッセージ受信待機時間は、0秒〜20秒までの間で設定することが出来ます。
待ち時間を増やせば増やすほど、リクエスト回数を減らせるので、料金も安くなってきます。そのため、受信側のアプリケーションの要件によって適切なポーリング間隔を設定することでコスト最適化が図れることになります。
メッセージ保持期間とは何か?
マネジメントコンソールでは、「メッセージ保持期間」の設定を変更することで、キュー内に保持しておけるメッセージの保持期間を設定することが出来ます。
デフォルトは4日間までキュー内にあるメッセージは保存されます。
これは設定により、60秒〜14日間まで変更が可能です。
つまり、「ここで設定した保持期間がキュー内のメッセージを受け取って処理をするアプリケーションの限界ダウンタイム時間である」と言うことが出来ると思います。
アプリケーションが停止した場合、この期間内に復旧できれば、キューに貯まったメッセージを処理できます。
しかし、期間を過ぎてしまうとメッセージを処理することが出来なくなりますので注意が必要です。
最大メッセージサイズとは何か?
キューに格納出来る1メッセージあたりのサイズは最大256KBまでとなります。
ただし、このメッセージサイズについては容量を増やすことが可能です。
実現するためには、「Extended Client Library」を使用します。
SQSの暗号化方法
SQSは以下のように「サーバー側の暗号化」を有効にすると、暗号化をすることが出来ます。
暗号化では、「KMS(AWS Key Management Service)」を利用することが出来ます。
KMSは自前で用意することも出来ますし、SQSのデフォルトKMSを利用することも出来ます。
デットレターキューとは何か?
マネジメントコンソールでは、以下のようにデットレターキューオプションを有効にすると、デットレターキューを設定できます。
デットレターキューとは、「エラー処理に対して、何回かリトライを実施した後で自動的に別のキューにメッセージを移動する機能」です。
この機能によって、問題のあるメッセージを識別しやすくなり、問題があるメッセージがキュー内に残り続けることを防げます。
さいごに
ここまで、SQSの主要機能について解説しました。マネジメントコンソールの画面を掲載しながら記事を書いていきました。
しかし、実際にマネジメントコンソールを開いてこの記事を見てもらうことで、理解度はより高まると思います。
AWS公式のBlackBeltも合わせて見ると、理解度が深まります。
今後もこの記事で紹介出来なかったSQSの機能については随時追記をしていきたいと思っています。
また、SQSを含めたAWSのサービスを、ハンズオン形式で学ぶなら動画で学べるUdemy
\ AWS学習の決定版!30日以内なら返品もOK! /
AWSのおすすめ書籍については、以下にまとめております。
「どれか一冊おすすめは?」と聞かれたら、以下です
- 「全部分かる」のタイトル通り、解説しているサービスの網羅率が高い
- 図、イラスト、具体例が豊富。概念的な話だけでなく、具体的な処理例も豊富。
- 現在、AmazonのAWSカテゴリーでベストセラーになっている。
- 基礎編は初心者向けだが、それ以降は少し初心者には難しいかも。
コメント
コメント一覧 (1件)
[…] 関連記事 【AWS】SQSについて徹底解説〜5分で理解〜【初心者】 […]