翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS メッセージ配信の再試行
Amazon SNS は、各配信プロトコルの配信ポリシーを定義します。配信ポリシーは、サーバー側のエラーが発生したとき (サブスクライブされたエンドポイントをホストするシステムが利用できなくなったとき) に Amazon SNS がメッセージの配信を再試行する方法を定義します。配信ポリシーが枯渇すると、Amazon SNS は配信の再試行を停止し、にデッドレターキューが添付されていない限り、メッセージを破棄します。詳細については、「Amazon SNS デッドレターキュー」を参照してください。
配信プロトコルとポリシー
注記
-
HTTP/S を除き、Amazon SNS で定義された配信ポリシーを変更することはできません。HTTP/S のみがカスタムポリシーをサポートしています。「HTTP/S 配信ポリシーの作成」を参照してください。
-
Amazon SNS は、配信の再試行にジッタリングを適用します。詳細については、『AWS アーキテクチャブログ』の「エクスポネンシャルバックオフとジッター
」を参照してください。 -
HTTP/S エンドポイントのポリシー再試行時間は、全体で 3,600 秒を超えることはできません。これはハード制限であり、時間を延長することはできません。
[エンドポイントタイプ] | 配信プロトコル | 即時の再試行 (遅延なし) 段階 | バックオフ前段階 | バックオフ段階 | バックオフ後段階 | 合計試行回数 |
---|---|---|---|---|---|---|
AWS マネージドエンドポイント | Amazon 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 | ||||||
モバイルプッシュ |
¹Firehose プロトコルのスロットリングエラーの場合、Amazon SNS はカスタマーマネージドエンドポイントと同じ配信ポリシーを使用します。
配信ポリシーの段階
次の図は、配信ポリシーの段階を示しています。

