AWS メッセージングサービスによる疎結合
AWS でのアプリケーション開発
Ricardo Sueiras
Principal Technologist
Amazon SQS の基本

- トラフィックの急増をプロデューサーとは独立して処理します。
- 非同期メッセージングのためのマネージド型メッセージキューです。
- プロデューサーはキューにメッセージを送信します。
- コンシューマーはキューからメッセージを取得します。
- メッセージはコンシューマーが受け取るまで保持されます。
- 保持期間: デフォルト 4 日、最大 14 日。
- コンシューマーはキューをポーリングし、独自のペースで処理します。
メッセージの可視性
- コンシューマーが読み取ると、メッセージは非表示になります。
- 可視性タイムアウトで非表示の継続時間を制御します。
- 処理に失敗し、メッセージが削除されない場合:
- 再び表示状態になります。
- 再処理が可能になります。
- 可視性タイムアウト: デフォルト 30 秒。
- 最大可視性タイムアウトは 12 時間です。
メッセージサイズ
- メッセージの最大サイズは 256KB です。
- SQS Extended Client ライブラリを使うと、より大きなメッセージを扱えます。
- 大きなペイロードは Amazon S3 に保存されます。
- メッセージペイロードには S3 へのポインターが含まれます。
ショートポーリング
- ポーリング方式はコストと効率に影響します。
- ショートポーリングがデフォルトです。
- SQS サーバーの一部に問い合わせ、即座に結果を返します。
- メッセージがあっても空の結果が返る場合があります。
- API 呼び出し回数が増え、コストが高くなります。
ロングポーリング
- ロングポーリングはすべての SQS サーバーに問い合わせます。
- メッセージを最大 20 秒待ちます。
- 不要な空レスポンスをなくします。
- API 呼び出し回数を減らし、コストを削減します。
スタンダードキュー
- SQS には 2 種類のキューがあります。
- スタンダードキュー:
- 1 回以上の配信保証。
- ベストエフォート順序。
- ほぼ無制限のスループット。
FIFO キュー
- FIFO キュー:
- 1 回のみの処理保証。
- 厳密なメッセージ順序。
- 重複排除機能を内蔵。
- デフォルト 300 TPS
- バッチ処理で 3,000、高スループットモードでさらに増加。
- ユースケースに応じてキュータイプを選択:
- スケールとスループットにはスタンダード。
- 順序保証と重複排除には FIFO。
問題のあるメッセージへの対処
- デッドレターキュー(DLQ)は処理に失敗したメッセージを保存します。
maxReceiveCount を超えたメッセージは DLQ に移動します。
- これにより、問題のあるメッセージの無限リトライを防ぎます。
- DLQ はソースキューと同じキュータイプである必要があります。
- 再処理するにはメッセージをソースキューに戻します。
キューのセキュリティ
- 転送中はデフォルトで HTTPS により暗号化されます。
- 保存データは AWS KMS によるサーバーサイド暗号化が適用されます。
- AWS Encryption SDK でペイロードをクライアントサイドで暗号化できます。
- IAM ポリシーで SQS キューへのアクセスを制御します。
- リソースベースポリシーでキュー単位の細かいアクセス制御が可能です。
Amazon SNS の基本
- マネージド型のパブリッシュ/サブスクライブ(pub/sub)サービスです。
- プッシュモデルを使用します。
- パブリッシャーはトピックにメッセージを送信します。
- コンシューマーはトピックをサブスクライブします。
- サブスクライバーはメッセージを受動的に受信します。
スケール
- トピックあたり最大 1,250 万サブスクリプションをサポートします。
- メッセージは保持されません:
- サブスクライバーが利用できない場合、メッセージは失われます。
- メッセージの損失を防ぐには DLQ または永続サブスクライバー(SQS キュー)を使用します。
- 1 つのイベントを多数のコンシューマーに配信します(ファンアウト)。
メッセージフィルタリング
- SNS はメッセージフィルタリングポリシーをサポートします。
- サブスクリプションは必要なメッセージのみを受信します。
- フィルターがない場合、サブスクリプションはすべてのメッセージを受信します。
- フィルターポリシーはトピックではなく、サブスクリプション単位で適用されます。
フィルターのロジックと評価
- フィルターは JSON で定義します。
- メッセージ属性と照合されます。
- 複数の条件は AND で評価されます。
- 条件内の複数の値は OR で評価されます。
- 多様なフィルター操作をサポートしています:
- 完全一致文字列、数値、プレフィックス、除外、範囲一致。
SNS のセキュリティ
- 転送中はデフォルトで HTTPS によりデータを暗号化します。
- 保存データは AWS KMS によるサーバーサイド暗号化が適用されます。
- IAM ポリシーでアクセス制御を行います。
- トピックへのパブリッシュやサブスクライブを管理します。
練習しましょう!
AWS でのアプリケーション開発
Preparing Video For Download...