Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon SQSを勉強しなおしてみた

Amazon SQSを勉強しなおしてみた

2021/5/27 JAWS-UG朝会 #21 登壇資料

amarelo_n24

May 29, 2021
Tweet

More Decks by amarelo_n24

Other Decks in Technology

Transcript

  1. Amazon SQSを勉強しなおしてみた
    2021/5/27
    JAWS-UG朝会 #21

    View full-size slide

  2. 1.はじめに
    2.Amazon SQSの概要と各種設定
    3.SQSの実践チュートリアルをやってみた
    4.まとめ
    話すこと

    View full-size slide

  3. 1.はじめに

    View full-size slide

  4. 自己紹介
    氏名 :藤田 直幸
    twitter:@amarelo_n24
    ※ コーヒー焙煎人兼エンジニアと名乗ってます。
    職場:都内にある企業の情報セキュリティ統制担当
    資格:AWS認定クラウドプラクティショナー
    ソリューションアーキテクトアソシエイト
    ※現在、デベロッパーアソシエイトの勉強中
    好きなAWSサービス:AWS CLI、AWS CloudShell、Cloud9
    好きなコーヒー :ブラジル ブルボンアマレロ

    View full-size slide

  5. AWSの実務経験はおろか、開発経験もロクにないくせに、
    来月デベロッパーアソシエイトを受験しようとしていま
    す!!(申し込みはこれから)
    メッセージングサービスへの理解がまだまだ乏しかったた
    め、ちゃんと理解したい!と思い、SQSの勉強をして登壇
    もしようと思いました!
    ※他のサービスも「完全に理解」していません・・・

    View full-size slide

  6. 様々な参考文献を読んで資料を作りましたが、
    間違いなどあったらご指摘お願いします🙇

    View full-size slide

  7. 2.Amazon SQSの概要と各種設定

    View full-size slide

  8. ・フルマネージド型のメッセージキューイングサービス
    ・AWSサービスの中で最古のサービス(2004年サービスイン)
    ・マイクロサービス、分散システム、およびサーバーレスアプリ
    ケーションの切り離しとスケーリングが可能
    ・AWS KMS(Key Management Service)と連携して、サーバ側
    の暗号化することが可能
    ・メッセージの最大容量は256KB
    (1)Amazon SQSとは?

    View full-size slide

  9. SNS(Amazon Simple Notification Service)との違い
    ・SNSはプッシュ型通信
    SNS側がメッセージを発行してくる。
    (1)Amazon SQSとは?
    コンシューマー
    Amazon Simple Notification
    Service (Amazon SNS)

    View full-size slide

  10. SNS(Amazon Simple Notification Service)との違い
    ・SQSはプル型通信
    コンシューマーがキューにポーリングして、メッセージが
    キューの中にあれば取得できる。
    (1)Amazon SQSとは?
    コンシューマー
    Amazon Simple Queue
    Service (Amazon SQS)

    View full-size slide

  11. ①標準キュー
    ・1秒あたりのトランザクション数はほぼ無制限。
    ・少なくとも1回のメッセージ配信を保証。
    ・同一メッセージが2回配信される可能性がある。
    ・メッセージの配信順序を保証していない。
    ※ほぼ無制限のスループットを可能にする高度に分散
    されたアーキテクトのため。
    (2)キュータイプ

    View full-size slide

  12. 重複実行しない設計
    ・一度メッセージを受信して処理を実行したことを
    DynamoDBに記録する。
    冪等性を確保するアプリケーション設計
    ・同じメッセージを受信して処理を実行したとしても、
    結果がまったく変わらないようにする。
    ※標準キューが2回以上配信された場合の設計

    View full-size slide

  13. ②FIFO(First-in-first-out)キュー
    ・メッセージの配信順序を保証する。
    ⇒操作とイベントの順序が重要な場合、メッセージの重複が
    許容されない場合に使用する。
    ・メッセージ重複排除IDを使って重複を防ぐ設計がされている。
    ・1秒あたりのトランザクション数
    バッチ処理なし:300件
    バッチ処理あり:3000件
    (2)キュータイプ

    View full-size slide

  14. AWS CLIでFIFOキューを作成する場合
    sqs create-queue コマンドのオプション
    --attributes FifoQueue=true を指定することで設定可能。
    (2)キュータイプ

    View full-size slide

  15. マネコンからも、FIFOキューで作成されたこと確認。
    (2)キュータイプ

    View full-size slide

  16. ①ショートポーリング
    ・デフォルトのポーリング設定
    ・メッセージの有無に関わらず即レスする。
    ・分散されたメッセージからサンプリングされたサーバの
    メッセージを応答するため、メッセージ取得できないことも。
    ・APIの呼び出し回数が多くコストが高くなる。
    (3)ポーリング

    View full-size slide

  17. ②ロングポーリング
    ・メッセージがない場合は設定されたタイムアウト値が
    過ぎるまで、レスポンスしない。
    ・すべてのサーバをクエリし、メッセージを応答する。
    ・複数のキューをポーリングする必要がない場合に選択する。
    ※通常はこちらを使うことが多い。
    (3)ポーリング

    View full-size slide

  18. 2021/5/26現在の設定画面 ロングポーリング設定
    (3)ポーリング

    View full-size slide

  19. AWS CLIの場合
    sqs set-queue-attributes コマンドのオプション
    --attributes ReceiveMessageWaitTimeSeconds=(秒数)で設定
    (3)ポーリング

    View full-size slide

  20. コンシューマーがメッセージを受け取った直後、他のコンシューマ
    ーがメッセージを再度処理するのを防ぐために設定するタイムアウ
    ト値。
    デフォルト:30秒
    最大値 :12時間
    最小値 :0秒
    (4)可視性タイムアウト(Visibility Timeout)

    View full-size slide

  21. コンシューマーがメッセージを受信しても、キューから自動的に削
    除されない。可視性タイムアウトを設定していないと、他のコンシ
    ューマーがメッセージを受信できてしまい、重複処理が起こる恐れ
    がある。
    (4)可視性タイムアウト(Visibility Timeout)
    可視性タイムアウトを
    1分と設定した場合は、
    その間メッセージの受
    信をできない。

    View full-size slide

  22. 2021/5/26現在の設定画面
    (4)可視性タイムアウト(Visibility Timeout)

    View full-size slide

  23. AWS CLIの場合
    sqs set-queue-attributes コマンドのオプション
    --attributes VisibilityTimeout=(秒数)で設定
    (4)可視性タイムアウト(Visibility Timeout)

    View full-size slide

  24. メッセージをキューに送信してから、一定時間後にメッセージを受
    信できるようにする機能。キュー全体に設定をする。
    メッセージの処理を一定時間を遅延させて実行させたい場合に利用。
    (5)遅延キュー
    プロデューサー 10秒前のコンシューマー
    10秒後のコンシューマー
    遅延キュー10秒と設定。

    View full-size slide

  25. 2021/5/26現在の設定画面
    (5)遅延キュー

    View full-size slide

  26. AWS CLIの場合
    sqs set-queue-attributes コマンドのオプション
    --attributes DelaySeconds=(秒数) で設定
    (5)遅延キュー

    View full-size slide

  27. メッセージ送信後、一定時間経過してからメッセージ受信可能とす
    る機能。メッセージ単体に設定する。遅延キューとこれを一緒に設
    定していても、メッセージタイマーが優先される。
    (6)メッセージタイマー
    プロデューサー コンシューマー
    メッセージタイマー
    10秒と設定。
    このメッセージのみ
    10秒間はおあずけ状態

    View full-size slide

  28. 2021/5/26現在の設定画面
    (6)メッセージタイマー

    View full-size slide

  29. AWS CLIの場合
    sqs send-message コマンドのオプション
    --delay-seconds (秒数) で設定
    (6)メッセージタイマー

    View full-size slide

  30. 正しく処理できないメッセージをキュー内に残し続けないよう、
    他のキューに移動させる機能。
    (7)デッドレターキュー
    プロデューサー コンシューマー
    最大受信数を超えたら、デ
    ッドレターキューに移動

    View full-size slide

  31. キュー設定画面にて、最大受信数(maxRecieveCount)を設定。
    (7)デッドレターキュー

    View full-size slide

  32. 3.SQSの実践的ハンズオンをやってみた

    View full-size slide

  33. SQSの実践的チュートリアルより
    ファンアウトイベントの送信をやってみました。
    ※実践的チュートリアル:ファンアウトイベント通知を送信する
    https://aws.amazon.com/jp/getting-started/hands-on/send-fanout-event-notifications/

    View full-size slide

  34. メッセージの並行受信を可能にするキュー設計
    ある処理をトリガにして、並行してLambda関数を実行させる
    といった要件の場合に設計する。
    ファンアウト構成
    Amazon Simple Notification
    Service (Amazon SNS)
    AWS Lambda

    View full-size slide

  35. ※属性はすべてデフォルトで設定。
    標準キューを2つ作成

    View full-size slide

  36. キューを2つ作成後、SNSトピックにサブスクライブ設定。
    SNSトピックにサブスクライブ

    View full-size slide

  37. サブスクライブ先のSNSトピックを選択

    View full-size slide

  38. サブスクライブ完了

    View full-size slide

  39. サブスクライブ完了

    View full-size slide

  40. SNSからメッセージ送信

    View full-size slide

  41. 作成した2つのキーにメッセージが送信された。

    View full-size slide

  42. 4.最後に

    View full-size slide

  43. ・Amazon SQSはフルマネージド型のメッセージキューイング
    サービスであり、システム連携を疎結合にすることが可能で
    あること。
    ・可視性タイムアウトやメッセージタイマーなど、メッセージ
    取得制限をすることが可能であり、マネコンとAWS CLIで
    設定方法。
    ・SNSと組み合わせたファンアウト設計で並列処理可能で
    あること。
    話したこと

    View full-size slide

  44. ポケットスタディ AWS認定デベロッパーアソシエイト
    https://www.shuwasystem.co.jp/book/9784798063409.html
    AWS認定資格試験テキスト
    AWS認定ソリューションアーキテクトアソシエイト(初版の方)
    https://www.sbcr.jp/product/4815607388/
    AWS開発者ガイド
    https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuid
    e/welcome.html
    AWS CLI Command Reference
    https://docs.aws.amazon.com/cli/latest/reference/sqs/
    参考文献

    View full-size slide