Amazon SNS メッセージ配信の再試行 - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 はカスタマーマネージドエンドポイントと同じ配信ポリシーを使用します。

配信ポリシーの段階

次の図は、配信ポリシーの段階を示しています。

X Y 軸図では、Time が X 軸、Initial Delivery Attempt が Y 軸として表示されています。配信ポリシーは、Y 軸の即時の再試行段階から始まり、X 軸上でバックオフ前段階、バックオフ段階、バックオフ後段階と続きます。

各配信ポリシーは、4 つの段階で構成されます。

  1. 即時再試行フェーズ (遅延なし) – このフェーズは、最初の配信試行の直後に発生します。この段階では再試行間の遅延時間はありません。

  2. バックオフ前フェーズ – このフェーズは即時再試行フェーズに続きます。Amazon SNS は、バックオフ関数を適用する前に、この段階を使用して一連の再試行を試みます。この段階では、再試行回数と再試行間の遅延量を指定します。

  3. バックオフフェーズ – このフェーズでは、retry-backoff 関数を使用して再試行間の遅延を制御します。この段階では、最小遅延、最大遅延、および遅延が最小遅延から最大遅延までどれだけ速く増加するかを定義する再試行バックオフ関数を設定します。バックオフ関数は、数論的、指数、幾何学的、または一次です。

  4. バックオフ後フェーズ – このフェーズはバックオフフェーズに続きます。再試行回数とその間の遅延量を指定します。これが最終段階です。

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 つのフェーズで構成された再試行を含む配信ポリシーを定義します。

  1. 遅延なしフェーズ – すぐに 3 回再試行します。

  2. バックオフ前フェーズ – 1 秒間隔で 2 回再試行します。

  3. バックオフフェーズ – 1~60 秒の指数関数的遅延で 10 回再試行します。

  4. バックオフ後フェーズ – 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 エンドポイントに送信される通知のコンテンツタイプ。

リクエストポリシーが定義されていない場合、コンテンツタイプはデフォルトで text/plain; charset=UTF-8 に設定されます。

サブスクリプションに対する raw メッセージ配信が無効になっている場合 (デフォルト)、または配信ポリシーがトピックレベルで定義されている場合、サポートされるヘッダーコンテンツタイプは application/json および text/plain です。

サブスクリプションに対する raw メッセージ配信を有効にすると、以下のコンテンツタイプがサポートされます。

  • text/css

  • text/csv

  • text/html

  • text/plain

  • text/xml

  • application/atom+xml

  • application/json

  • application/octet-stream

  • application/soap+xml

  • application/x-www-form-urlencoded

  • application/xhtml+xml

  • application/xml

Amazon SNS は、次の式を使用して、バックオフ段階での再試行回数を計算します。

numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries

バックオフフェーズ中の再試行の頻度は、次の 3 つのパラメータを使用して制御できます。

  • minDelayTarget – バックオフフェーズの最初の再試行の遅延を設定します。

  • maxDelayTarget – バックオフフェーズの最終再試行の遅延を設定します。

  • backoffFunction – Amazon SNS が最初の再試行と最後の再試行の間のすべての再試行の遅延を計算するために使用するアルゴリズムを決定します。4 つの利用可能な再試行バックオフ関数から選択できます。

次の図は、さまざまな再試行バックオフ関数が、バックオフフェーズ中の再試行間の遅延にどのように影響するかを示しています。この例で使用される配信ポリシーには、合計再試行回数 10最小遅延時間 5 秒最大遅延時間 260 秒の設定が含まれます。

  • 垂直軸は、再試行ごとの遅延 (秒単位) を示します。

  • 横軸は、最初の試行から 10 番目の試行までの再試行シーケンスを表します。

この図は、指数関数、算術関数、線形関数、ジオメトリ関数の 4 つのバックオフ関数に基づいて、再試行が 10 回の試行でどのように遅延するかを示しています。各色付きの線は、関数の遅延パターンを表します。指数関数的: 急速に増加し、最も速い最大遅延に達し、線形: 再試行ごとに着実に増加、算術およびジオメトリ: 中程度の増加を示し、線形よりも急勾配ですが、指数関数的よりも速くは低下します。すべての行は最小遅延 5 秒近くから始まり、10 回目の再試行で最大遅延 260 秒に近づきます。