目次
Amazon SQS(Simple Queue Service)とは?
Amazon SQSは、マネージド型メッセージングキューサービスです。SQSを利用する事で受信者に対し、Pull型のメッセージ配信(メッセージ受信者が任意のタイミングでキューイングサービスのメッセージを取得する方式)をする事が可能です。
スケーラブルで比較的安価という特徴があります。
SQSは複数のコンポーネントを繋ぐ際に利用される事が多く、分散アプリケーション、マイクロサービスアーキテクチャなどのアプリケーションを構築する事が可能です。
ユースケース
Amazon SQSは例として、以下の様なユースケースが存在します。
- イベント駆動システム:サービス(AWSサービス及びマイクロサービスアプリケーション)間にAmazon EventBridge及びSQSを組み合わせる事で、Pull型にてイベント駆動のシステムが構築可能です。
- 通知:SQSは、Amazon SNSと組み合わせて、通知機能を実現可能です。SNSのみでも通知機能は作成できますが、SQSをSNSの後に配置する事で、通知をキューイングしてPull型のメッセージ配信が可能となります。
- ジョブキュー:SQSは、ジョブキューとして使用可能です。ジョブは、ワーカーが消費し、完了したら自動的に削除されます。これにより、アプリケーションは、スケーラビリティ、耐久性、そして失敗の自動復旧を提供できます。
料金
Amazon SQSには標準キューとFIFOキューのというキューイングの方法があり(後程記載)、それぞれ料金が異なります。また、どちらも月100万リクエストまでは無料となります。
標準キュー
- ~100万リクエスト/月:無料
- 100万~1000億リクエスト/月:0.40USD/100万リクエスト
- 1000億~2000億リクエスト/月:0.35USD/100万リクエスト
- 2000億リクエスト~/月:0.32USD/100万リクエスト
FIFOキュー
- ~100万リクエスト/月:無料
- 100万~1000億リクエスト/月:0.50USD/100万リクエスト
- 1000億~2000億リクエスト/月:0.46USD/100万リクエスト
- 2000億リクエスト~/月:0.42USD/100万リクエスト
料金は変動する可能性があるので、詳細はAWS公式ドキュメントを参照下さい。
ハンズオン概要
以下で実際にSQSを利用していきます。
今回は、SNSからの通知をSQSで受け取りキューイングするというシナリオを想定します。
利用手順
※当ページでは2023年4月現在のSQSについて解説します。クラウドサービスは頻繁にアップデートが施されるため、仕様が異なる可能性があります。
ログイン
まずは、AWS公式ページからAzureにログインしましょう。
SQSの作成
サインイン後検索バーに”SQS”と入力し、”Simple Queue Service”を押下します。
遷移先から、”キューを作成”を押下します。
“詳細”は以下の様に設定します。
- タイプ:キューのタイプを指定します。今回は”標準”を選択します。
- 標準:少なくとも一度メッセージをキューイングします。メッセージが重複する可能性があり、順序も変わる可能性があります。しかし、スループットが高く、コストもFIFOより安いです。
- FIFO:メッセージを重複無く、順序を守ってキューイングします。スループットは標準より低く、コストは標準より高くなります。
- 名前:任意の名前を付与します。今回は”test-queue”と命名します。
“設定”は以下の様に定義します。
- 可視性タイムアウト:可視性タイムアウトとは、あるコンシューマーがメッセージにアクセスした際に、指定された期間(デフォルトでは30秒)他のコンシューマーの同一メッセージをブロックする機能です。同一のメッセージが複数のユーザーにより取得されるのを防ぎたい場合に利用します。
- メッセージ保持期間:メッセージ保持期間はキューに存在するメッセージを最大どれだけの時間保持するかを決定します。今回はデフォルトの4日に設定する。
- 配信遅延:メッセージ送信者がSQSにメッセージを送信してから一定期間メッセージのアクセスをブロックする機能です。リトライ処理を一定時間後に行いたい場合などに利用します。
- 最大メッセージサイズ:メッセージの最大サイズを定義します。最大256KBです。今回は256KBとします。
- メッセージ受信待機時間:サブスクライバーがメッセージを取得するまで待機する時間を設定します。デフォルトでは0秒となっています。0秒にすると、ショートポーリングというキューを確認して即応答をする(メッセージが存在しない場合空のレスポンス)形式となります。今回は”20秒”とします。
“暗号化”については以下のように設定します。
- サーバー側の暗号化:キュー内に存在するメッセージを暗号化するかどうかを設定します。暗号化した場合、サブスクライバーは鍵を利用して複合する必要があります。デフォルトでは有効になっています。今回は”無効”を設定します。
- Encryption key type: 暗号化を有効にした場合、どの鍵を利用して暗号化を行うかを設定します。Amazon SQSが作成、管理、使用するAmazon SQSキーと、AWS KMSが保護するAWS Key Management Serviceキーが存在します。今回はデフォルトのAmazon SQSキーを使用します。
“アクセスポリシー”については以下のように設定します。
- メソッドを選択:アクセスポリシーを設定する方法を選択します。今回は”ベーシック”を選択します。
- ベーシック:AWSが事前定義したポリシーを用いてアクセスポリシーを作成します。
- アドバンスト:独自でJSON形式にてアクセスポリシーを定義します。
- キューにメッセージを送信できるユーザーを定義:キューにメッセージを送信できるユーザーを定義します。今回は”キュー所有者のみ”を選択します。
- キューからメッセージを受信できるユーザーを定義:キューからメッセージを受信できるユーザーを定義します。今回は”キュー所有者のみ”を選択します。
“許可ポリシーの再実行”については以下の様に設定します。
- このキューをデッドレターキューとして使用できるソースキューを選択します。:作成するキューをデッドレターキューとして利用する場合はこちらを有効にします。今回は”無効”にします。
“デッドレターキュー”については以下の様に設定します。
- 配信不能メッセージを受信するようにこのキューを設定します。:デッドレターキューを送信するキューを指定する場合は有効にします。今回は”無効”を選択します。
タグについては、今回は付与しません。
上記の設定が完了したら、SQS単体で動作確認を行います。”メッセージを送受信”を押下します。
“メッセージ本文”に任意の文字を入力し、”メッセージを送信”を押下します。こちらを実施すると、SQSが自身に向け、テストのメッセージを送信します。
“メッセージをポーリング”を押下すると、送信したメッセージが表示されます。
IDを押下すると、テストにて作成したメッセージが本文に記載されている事が確認できます。
SNSの作成
Amazon SNSのトピックタブより、トピックを作成します。基本的にデフォルト設定で問題ありません。詳細は、【AWS】Amazon SNSとは?徹底解説!よりご確認下さい。
SQSをSNSにサブスクライブする
SNSが作成できたら、SQSをSNSにサブスクライブします。SQSの管理画面より、”Amazon SNSトピックにサブスクライブ”を押下します。
先程作成したSNSを選択し、”保存”を押下します。
SQSをサブスクライバとして保存できたら、SNSからメッセージを発行します。SNSからのメッセージを受信できれば成功です。
SNSの先程作成したトピックを選択し、”メッセージの発行”を押下します。
SNSからのメッセージと分かる任意の件名とメッセージ本文を入力し、”メッセージの発行”を押下します。
先程の手順でSQSよりポーリングを行うと、受信メッセージが増えている事が確認できます。IDを確認し、SNSから作成したメッセージである事が確認できれば成功です。
関連記事