各配信ポリシーは、4 つの段階で構成されます。
-
即時再試行フェーズ (遅延なし) – このフェーズは、最初の配信試行の直後に発生します。この段階では再試行間の遅延時間はありません。
-
バックオフ前フェーズ – このフェーズは即時再試行フェーズに続きます。Amazon SNS は、バックオフ関数を適用する前に、この段階を使用して一連の再試行を試みます。この段階では、再試行回数と再試行間の遅延量を指定します。
-
バックオフフェーズ – このフェーズでは、retry-backoff 関数を使用して再試行間の遅延を制御します。この段階では、最小遅延、最大遅延、および遅延が最小遅延から最大遅延までどれだけ速く増加するかを定義する再試行バックオフ関数を設定します。バックオフ関数は、数論的、指数、幾何学的、または一次です。
-
バックオフ後フェーズ – このフェーズはバックオフフェーズに続きます。再試行回数とその間の遅延量を指定します。これが最終段階です。
HTTP/S 配信ポリシーの作成
Amazon SNS が HTTP/S エンドポイントへのメッセージ配信を再試行する方法は、遅延なし、バックオフ前、バックオフ後、およびバックオフ後の 4 つのフェーズで、配信ポリシーを使用して定義できます。このポリシーでは、デフォルトの再試行設定を上書きし、HTTP サーバーの容量に合わせてカスタマイズできます。
HTTP/S 配信ポリシーは、トピックレベルまたはサブスクリプションレベルで JSON オブジェクトとして定義できます。
-
トピックレベルのポリシー – トピックにリンクされたすべての HTTP/S サブスクリプションに適用されます。
CreateTopic
またはSetTopicAttributes
API アクションを使用して、このポリシーを設定します。 -
サブスクリプションレベルのポリシー – 特定のサブスクリプションにのみ適用されます。
Subscribe
またはSetSubscriptionAttributes
API アクションを使用して、このポリシーを設定します。
または、 AWS CloudFormation テンプレートで AWS::SNS::Subscription リソースを使用することもできます。
HTTP/S サーバーの容量に基づいて配信ポリシーをカスタマイズする必要があります。
-
すべてのサブスクリプションの単一サーバー – トピック内のすべての HTTP/S サブスクリプションが同じサーバーを使用している場合は、すべてのサブスクリプションで一貫性を確保するために、配信ポリシーをトピック属性として設定します。
-
サブスクリプションの異なるサーバー – サブスクリプションが異なるサーバーをターゲットにしている場合は、特定のサーバーの容量に合わせて、サブスクリプションごとに一意の配信ポリシーを作成します。
リクエストポリシーで Content-Type
ヘッダーを設定して、通知のメディアタイプを指定することもできます。デフォルトでは、Amazon SNS はコンテンツタイプが に設定されているすべての通知を HTTP/S エンドポイントに送信しますtext/plain; charset=UTF-8
。ただし、リクエストポリシーの headerContentTypeフィールドを使用して、このデフォルトを上書きできます。
次の JSON オブジェクトは、4 つのフェーズで構成された再試行を含む配信ポリシーを定義します。
-
遅延なしフェーズ – すぐに 3 回再試行します。
-
バックオフ前フェーズ – 1 秒間隔で 2 回再試行します。
-
バックオフフェーズ – 1~60 秒の指数関数的遅延で 10 回再試行します。
-
バックオフ後フェーズ – 60 秒間隔で 35 回再試行します。
Amazon SNS は、メッセージを破棄する前に、合計 50 回メッセージの配信を試みます。すべての再試行後に配信できないメッセージを保持するには、配信不能メッセージをデッドレターキュー (DLQ) に移動するようにサブスクリプションを設定します。詳細については、「Amazon SNS デッドレターキュー」を参照してください。
注記
この配信ポリシーでは、 maxReceivesPerSecond
プロパティを使用して、配信トラフィックをサブスクリプションごとに 1 秒あたり平均 10 件のメッセージにスロットリングします。このメカニズムは、HTTP/S エンドポイントが大量のトラフィックに悩まされるのを防ぐのに役立ちますが、平均配信率を維持するように設計されており、厳格な上限は適用されません。特に発行レートがスロットリング制限よりも大幅に高い場合、配信トラフィックが指定された制限を超えることがあります。
パブリッシュ (インバウンド) トラフィックが配信 (アウトバウンド) レートを超えると、メッセージのバックログが発生し、配信レイテンシーが高くなる可能性があります。このような問題を回避するには、maxReceivesPerSecond
値が HTTP/S サーバーの容量とワークロードの要件と一致していることを確認します。
注記
この配信ポリシーは、application/json
に対する HTTP/S 通知のデフォルトのコンテンツタイプをオーバーライドします。
{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "requestPolicy": { "headerContentType": "application/json" } }
配信ポリシーは、再試行ポリシー、スロットルポリシー、およびリクエストポリシーで構成されます。配信ポリシーには合計 9 つの属性があります。
ポリシー | 説明 | 制約事項 |
---|---|---|
minDelayTarget |
再試行の最小遅延。 単位: 秒 |
1 から最大遅延まで デフォルト: 20 |
maxDelayTarget |
再試行の最大遅延。 単位: 秒 |
最小遅延から 3,600 まで デフォルト: 20 |
numRetries |
即時再試行、バックオフ前再試行、バックオフ再試行、ポストバックオフ再試行の合計数。 | 0~100 デフォルト: 3 |
numNoDelayRetries |
即時に行う再試行の回数。再試行の間に遅延はありません。 | 0 以上 デフォルト: 0 |
numMinDelayRetries |
バックオフ前段階での再試行回数と、これらの間に指定された最小遅延時間。 | 0 以上 デフォルト: 0 |
numMaxDelayRetries |
バックオフ後段階での再試行回数と、その間の最大遅延。 | 0 以上 デフォルト: 0 |
backoffFunction |
再試行間のバックオフのモデル。 |
次の 4 つのオプションのいずれか。
デフォルト: linear |
maxReceivesPerSecond
|
サブスクリプションごとの 1 秒あたりのメッセージ配信の最大平均数。 | 1 以上 デフォルト: スロットリングなし (配信レートに制限なし) |
headerContentType
|
HTTP/S エンドポイントに送信される通知のコンテンツタイプ。 |
リクエストポリシーが定義されていない場合、コンテンツタイプはデフォルトで サブスクリプションに対する raw メッセージ配信が無効になっている場合 (デフォルト)、または配信ポリシーがトピックレベルで定義されている場合、サポートされるヘッダーコンテンツタイプは サブスクリプションに対する raw メッセージ配信を有効にすると、以下のコンテンツタイプがサポートされます。
|
Amazon SNS は、次の式を使用して、バックオフ段階での再試行回数を計算します。
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
バックオフフェーズ中の再試行の頻度は、次の 3 つのパラメータを使用して制御できます。
-
minDelayTarget
– バックオフフェーズの最初の再試行の遅延を設定します。 -
maxDelayTarget
– バックオフフェーズの最終再試行の遅延を設定します。 -
backoffFunction
– Amazon SNS が最初の再試行と最後の再試行の間のすべての再試行の遅延を計算するために使用するアルゴリズムを決定します。4 つの利用可能な再試行バックオフ関数から選択できます。
次の図は、さまざまな再試行バックオフ関数が、バックオフフェーズ中の再試行間の遅延にどのように影響するかを示しています。この例で使用される配信ポリシーには、合計再試行回数 10、最小遅延時間 5 秒、最大遅延時間 260 秒の設定が含まれます。
-
垂直軸は、再試行ごとの遅延 (秒単位) を示します。
-
横軸は、最初の試行から 10 番目の試行までの再試行シーケンスを表します。
