アクセスありがとうございます!次は「とあるエンジニアのエソラゴト」で検索して頂けると嬉しいです!

【AWS】SQSについて徹底解説〜5分で理解〜【初心者】

エソラ
エソラ

どうも、当ブログ(とあるエンジニアのエソラゴト)を運営している、エンジニアのエソラ(@ya6madev)です。
普段はSIer企業でDXとかAI開発をしながら、自社サービスの開発をしています。

初心者向けにSQSについて徹底解説

エソラ
エソラ

AWSを勉強しています。その内容をメモ書きとして、ここに残していきます。

チェックポイント

今回は、とても重要なAWSのサービスでありながら、ちょっと理解がしづらいSQSについてまとめていきます!

この記事を見れば、SQSの概要と主要機能について理解出来て、日々の業務に活かして頂いたり、AWS認定資格の対策にもなると思います!

エソラ
エソラ

文量が多くなってしまっているので、目次から知りたい情報だけ見てもらっても良いかと思います!

またAWS公式のBlackBeltは以下となりますので、合わせてみてもらえるとより理解度が深まると思います。

20190717 AWS Black Belt Online Seminar Amazon Simple Queue Service

SQSはなぜ必要なのか?

エソラ
エソラ

みなさん、柔軟性の高いアプリケーション作ってますか?

SQS(Amazon Simple Queue Service)は、柔軟性の高いアプリケーションを作るために使うサービスです。

なぜ、柔軟性が必要なの?

エンくん
エンくん
エソラ
エソラ

それは、柔軟性が高いと「サービスを変更しやすくなるから」です!

SQSの概要

SQSの概要を一言でいうと、以下となります。

SQSの概要

ほぼ無制限のスケーラビリティを備えたフルマネージドな分散メッセージキュー

エソラ
エソラ

小さなアプリケーション同士を繋げる、マイクロサービス・アーキテクチャが流行っていますが、SQSは上記の特徴と相まって、「マイクロサービス・アーキテクチャと凄く相性が良い」です。

SQSの概要図は以下の通りです。

SQS概要図

SQSはPull型のサービス

エソラ
エソラ

SQSはPull型のサービスです。
上記のSQS概要図の受信側からキューに対して伸びている矢印に着目して下さい。

メッセージの送信者(Producer)がメッセージをSQSに対して発行したら、SQSのキューにメッセージが貯まります。

貯まったメッセージは受信側(Consumer)がキューに問い合わせを行うと、キューからメッセージが配信されて、受信側はメッセージを取得することが出来ます。

エソラ
エソラ

このようにSQSは受信側がメッセージを取得しにいく「Pull型のサービス」であることも大きな特徴の一つです。

SQSは非同期処理を実現する

送信側のメッセージ送信と受信側のメッセージ取得は非同期で処理されます。

そのため、受信側が好きなタイミングでキューにあるメッセージを取得することが可能です。

SQSのキューは自動的にスケールアップされる

送信側、受信側の数が増えて、メッセージが増加したら、SQSはマネジメントサービスのため、キューは自動的にスケールアップします。

この仕組みによって、高スループットの処理を実現しています。

キュータイプ

エソラ
エソラ

SQSのキューは2種類あります!

  1. スタンダードキュー
  2. FIFOキュー

マネジメントコンソールでSQSを作成しようとすると、キューのタイプとして「標準」「FIFO」が選択出来ることが分かります。

これは一体何なんでしょうか?

では、一個ずつ詳しく見ていきましょー!

スタンダードキューとは何か?

マネジメントコンソールのキュータイプで、「標準」を選択すると、スタンダードキューになります。

エソラ
エソラ

スタンダードキューは「少なくとも1回は配信される」ことが仕様として決まっています。

これは受信側のリクエストのタイミングによっては、メッセージが重複して送信されることがあるということを意味します。

そのため、重複を回避するためにはアプリケーション側で工夫が必要です。

エソラ
エソラ

またキュー内のメッセージ処理順は順不同であり、順番に処理されることは保証されていません。

そのため、処理の順番を識別出来るような情報をメッセージボディや属性情報に含める必要があります。

特徴をまとめると、以下のようになります。

スタンダードキューの特徴

少なくとも1回は配信なので、1回以上配信されることもある。

キュー内のメッセージ処理順は順不同のため、順番が前後する可能性がある

FIFOキューとは何か?

マネジメントコンソールのキュータイプで、「FIFO」を選択すると、FIFOキューになります。

エソラ
エソラ

FIFOキューは「先入れ先出し法」という仕様に従って処理されます。

そのため、スタンダードキューでは処理順は順不同でしたが、FIFOキューでは順番が守られます。

エソラ
エソラ

