AWS メッセージングサービスによる疎結合

AWS でのアプリケーション開発

Ricardo Sueiras

Principal Technologist

Amazon SQS の基本

 

sqs overview

  • トラフィックの急増をプロデューサーとは独立して処理します。
  • 非同期メッセージングのためのマネージド型メッセージキューです。
  • プロデューサーはキューにメッセージを送信します。
  • コンシューマーはキューからメッセージを取得します。
  • メッセージはコンシューマーが受け取るまで保持されます。
  • 保持期間: デフォルト 4 日、最大 14 日。
  • コンシューマーはキューをポーリングし、独自のペースで処理します。
AWS でのアプリケーション開発

メッセージの可視性

  • コンシューマーが読み取ると、メッセージは非表示になります。
  • 可視性タイムアウトで非表示の継続時間を制御します。
  • 処理に失敗し、メッセージが削除されない場合:
    • 再び表示状態になります。
    • 再処理が可能になります。
  • 可視性タイムアウト: デフォルト 30 秒。
  • 最大可視性タイムアウトは 12 時間です。

 

message visibility

AWS でのアプリケーション開発

メッセージサイズ

 

image size

  • メッセージの最大サイズは 256KB です。
  • SQS Extended Client ライブラリを使うと、より大きなメッセージを扱えます。
  • 大きなペイロードは Amazon S3 に保存されます。
  • メッセージペイロードには S3 へのポインターが含まれます。
AWS でのアプリケーション開発

ショートポーリング

  • ポーリング方式はコストと効率に影響します。
  • ショートポーリングがデフォルトです。
  • SQS サーバーの一部に問い合わせ、即座に結果を返します。
  • メッセージがあっても空の結果が返る場合があります。
  • API 呼び出し回数が増え、コストが高くなります。

 

polling

AWS でのアプリケーション開発

ロングポーリング

  • ロングポーリングはすべての SQS サーバーに問い合わせます。
  • メッセージを最大 20 秒待ちます。
  • 不要な空レスポンスをなくします。
  • API 呼び出し回数を減らし、コストを削減します。

 

polling

AWS でのアプリケーション開発

スタンダードキュー

  • SQS には 2 種類のキューがあります。
  • スタンダードキュー:
    • 1 回以上の配信保証。
    • ベストエフォート順序。
    • ほぼ無制限のスループット。

 

queue types

AWS でのアプリケーション開発

FIFO キュー

 

queue types

  • FIFO キュー:
    • 1 回のみの処理保証。
    • 厳密なメッセージ順序。
    • 重複排除機能を内蔵。
  • デフォルト 300 TPS
    • バッチ処理で 3,000、高スループットモードでさらに増加。
  • ユースケースに応じてキュータイプを選択:
    • スケールとスループットにはスタンダード。
    • 順序保証と重複排除には FIFO。
AWS でのアプリケーション開発

問題のあるメッセージへの対処

 

dlq

  • デッドレターキュー(DLQ)は処理に失敗したメッセージを保存します。
  • maxReceiveCount を超えたメッセージは DLQ に移動します。
  • これにより、問題のあるメッセージの無限リトライを防ぎます。
  • DLQ はソースキューと同じキュータイプである必要があります。
  • 再処理するにはメッセージをソースキューに戻します。
AWS でのアプリケーション開発

キューのセキュリティ

 

securing SQS

  • 転送中はデフォルトで HTTPS により暗号化されます。
  • 保存データは AWS KMS によるサーバーサイド暗号化が適用されます。
  • AWS Encryption SDK でペイロードをクライアントサイドで暗号化できます。
  • IAM ポリシーで SQS キューへのアクセスを制御します。
  • リソースベースポリシーでキュー単位の細かいアクセス制御が可能です。
AWS でのアプリケーション開発

Amazon SNS の基本

  • マネージド型のパブリッシュ/サブスクライブ(pub/sub)サービスです。
  • プッシュモデルを使用します。
  • パブリッシャーはトピックにメッセージを送信します。
    • メッセージの最大サイズは 256KB です。
  • コンシューマーはトピックをサブスクライブします。
  • サブスクライバーはメッセージを受動的に受信します。

 

sns overview

AWS でのアプリケーション開発

スケール

  • トピックあたり最大 1,250 万サブスクリプションをサポートします。
  • メッセージは保持されません:
    • サブスクライバーが利用できない場合、メッセージは失われます。
    • メッセージの損失を防ぐには DLQ または永続サブスクライバー(SQS キュー)を使用します。
  • 1 つのイベントを多数のコンシューマーに配信します(ファンアウト)。

 

scaling sns

AWS でのアプリケーション開発

メッセージフィルタリング

  • SNS はメッセージフィルタリングポリシーをサポートします。
  • サブスクリプションは必要なメッセージのみを受信します。
  • フィルターがない場合、サブスクリプションはすべてのメッセージを受信します。
  • フィルターポリシーはトピックではなく、サブスクリプション単位で適用されます。

 

filter

AWS でのアプリケーション開発

フィルターのロジックと評価

 

filter polices

  • フィルターは JSON で定義します。
  • メッセージ属性と照合されます。
  • 複数の条件は AND で評価されます。
  • 条件内の複数の値は OR で評価されます。
  • 多様なフィルター操作をサポートしています:
    • 完全一致文字列、数値、プレフィックス、除外、範囲一致。
AWS でのアプリケーション開発

SNS のセキュリティ

 

sns security

  • 転送中はデフォルトで HTTPS によりデータを暗号化します。
  • 保存データは AWS KMS によるサーバーサイド暗号化が適用されます。
    • SNS に KMS キーの使用権限を付与します。
  • IAM ポリシーでアクセス制御を行います。
    • トピックへのパブリッシュやサブスクライブを管理します。
AWS でのアプリケーション開発

練習しましょう!

AWS でのアプリケーション開発

Preparing Video For Download...