【初心者〜現場で活躍まで】挫折しないPython勉強方法もっと知る

【5分で理解】初心者向けにAWSのSQSを徹底解説

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

この記事について

この記事を見れば、SQSの概要・主要機能を理解して、日々の業務に活かしたり、AWS認定資格の対策になります。

この記事を書いた人

エソラ
  • エンジニア歴10数年
  • SIerでDX推進を仕事に
  • アーキテクチャ設計・アプリ開発が得意
  • 30代、2児の父でサウナ好き
  • [icon-class=”icon-twitter”]Twitter

また、SQSを含めたAWSのサービスを、ハンズオン形式で学ぶなら動画で学べるの講座がぴったりです。

\ AWS学習の決定版!30日以内なら返品もOK! /

エソラ

文量が多いので、目次から知りたい情報だけ、読んで下さい。

目次

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種類あります。

SQSのキューの種類
  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の主要機能について解説しました。マネジメントコンソールの画面を掲載しながら記事を書いていきました。

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

AWS公式のBlackBeltも合わせて見ると、理解度が深まります。

20190717 AWS Black Belt Online Seminar Amazon Simple Queue Service

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

また、SQSを含めたAWSのサービスを、ハンズオン形式で学ぶなら動画で学べるの講座がぴったりです。

\ AWS学習の決定版!30日以内なら返品もOK! /

ここまでお読みいただき、ありがとうございました。

役に立った、面白かったと思ったら、SNSでシェアしてくれると嬉しいです。

エソラ

もし分からないことがあれば、お問い合わせTwitterにご連絡をいただけると嬉しいです。(Twitterの方が返信早いかも…)

\ 更新の励みになるので、ポチッとしてね /

エソラ

他にもスキルアップやキャリアアップの役に立つ情報が満載です。他の記事も読んで、ゆっくりしていってね!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

コメントする

目次