またFIFOキューはスタンダードキューと異なり、1回だけ配信されることが仕様として決まっています。

ただし、FIFOキューはスタンダードキューに比べると料金が高くなることには注意が必要です。

FIFOキューの特徴

1回だけ配信される

キュー内のメッセージ処理順が順番通りになることが保証されている

スタンダードキューに比べると料金が高い

キュータイプの選択基準

キュータイプについては途中で変えることが出来ませんので、選択する前にしっかりと設計をしておく必要があります。

まとめると以下になります。

キュータイプの選択基準

メッセージの重複を許容、処理順が順不同になってもいい場合は、スタンダードキュー。許容出来ない場合は、FIFOキュー。

可視性タイムアウトとは何か?

マネジメントコンソールでは、以下のように「可視性タイムアウト」という設定項目で、可視性タイムアウトを実行する時間を設定することが出来ます。

可視性タイムアウト
エソラ
エソラ

可視性タイムアウトとは、「メッセージが取得されてから、一定期間同じメッセージを他のシステムから取得出来ないようにブロックするようにする」という設定です。

図解すると、以下のような感じになります。

可視性タイムアウト図解

仮に可視性タイムアウトを5分に設定した場合、ConsumerAがメッセージAを取得したら、5分間の間はその他のConsumerからメッセージが見えなくなります。

可視性タイムアウトの用途としては、二重処理の防止のため使用されます。

また設定値のデフォルト値は30秒であり、0秒から12時間の間で設定することが出来ます。

遅延キューとは何か?

マネジメントコンソールでは、以下のように「配信遅延」という設定項目で、遅延キューを実行する時間を設定を行うことが出来ます。

遅延キュー
エソラ
エソラ

遅延キューとは、「キューに新しいメッセージを送信した後に、指定した時間が経過してから受信側にメッセージが表示されるようにする」という設定です。

図解すると、以下のような感じになります。

遅延キュー図解

仮に遅延キューを5分に設定していた場合、Producerがキューにメッセージを送信してから、5分間の間はConsumerがメッセージを取得することが出来ません。

デフォルトは0秒であり、0秒から最大15分までの間で設定が出来ます。

キュー全体に設定することも出来ますし、メッセージタイマーを利用して個々のメッセージに設定することも可能です。

キューの取得方法

マネジメントコンソールでは、以下のように「メッセージ受信待機時間」という設定項目で、キューのポーリング間隔を設定することが出来ます。

メッセージ受信待機時間
エソラ
エソラ

設定するポーリング間隔によって、ショートポーリングとロングポーリングに分かれます。

ショートポーリングとは何か?

SQSでのデフォルトの設定であり、メッセージ受信待機時間を0秒にすると、ショートポーリングが適用されます。

ポーリング処理は、キュー内のメッセージ有無に関わらず、キューに対してメッセージの取得要求を送信します。

そのため、キューは空のレスポンスを返すこともあります。

エソラ
エソラ

注意点としては、リクエスト回数に応じて料金が発生します。

メッセージの発生頻度によっては、メッセージ取得の際に空振りが多数発生しますが、空振りであっても、リクエストを行っていることになりますので、コストパフォーマンス効率が悪くなります。

そのため、適切なポーリング間隔を設定することが、課金額を抑えられるのでおすすめです!

AWSも下記で説明するロングポーリングを設定することを推奨しています。

ロングポーリングとは何か?

メッセージ取得までの待ち時間は設定を変更することで、変更することが出来ます。

具体的には、メッセージ受信待機時間を0秒以上にするとロングポーリングになります。

メッセージ受信待機時間は、0秒〜20秒までの間で設定することが出来ます。

エソラ
エソラ

待ち時間を増やせば増やすほど、リクエスト回数を減らせるので、料金も安くなってきます。

そのため、受信側のアプリケーションの要件によって適切なポーリング間隔を設定することでコスト最適化が図れることになります。

メッセージ保持期間とは何か?

マネジメントコンソールでは、「メッセージ保持期間」の設定を変更することで、キュー内に保持しておけるメッセージの保持期間を設定することが出来ます。

メッセージ保持期間

デフォルトは4日間までキュー内にあるメッセージは保存されます。

これは設定により、60秒〜14日間まで変更が可能です。

エソラ
エソラ

つまり、「ここで設定した保持期間がキュー内のメッセージを受け取って処理をするアプリケーションの限界ダウンタイム時間である」と言うことが出来ると思います。

アプリケーションが停止した場合、この期間内に復旧することが出来れば、キューに貯まったメッセージを処理していくことが出来ます。

しかし、期間を過ぎてしまうとメッセージを処理することが出来なくなりますので注意が必要です。

最大メッセージサイズとは何か?

最大メッセージサイズ

キューに格納出来る1メッセージあたりのサイズは最大256KBまでとなります。

