Amazon SNS メッセージ配信の再試行
Amazon SNS は、各配信プロトコルの配信ポリシーを定義します。配信ポリシーは、サーバー側のエラーが発生したとき (サブスクライブされたエンドポイントをホストするシステムが利用できなくなったとき) に Amazon SNS がメッセージの配信を再試行する方法を定義します。配信ポリシーが枯渇すると、Amazon SNS は配信の再試行を停止し、にデッドレターキューが添付されていない限り、メッセージを破棄します。詳細については、「Amazon SNS デッドレターキュー (DLQ)」を参照してください。
配信プロトコルとポリシー
-
HTTP/S を除き、Amazon SNS で定義された配信ポリシーを変更することはできません。HTTP/S のみがカスタムポリシーをサポートしています。「HTTP/S 配信ポリシーの作成」を参照してください。
-
Amazon SNS は、配信の再試行にジッタリングを適用します。詳細については、『AWS アーキテクチャブログ』の「エクスポネンシャルバックオフとジッター
」を参照してください。 HTTP/S エンドポイントのポリシー再試行時間は、全体で 3,600 秒を超えることはできません。これはハード制限であり、時間を延長することはできません。
エンドポイントタイプ | 配信プロトコル | 即時の再試行 (遅延なし) 段階 | バックオフ前段階 | バックオフ段階 | バックオフ後段階 | 合計試行回数 |
---|---|---|---|---|---|---|
AWS が管理するエンドポイント | Amazon Kinesis Data Firehose | 3 回、遅延なし | 2 回、1 秒間隔で | 10 回、エクスポネンシャルバックオフで 1 秒から 20 秒まで | 100,000 回、20 秒間隔で | 100,015 回、23 日間 |
AWS Lambda | ||||||
Amazon SQS | ||||||
カスタマー管理のエンドポイント | SMTP | 0 回、遅延なし | 2 回、10 秒間隔で | 10 回、エクスポネンシャルバックオフで 10 秒から 600 秒まで (10 分) | 38 回、600 秒 (10 分) 間隔で | 50 回、6 時間以上 |
SMS | ||||||
モバイルプッシュ |
¹ Kinesis Data Firehose プロトコルのスロットリングエラーの場合、Amazon SNS はカスタマーマネージドエンドポイントと同じ配信ポリシーを使用します。
配信ポリシーの段階
次の図は、配信ポリシーの段階を示しています。

