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.5k
AWS研修 Amazon SNSとAmazon SQS
2021年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 18, 2021
Tweet
Share
More Decks by Recruit
See All by Recruit
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
4
220
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
4
200
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.7k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
350
Browser
recruitengineers
PRO
12
3.9k
JavaScript 研修
recruitengineers
PRO
9
2.1k
TypeScript入門
recruitengineers
PRO
37
15k
モダンフロントエンド 開発研修
recruitengineers
PRO
16
8.1k
Webアクセシビリティ入門
recruitengineers
PRO
5
2.3k
Other Decks in Technology
See All in Technology
単一Kubernetesクラスタで実現する AI/ML 向けクラウドサービス
pfn
PRO
1
340
国産クラウドを支える設計とチームの変遷 “技術・組織・ミッション”
kazeburo
4
6.6k
FFMとJVMの実装から学ぶJavaのインテグリティ
kazumura
0
160
持続可能なアクセシビリティ開発
azukiazusa1
6
290
新しい風。SolidFlutterで実現するシンプルな状態管理
zozotech
PRO
0
130
Service Monitoring Platformについて
lycorptech_jp
PRO
0
330
プロダクト負債と歩む持続可能なサービスを育てるための挑戦
sansantech
PRO
1
680
自然言語でAPI作業を片付ける!「Postman Agent Mode」
nagix
0
120
Tomcatが起動しない!?SecureRandomと乱数デバイスの罠
fujikawa8
1
110
ステートレスなLLMでステートフルなAI agentを作る - YAPC::Fukuoka 2025
gfx
8
1.4k
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
15
5.6k
Redux → Recoil → Zustand → useSyncExternalStore: 状態管理の10年とReact本来の姿
zozotech
PRO
21
8.9k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Code Review Best Practice
trishagee
72
19k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Building Adaptive Systems
keathley
44
2.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
A Tale of Four Properties
chriscoyier
162
23k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Balancing Empowerment & Direction
lara
5
760
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
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