ただし、このメッセージサイズについては容量を増やすことが可能です。

実現するためには、「Extended Client Library」を使用します。

Extended Client Libraryを使用すると、最大256KBから最大2GBまでメッセージサイズを増やすことが出来ます。

SQSの暗号化方法

SQSは以下のように「サーバー側の暗号化」を有効にすると、暗号化をすることが出来ます。

SQSの暗号化

暗号化では、「KMS(AWS Key Management Service)」を利用することが出来ます。

KMSは自前で用意することも出来ますし、SQSのデフォルトKMSを利用することも出来ます。

デットレターキューとは何か?

マネジメントコンソールでは、以下のようにデットレターキューオプションを有効にすることで、デットレターキューを設定することが出来ます。

デットレターキュー
エソラ
エソラ

デットレターキューとは、「エラー処理に対して、何回かリトライを実施した後で自動的に別のキューにメッセージを移動する機能」です。

この機能によって、問題のあるメッセージを識別しやすくなり、問題があるメッセージがキュー内に残り続けることを防ぐことが出来ます。

さいごに

エソラ
エソラ

ここまで、SQSの主要機能について解説しました。

マネジメントコンソールの画面を掲載しながら記事を書いていきました。

しかし、実際にマネジメントコンソールを開いてこの記事を見てもらうことで、理解度はより高まると思います。

今後もこの記事で紹介出来なかったSQSの機能については随時追記をしていきたいと思っています。

エソラ
エソラ

また、AWS認定資格や他のサービスについての記事もありますので、よろしければそちらもご参照頂けたらと思います。

ここまでお読み頂き、ありがとうございました。
もし、「面白かった」、「参考になった」という方がいましたら、以下のソーシャルボタンからシェア頂けると泣いて喜びます!!
エソラ
エソラ
またブログランキングにも参加しています。 よろしければ、ポチッとお願いしまーす!
それでは、良いエンジニアライフをお過ごし下さい!

スキマ時間で効率的に読書をしたいなら、聴く読書「Audible」が最強!

技術の勉強もしないと、どんどんと周りに置いてかれてしまう…
ビジネス書も読まないと、良いサービスが作れない…
自己啓発書も読んでおかないと、出世ができない…でも、そんな時間が自分にはない!
エンくん
エンくん
エソラ
エソラ
そんな悩みを抱えているのであれば、Audibleが解決策になるかも知れません!
\今なら30日間無料体験!聴く読書で効率的に勉強して、スキルアップしたいなら!/

聴く読書「Audible」がヤバイ!!

AudibleはAmazonが提供している「オーディオブック・サービス」です。
つまり書籍の内容をナレーターが読んでくれるってこと?
エンくん
エンくん

エソラ
エソラ
そういうことです!
ということで、通勤をしながら、家事育児をしながら読書ができるので、忙しい人にぴったりです!
エソラ
エソラ
書籍のラインナップも豊富で、どんどん新しい書籍が追加されていっているよ!
\今なら30日間無料体験!聴く読書で効率的に勉強して、スキルアップしたいなら!/

Audibleのメリット

良さそうだと思うけど、聴く読書って本当に効果あるの?
聴くだけで本当に頭に入るの?
エンくん
エンくん

エソラ
エソラ
例えば、音楽を何気なく聴いていると、自然と歌詞が頭に入っているという経験はない?

あるね〜
好きな音楽をヘビロテで聴いていると、自然と歌えるようになっているね!
エンくん
エンくん

エソラ
エソラ
そうそう!
そんな感じで何度も聴いていれば自然と頭に入っていくよ!
メリットをまとめていくと以下のような感じだね!

なるほど〜!
忙しくても手軽に読書ができて、
記憶にも残りやすく、
当たり前だけど、目を使わないので目にも優しいんだね!
エンくん
エンくん
\今なら30日間無料体験!聴く読書で効率的に勉強して、スキルアップしたいなら!/

今なら30日間、無料体験!

試してみたいと思ったけど、本当に自分に必要なサービスなのか分からないな〜
エンくん
エンくん

エソラ
エソラ
じゃあ、30日間なら無料で体験ができるから、
無料体験期間で使いまくって、合わなければ辞めたら?
無料期間内にサービスを停止したら、お金はかからないよ!
なるほど〜
じゃあ、気軽に始めてみるか!
エンくん
エンくん
エソラ
エソラ
無料期間内に辞めても、一冊は無料でプレゼントされるから、
一冊もらう目的で登録しても良いと思うよ!
神やん!
さっそく登録してみるよ〜
エンくん
エンくん

\今なら30日間無料体験!聴く読書で効率的に勉強して、スキルアップしたいなら!/
最新情報をチェックしよう!