各配信ポリシーは、4 つの段階で構成されます。
-
即時の再試行段階(遅延なし) - この段階は遅延なしの段階とも呼ばれ、最初の配信の試行の直後に発生します。この段階では再試行間の遅延時間はありません。
-
バックオフ前段階 - この段階は即時の再試行段階の後に続きます。Amazon SNS は、バックオフ関数を適用する前に、この段階を使用して一連の再試行を試みます。この段階では、再試行回数と再試行間の遅延量を指定します。
-
バックオフ段階 - この段階では、再試行バックオフ関数を使用して、再試行間の遅延を制御します。この段階では、最小遅延、最大遅延、および遅延が最小遅延から最大遅延までどれだけ速く増加するかを定義する再試行バックオフ関数を設定します。バックオフ関数は、数論的、指数、幾何学的、または一次です。
-
バックオフ後段階 - この段階はバックオフ段階の後に続きます。再試行回数とその間の遅延量を指定します。これが最終段階です。
HTTP/S 配信ポリシーの作成
配信ポリシーとその 4 つの段階を使用して、Amazon SNS が HTTP/S エンドポイントへのメッセージ配信を再試行する方法を定義できます。Amazon SNS では、HTTP サーバーの容量に基づいてポリシーをカスタマイズする場合など、HTTP エンドポイントのデフォルトの再試行ポリシーを上書きできます。
HTTP/S 配信ポリシーは、サブスクリプションレベルまたはトピックレベルで JSON オブジェクトとして設定できます。トピックレベルでポリシーを定義すると、そのトピックに関連付けられたすべての HTTP/S サブスクリプションに適用されます。
HTTP/S サーバーの容量に応じて配信ポリシーをカスタマイズする必要があります。ポリシーは、トピック属性またはサブスクリプション属性として設定できます。トピック内のすべての HTTP/S サブスクリプションが同じ HTTP/S サーバーをターゲットにする場合は、トピックのすべての HTTP/S サブスクリプションで有効になるように、配信ポリシーをトピック属性として設定することをお勧めします。それ以外の場合は、ポリシーがターゲットとする HTTP/S サーバーの容量に応じて、トピック内の HTTP/S サブスクリプションごとに配信ポリシーを作成する必要があります。
次の JSON オブジェクトは、失敗した HTTP/S 配信を再試行するように Amazon SNS に次のように指示する配信ポリシーを表します。
-
遅延なし段階ですぐに 3 回
-
バックオフ前段階で 2 回 (1 秒間隔で)
-
10 回 (1 秒から 60 秒までのエクスポネンシャルバックオフで)
-
バックオフ後段階で 35 回 (60 秒間隔で)
このサンプル配信ポリシーでは、Amazon SNS は合計 50 回試行してからメッセージを破棄します。配信ポリシーで指定された再試行を実行し尽くした後もメッセージを保持するには、配信不能メッセージをデッドレターキュー (DLQ) に移動するようにサブスクリプションを構成します。詳細については、「Amazon SNS デッドレターキュー (DLQ)」を参照してください。
また、この配信ポリシーでは、maxReceivesPerSecond
を使用して、配信を毎秒 10 以下に抑えるよう Amazon SNS に指示しています。このセルフスロットリングレートでは、配信された (アウトバウンドトラフィック) よりも多くのメッセージ (インバウンドトラフィック) が公開される可能性があります。インバウンドトラフィックがアウトバウンドトラフィックよりも多い場合、サブスクリプションによって大きなメッセージバックログが蓄積され、メッセージ配信のレイテンシーが高くなる可能性があります。配信ポリシーでは、必ず maxReceivesPerSecond
ワークロードに悪影響を与えない値を指定してください。
{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "sicklyRetryPolicy": null, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "guaranteed": false }
配信ポリシーは、再試行ポリシーとスロットルポリシーで構成されます。配信ポリシーには、合計で 8 つの属性があります。
ポリシー | 説明 | 制約事項 |
---|---|---|
minDelayTarget |
再試行の最小遅延。 単位: 秒 |
1 から最大遅延まで デフォルト: 20 |
maxDelayTarget |
再試行の最大遅延。 単位: 秒 |
最小遅延から 3,600 まで デフォルト: 20 |
numRetries |
即時再試行、バックオフ前再試行、バックオフ再試行、ポストバックオフ再試行の合計数。 | 0~100 デフォルト: 3 |
numMaxDelayRetries |
バックオフ後段階での再試行回数と、その間の最大遅延。 | 0 以上 デフォルト: 0 |
numNoDelayRetries |
即時に行う再試行の回数。再試行の間に遅延はありません。 | 0 以上 デフォルト: 0 |
numMinDelayRetries |
バックオフ前段階での再試行回数と、これらの間に指定された最小遅延時間。 | 0 以上 デフォルト: 0 |
backoffFunction |
再試行間のバックオフのモデル。 |
次の 4 つのオプションのいずれか。
デフォルト: linear |
sicklyRetryPolicy |
この属性は廃止されました。これは、下位互換性を維持するためにのみ残されています。 |
デフォルト: null |
guaranteed |
この属性は廃止されました。これは、下位互換性を維持するためにのみ残されています。 |
デフォルト: false |
maxReceivesPerSecond
|
サブスクリプションごとの 1 秒あたりの配信の最大数。 | 1 以上 デフォルト: スロットリングなし |
Amazon SNS は、次の式を使用して、バックオフ段階での再試行回数を計算します。
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
3 つのパラメータを使用して、バックオフ段階での再試行の頻度を制御できます。
-
minDelayTarget
- バックオフ段階の最初の再試行に関連する遅延を定義します。 -
maxDelayTarget
- バックオフ段階の最後の再試行に関連する遅延を定義します。 -
backoffFunction
- バックオフ段階の最初の再試行と最後の再試行の間のすべての再試行に関連する遅延時間を計算するために Amazon SNS で使用されるアルゴリズムを定義します。4 つの再試行バックオフ関数の 1 つを使用できます。
次の図は、各再試行バックオフ関数が、バックオフ段階での再試行に関連する遅延にどのように影響するかを示しています。再試行の合計回数を 10、最小遅延を 5 秒、最大遅延を 260 秒に設定した配信ポリシーです。縦軸は、10 回ごとの再試行に関連する遅延時間を秒単位で表します。横軸は、最初の試行から 10 回目の試行までの再試行回数を表します。
