Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS研修 Amazon SNSとAmazon SQS
Search
Recruit
PRO
August 18, 2021
Technology
5
4.3k
AWS研修 Amazon SNSとAmazon SQS
2021年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 18, 2021
Tweet
Share
More Decks by Recruit
See All by Recruit
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
33
問題解決に役立つ数理工学
recruitengineers
PRO
11
2.8k
Curiosity & Persistence
recruitengineers
PRO
2
190
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
400
成長実感と伸び悩みからふりかえる キャリアグラフ
recruitengineers
PRO
1
180
リクルートの オンプレ環境の未来を語る
recruitengineers
PRO
3
340
LLMのプロダクト装着と独自モデル開発
recruitengineers
PRO
1
350
新規検索基盤でマッチング精度向上に挑む! ~『ホットペッパーグルメ』の開発事例 ビジネス編
recruitengineers
PRO
3
190
新規検索基盤でマッチング精度向上に挑む! ~『ホットペッパーグルメ』の開発事例 技術編
recruitengineers
PRO
2
250
Other Decks in Technology
See All in Technology
Clineを含めたAIエージェントを 大規模組織に導入し、投資対効果を考える / Introducing AI agents into your organization
i35_267
4
1.3k
TechLION vol.41~MySQLユーザ会のほうから来ました / techlion41_mysql
sakaik
0
140
Welcome to the LLM Club
koic
0
130
知識を整理して未来を作る 〜SKDとAI協業への助走〜
yosh1995
0
130
A2Aのクライアントを自作する
rynsuke
1
150
Oracle Audit Vault and Database Firewall 20 概要
oracle4engineer
PRO
2
1.6k
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
770
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全 / 20250625-aws-summit-aws-policy
opelab
6
680
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
140
2025/6/21 日本学術会議公開シンポジウム発表資料
keisuke198619
2
470
~宇宙最速~2025年AWS Summit レポート
satodesu
1
1k
JSX - 歴史を振り返り、⾯⽩がって、エモくなろう
pal4de
3
1.1k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
A Modern Web Designer's Workflow
chriscoyier
693
190k
A designer walks into a library…
pauljervisheath
206
24k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
200
Speed Design
sergeychernyshev
31
1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Docker and Python
trallard
44
3.4k
4 Signs Your Business is Dying
shpigford
184
22k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Transcript
Amazon SNS と Amazon SQS 株式会社リクルート クラウドアーキテクトグループ
Amazon SNS • フルマネージドなPub/Subメッセージングサービス 2
Pub/Subとは︖ メッセージを投げ込む(Publish)すると指定したターゲット(Subscriber)にメッ セージを配信するサービス 新聞の発⾏元(Publisher) と購読者(Subscriber)の関係における 配送業者がPub/Subサービスに当たる 3 新聞社 (Publisher) 配送業者
や販売店 多数の購読者 (Subscribers)
新聞購読の例 Amazon SNSにおける概念 • Topic • メッセージのやり取りを中継する論理的なチャンネル • Publisher •
メッセージの発⾏元 • Subscriber • メッセージの送信先 4 新聞社 (Publisher) 配送業者 や販売店 多数の購読者 (Subscribers) Topic Publisher Subscriber Subscriber Subscriber Subscriber Amazon SNS
Amazon SNSが提供する価値 ① 機能 Pub/Sub機能の提供 メッセージフィルタリング ② ⾮機能
アクセスコントロール • Topicへのアクセスコントロール リトライ処理 • メッセージがSubscriberに 届かなかった場合のリトライ処理 ⾼い性能と可⽤性 • とにかく⼤量のメッセージを処理できる • その他OSやハードウェア管理 • いわゆるマネージドサービスの ⼀般的な提供価値 5 ⾯倒な⾮機能要件を引き受けてくれる ための仕組みを提供してくれると 考えてもよいです
• メッセージフィルタリング • アクセスコントロール • リトライ処理 6
• メッセージフィルタリング • アクセスコントロール • リトライ処理 7
メッセージフィルタリング(Filter Policy) Subscriberが受け取りたい機能だけを受け取る機能 8 不動産会社 (Publisher) 広告ポスティング業者 (Topic) { "price"
: [{ "numeric": ["<=", 3000] }] } { "price" : [{ "numeric": [">=", 10000] }] } FilterPolicyB FilterPolicyA 広告配布先 A (Subscriber A) 広告配布先 B (Subscriber B) 3000万円以下の物件のみ紹介してほしい 1億円以上の物件のみ紹介してほしい "MessageAttributes": { "price": { "Type": "Number", "Value": 12000 } } MessageAttributes 1億200万円の物件︕
メッセージフィルタリング(Filter Policy) Subscriberが受け取りたい機能だけを受け取る機能 9 不動産会社 (Publisher) 広告ポスティング業者 (Topic) { "price"
: [{ "numeric": ["<=", 3000] }] } { "price" : [{ "numeric": [">=", 10000] }] } FilterPolicyB FilterPolicyA 広告配布先 A (Subscriber A) 広告配布先 B (Subscriber B) 3000万円以下の物件のみ紹介してほしい 1億円以上の物件のみ紹介してほしい "MessageAttributes": { "price": { "Type": "Number", "Value": 12000 } } MessageAttributes 1億200万円の物件︕ 広告配布先Bのみが広告を受け取る
• メッセージフィルタリング • アクセスコントロール • リトライ処理 10
アクセスコントロール 誰でもPublisherやSubscriberになれるとまずいので、IAMやリソースポリシーで 権限を制御します 11 M新聞社 配送業者 や販売店 Y新聞社 うち、Y新聞専売なので NGなんです。すみません。
購読料払ってないので、 NGです。 { "Effect": "Allow", "Principal": { "AWS": "Y新聞社" }, "Action": [ "SNS:Publish" ], "Resource": "業者A" } 業者A { "Effect": "Allow", "Principal": { "AWS": "購読者*" }, "Action": [ "SNS:Subscribe", "SNS:Receive", ...., ], "Resource": "業者A" } 購読者A 購読者B 購読者C ⾮購読者X リソースポリシー
• メッセージフィルタリング • アクセスコントロール • リトライ処理 12
リトライ処理 何かしらの理由でSubscriberにメッセージが届けられなかった場合に メッセージを再送します。 13 Topic Publisher Subscriber 1 Subscriber 4
Subscriber 3 Subscriber 2 Subscriber 1に対しては再送処理が実⾏される
リトライ処理 SNSでは配信失敗時のリトライも⼀定のルールに従って実施する 14 https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-message-delivery-retries.html
Amazon SNSまとめ Amazon SNSを利⽤することで、⾮常に多くのメッセージを安全かつ確実、柔軟 に多くの宛先にメッセージを配信することができます。 15 Topic Publisher Subscriber Subscriber
Subscriber Subscriber Amazon SNS
Amazon SNSの残った課題 Amazon SNSは、受信したメッセージを即座に宛先に配信します。配信先が処理 できない場合もメッセージを配信します。 Publisherが⾼速でSubscriberが低速な場合、これは⼤きな問題となります。 これを解決するための⼿段の1つとしてAmazon SQSを利⽤することが多いです。 16 Topic
Publisher Subscriber 2 毎秒100万メッセージ をPublishする 毎秒80万メッセージ を処理する 差分の20万メッセージはどこへ...??
Amazon SQS • フルマネージドなキューサービス 17
キューとは︖ 18 特定の処理のための待ち⾏列のこと (複数台の)レジ レジでの処理待ちの⾏列 (キュー)
キューの必要性 ① メッセージのバッファリング メッセージを整列させて処理できる範囲で徐々に処理していく レジ列に並んで待ってもらうことでレジの処理がパンクすることを防ぐ ② 並列性の向上による処理性能向上
レジの台数を増やすほど処理性能を向上させる 19 ) ( そんなに一度に来られても 対応できひん
Amazon SQSの基本概念 • Producer • Queueにメッセージを投げ込むコンポーネント • Queue • メッセージを格納してバッファリングするコンポーネント
• Consumer • Queueに格納されたメッセージを取り出して処理するコンポーネント 20 Queue Producer Consumer Message Message … Amazon SQS enqueue dequeue
Amazon SQSが提供するもの • キューとしての機能(メッセージのエンキュー・デキュー, メッセージの保持) • ⾮常に⾼い性能と可⽤性 • デッドレターキュー •
可視性タイムアウト • 遅延キュー/メッセージタイマー • アクセス制御 • メッセージ暗号化 21
Amazon SQSが提供するもの • キューとしての機能(メッセージのエンキュー・デキュー, メッセージの保持) • ⾮常に⾼い性能と可⽤性 • デッドレターキュー •
可視性タイムアウト • 遅延キュー/メッセージタイマー • アクセス制御 • メッセージ暗号化 22
デッドレターキュー 処理に失敗したメッセージはキューに戻されるが、⼀定回数以上連続して 処理に失敗したメッセージを別のキュー(デッドレターキュー)に格納して 別の⽅法で処理したりメッセージを確認して処理に失敗する原因を分析するための 仕組みです。 23 Queue Producer Consumer Message
Message … enqueue dequeue DeadLetterQueue 処理に失敗した Message 処理に失敗した メッセージを enqueue
Amazon SQSが提供するもの • キューとしての機能(メッセージのエンキュー・デキュー, メッセージの保持) • ⾮常に⾼い性能と可⽤性 • デッドレターキュー •
可視性タイムアウト • 遅延キュー/メッセージタイマー • アクセス制御 • メッセージ暗号化 24
可視性タイムアウト Consumerにメッセージが重複して取得される可能性を下げるために、 処理中のメッセージは他のConsumerからは⾒えなくする仕組み 25 Queue Producer Consumer Message Message …
enqueue dequeue Consumer Consumer 同⼀メッセージが重 複してConsumerに 取得される可能性が ある 取得されたメッセー ジは⼀時的に⾒えな くする(可視性タイム アウトで設定した時 間分だけ)
Amazon SQSが提供するもの • キューとしての機能(メッセージのエンキュー・デキュー, メッセージの保持) • ⾮常に⾼い性能と可⽤性 • デッドレターキュー •
可視性タイムアウト • 遅延キュー/メッセージタイマー • アクセス制御 • メッセージ暗号化 26
遅延キュー・メッセージタイマー • 遅延キュー • キューとしてenqueueされたメッセージを取得できるようにするまでの待ち時間を設定できます • メッセージタイマー • Producer側でメッセージ毎に取得できるようにするまでの待ち時間を設定できます 27
Queue Producer Consumer Message Message … enqueue dequeue Consumer Consumer 遅延キューまたは、メッ セージタイマーに指定され た時間が経過すると Consumerでメッセージを 取得できるようになります。 キュー単位で 配信を遅延させる時間を 設定できます。 遅延キュー メッセージタイマー メッセージ単位で配信を 遅延させる時間を設定で きます。
遅延キュー・メッセージタイマー • 遅延キュー • キューとしてenqueueされたメッセージを取得できるようにするまでの待ち時間を設定できます • メッセージタイマー • Producer側でメッセージ毎に取得できるようにするまでの待ち時間を設定できます 28
Queue Producer Consumer Message Message … enqueue dequeue Consumer Consumer 遅延キューまたは、メッ セージタイマーに指定され た時間が経過すると Consumerでメッセージを 取得できるようになります。 キュー単位で 配信を遅延させる時間を 設定できます。 遅延キュー メッセージタイマー メッセージ単位で配信を 遅延させる時間を設定で きます。 メッセージを正常に処理するにあたっての準備のために 事前準備の期間の確保が必要な場合に利⽤する
Amazon SQSが提供するもの • キューとしての機能(メッセージのエンキュー・デキュー, メッセージの保持) • ⾮常に⾼い性能と可⽤性 • デッドレターキュー •
可視性タイムアウト • 遅延キュー/メッセージタイマー • アクセス制御 • メッセージ暗号化 29
アクセス制御 • IAMまたはSQSのリソースポリシーをもちいてキューへのアクセスを制御します • Producer・Consumer両⽅の制御が可能です 30 リソースポリシーの設定画⾯ Queue Producer Consumer
Message Message … enqueue dequeue Consumer キューに対してのProducer, Consumerの アクセス可否やアクセス可能な範囲を定義できます
メッセージ暗号化 • 転送中のデータはHTTPSで保護 • 保管中のデータはサーバサイドで暗号化して保護することができます • AWS KMSと組み合わせてメッセージの暗号化が可能です 31 Queue
Producer Consumer Message Message … enqueue dequeue Consumer Consumer HTTPS による暗号化 AWS KMSによる暗号化 HTTPS による暗号化 転送中 保管中 転送中
Amazon SNSとAmazon SQSの組み合わせ 32 Topic Publisher Subscriber Subscriber Subscriber Subscriber
Amazon SNS Queue Producer Consumer Message Message … Amazon SQS enqueue dequeue
Amazon SNSとAmazon SQSの組み合わせ Amazon SNSとAmazon SQSを組み合わせることで メッセージのファンアウトとバッファリング(とリトライ)をともなった⾮同期処理 を⽐較的容易に実現することができる 33 Topic
Publisher Subscriber / Producer Subscriber / Producer Subscriber / Producer Subscriber / Producer Consumer Consumer Consumer Consumer Consumer Consumer Consumer Consumer Consumer Consumer Consumer Consumer Queue Queue Queue Queue