はじめに
AWS SAAの問題集を解いていると「2択まで絞れたのに2分1を外す」という1番悔しい場面に何度も直面します。
- 選択肢どちらか片方のサービスにもう少し詳しければ...
- 似たようなサービスなのは知っているが決定的な違いを覚えてない...
- すでにサ終しているサービス名の書かれた選択肢に本気で悩む...
上記のような、あと少し知っていれば正解できた問題を取りこぼさない!
必要最低限、でもSAAの問題が前より解ける!を目指して記事を書いていきます。
今回はAmazon SNSとAmazon SQSについてです。
問題で迷ってしまったワケ
結論、SNSとSQSの違いが曖昧だった!!
当時のそれぞれのサービスへ抱いていたイメージが以下です。
Amazon SNS
- メールなどでメッセージ(通知)を送るサービス
Amazon SQS
- データを別システムに送るサービス
- 順番を守ることができる(FIFO)
そりゃ2分1も外すよなぁと思うレベルの理解と知識量。
CLFはこの知識だけでも受かりましたが、SAAではもう少し深い知識がないと正解できないので記事を書くついでに勉強していきます。
これでもう2分1を外さない! ~Amazon SNS~
!! 複数の宛先へ同時にメッセージを送信(Push)できる分岐装置 !!
このときの宛先は以下を指します。
- SMSメッセージ、モバイルプッシュ通知、Emailなどの人間向け通知
- Amazon SQSやAWS Lambdaなどの他アプリケーション
CLFでは人間向け通知の問題が多い印象でしたが、SAAは他アプリケーションへのシステム連携を中心に聞かれることが多いなと感じています。
Amazon SNSの問題の解説文でよく見かける言葉があります。
並列非同期処理 です。
まるでAmazon SNSの特徴を示すような言葉に感じますが全然違います!!
※ECサイトの注文をイメージ
①注文が入ったらAmazon SNSが複数の宛先に対して送信
SNS
├→ SQS
├→ Lambda
└→ HTTP
②送信後は各宛先が独立して処理を実施する
SNS
├→ SQS → 注文データをキューに貯める
├→ Lambda→ 在庫を更新する
└→ HTTP → 外部の配送システムに通知
→ まるでAmazon SNSが全ての処理を実行しているように見えてしまう!!
が、実際Amazon SNSがしていることは各宛先へメッセージを送信しているだけ。
その後の処理は各サービスが実施しています。
並列非同期処理はAmazon SNSの特徴、というよりはAmazon SNSを使った構成の結果と考えるのが個人的には1番しっくりきました。
これでもう2分1を外さない! ~Amazon SQS~
!! LambdaやEC2がデータを取得しにくる(Pull)まで保存できる箱 !!
でもぉ、Amazon SQSも他のシステムにメッセージを送信できるじゃないですかぁ〜って。
思っていた時期が私にもありました。違いました。
Amazon SQSはデータをキューに保存するだけで、自らデータを送信することはできないのです!!
※ECサイトの注文をイメージ
①注文が入ったらAmazon SNSなどが複数の宛先に対して送信
SNSなど
├→ SQS ※ 今回はここ!
├→ Lambda
└→ HTTP
※以下 データ内容例
{
"user": "Aさん",
"item": "本",
"count": 1
}
②SQS キューに保存
SQS
┌────────────┐
│ Aさんの注文 │
└────────────┘
このタイミングでは保存しただけでデータの処理は実行していない。
ただ置いてあるだけ!
③誰かが取りにくる
配送システム(Lambdaなど)が「注文ある?」って感じでSQSを見に来て、
Aさんの注文データをメッセージとして取得する。
④注文処理
Lambdaが「在庫確認・配送依頼・DB保存など」を実施。
処理完了後、ここで初めてSQSからもデータが削除される(DeleteMessage)
→ Lambdaのせいでややこしいけど、SQSからメッセージを送信はしていない!!
Amazon SQSはデータを受け取ったあと、相手が取りにくるまで保管しているだけ。
改めてAmazon SNSとは動きが全然違いますね!
最初のふわっとしたイメージに比べると、明らかに別の動きをするサービスなんだと実感します。
(もちろん上記以外にもできることはたくさんありますが、今回は割愛します)
もう迷わない! 簡単まとめ
最後に2つのサービスについてまとめて終わりにしたいと思います。
Amazon SNS
- 複数の宛先(Amazon SQSやAWS Lambdaなど)へ同時にメッセージを送信(Push)できる分岐装置
- メッセージを送信するだけで、その後の処理は各宛先が実施
Amazon SQS
- Amazon SNSなどから受け取ったデータを、相手(AWS LambdaやEC2など)が取りにくるまで保存しておける箱
- 自分から送信することはない!(Pull)
これできっと!次は自信を持って問題に答えられるはず...!!
学びながらまとめているので、もし解釈にズレがあればぜひ教えてください!
同じように学習中の方の参考になれば嬉しいです。