【SAA試験対策】AWS認定ソリューションアーキテクト-アソシエイトの暗記用語のまとめ 〜 SQS/SNS編
目次
こんにちは。
AWSの認定試験の勉強をしています。特にSAA(ソリューションアーキテクト - アソシエイト)試験で出てきそうな、個人的に覚えにくい・忘れやすい用語をまとめてみました。
試験概要はこちら:AWS 認定 ソリューションアーキテクト – アソシエイト
尚、本記事で取り扱っている用語はAWS公式の実際の出題ではなく、自分が勉強していて覚えにくかった用語を元にしていますので、認定試験では出題されない可能性もあります。あくまでも参考程度に御覧ください。
そもそもAWSって何?という方はこちらの記事を御覧ください。
AWS公式ドキュメントでは概念的な言葉でわかりにくい表現がどうしてもあります。このブログではふわっとした言葉を極力なくして、わかりやすく伝えていこうと思います。
AWSの基礎や体系立てた知識の習得には書籍もオススメです。
AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト
今回はSQS/SNS編です。
それでは用語についてまとめていきます。
疎結合と密結合とは
密結合とはWeb層とApp層が複雑に結びついていて分けにくい状態のことです。
例えばこのブログのように静的なコンテンツであれば、Webサーバだけでさばけますが、動的なコンテンツは裏でアプリケーション・サーバーが動いています。
特に複数のコンテンツを提供するようなシステムだと、ある静的ページから複数のアプリケーションを呼ぶ必要が出てきます。このとき、一つのサーバで全てを処理しようとすると、管理やメンテナンスが大変になったり、障害に弱くなります。また、アプリケーションの裏にDBサーバーがあったりして(たいていあると思いますが)、ユーザがアクセスするwebサーバが直接DBを呼びに行くような構造だと、セキュリティ的に不安ですよね。
そこで、web層、app層、DB層と3層に分けて、しかもそれぞれが密に結びついていると管理が大変なので、なるべく分かれている状態にしましょう、というのが疎結合の考え方です。
メッセージングサービスの意義
一言でいうと、時間軸の疎結合化です。
上記のようにweb層とapp層を疎結合にするだけであれば、ELB(Elastic Load Balancer)を挟むことで実現できます。
しかし、アプリケーションサーバーの負荷が高くなると、サーバーやネットワークの問題で処理できないリクエストが出てくるといった問題があります。
そこで必要になるのがSQSやSNSといったメッセージングサービスです。
ELBのようにリクエストを処理するサーバーを分けるように経路をさばくのではなく、メッセージを溜めて時間をずらしてさばく、といったリクエスト処理を時間軸で分けることで、処理できないリクエストが出てくるリスクを減らすことができます。
SQS
ということで前置きが長くなりましたがAWSのメッセージキューイングサービスSQS(Simple Queue Service)です。主に処理の分散に使われます。
キューというのは自宅の郵便受けや宅配ボックスのような送信者と受信者の間でメッセージを溜めておいてくれるもののことです。
受け取る人は好きなタイミングでメッセージを取りに行くことができます。
AWSのマネージドサービスで、1日数十億件のメッセージの処理が可能です。
【AWS公式ドキュメント】 「What is Amazon Simple Queue Service?
メッセージ容量
1メッセージの容量は256KBまでで、画像とかを送るというよりはあくまでテキストメッセージのやり取りに使います。画像を送りたい場合は画像ファイルをS3にアップロードしてS3バケット名を送る、といった処理になります。
ちなみに、キューに保存できるメッセージの数は無制限です。
ユースケース
ユースケースの例としては、webサーバーが受けた注文メッセージをキューに入れて、複数のアプリケーションサーバーがこのメッセージを取りに行って注文処理する、といった分散処理のアプリケーションなどです。
メッセージ保持期間
キューのデフォルト保持期間は4日間です。保持期間をすぎると、キューに残っているメッセージは自動的に削除されます。
ちなみに処理できずにキューに溜まってしまう場合は、キューサイズをトリガーにしたEC2のAutoScalingグループをスケールすることができます。
SQSのキューのタイプ
標準キュー
少なくとも1回のメッセージ配信を行うので、運が悪いと2回届くこともあります。
順不同で速度が速いタイプです。
FIFOキュー
First In First Outの略で、入ってきた順番で1回だけメッセージを配信します。
1秒あたり3000メッセージ(300APIコール)と速度制限がある交通整理されたタイプです。
デッドレターキュー
処理されなかったメッセージのゴミ箱です。
後で見てどんなメッセージが処理されなかったのか、原因を分析して対策をうつために使います。
【AWS公式ドキュメント】 Amazon SQS デッドレターキュー
可視性タイムアウト
あるメッセージが処理されている最中に、そのメッセージが他のインスタンスから見えないように、ロックを掛けておく機能です。
タイムが過ぎたら処理失敗したとみなして他のインスタンスが取りにいけるようにしてあげる、などの使い方をします。
デフォルト30秒で、最大12時間まで設定できます。
【AWS公式ドキュメント】 Amazon SQS 可視性タイムアウト
ロングポーリング
SQSの冒頭に書いたように、SQSは受信者がキューにメッセージを取りに行きます。
このとき、キューにメッセージがなかったら少し待つことをロングポーリングといいます。
ロングってどれくらい?と思いますが、1sec以上は全部ロングです。
SQSはメッセージを取りに行く回数で課金されるので、ロングポーリングが推奨されています。
逆に、1インスタンスで複数のキューを探しに行く構成などでは待機時間の分処理が遅くなるので、ショートポーリングを使うのがよいとされています。
【AWS公式ドキュメント】 Amazon SQS ショートポーリングとロングポーリング
SQSの暗号化
AWS KMS(Key Management Service)で管理されたキーを使用してメッセージ内容が保護することができます。
メッセージは受信時点で暗号化されて、許可された人に送信された場合のみメッセージが復号されるので、安全にやり取りできます。
ちなみに、メッセージやキューのメタデータは暗号化されません。
SNS
SQSとよく対比して出てきてしかも名前も似ているというややこしい立ち位置のSNSです。
SNSはSimple Notification Serviceの略で、Social Networking Serviceのことではありません。
主にメッセージングに使われます。
メルマガみたいなイメージで、読む人に無理やりメッセージを押し付けるタイプ(push型)で、読む人が宅配ポストに取りに行くタイプ(pull型)のSQSとは違いますね。
よく使われるのは、EC2インスタンス等がある閾値を超えたときのCloudWatchアラームをモバイルにプッシュ通知する、といったユースケースです。
【AWS公式ドキュメント】 Amazon SNS とは
使い方
トピック、トピックと通信できる発行者、サブスクライバー(購読者)を設定して使います。
サブスクリプションタイプ
Eメール(JSONオブジェクト)、HTTP POST、SMS、SQS標準キュー、Lambda関数が設定できます。
まとめ
というわけで、AWS認定試験のSAA(ソリューションアーキテクト - アソシエイト)で必要となりそうなSQS/SNS関連の用語について忘れないようにまとめてみました。
定期的に見直して知識の定着を行っていきたいです。また別のカテゴリについてもまとめる予定です。
AWSの基礎からの勉強や、体系立てた知識の整理には書籍もオススメです。こちらは2020年の最新試験(SAA-C02)の問題にも対応しています。
(模擬問題付き)改訂新版 徹底攻略 AWS認定 ソリューションアーキテクト − アソシエイト教科書[SAA-C02]対応