Amazon Simple Notification Service
開発者ガイド

HTTP/HTTPS エンドポイントに対する Amazon SNS 配信再試行ポリシーの設定

HTTP/HTTPS エンドポイントへの Amazon SNS の配信が成功するためには、複数回の試行が必要となる場合があります。これが発生するのは、たとえばサブスクライブしたエンドポイントがメンテナンスのためにダウンしている場合や、トラフィックが混雑している場合です。最初の配信の試行で受信者からの正常な応答がない場合、Amazon SNS はそのメッセージの配信をもう一度試みます。そのような試みを再試行と呼びます。つまり、再試行は最初に配信を試みた後に発生する配信の試みです。

Amazon SNS は、配信試行の失敗後にのみ再試行を開始します。Amazon SNS は、以下の状況を配信試行の失敗を示すとみなします。

  • HTTP ステータスコード 100 〜 101 および 500 〜 599 (両端の値を含む)。

    注記

    Amazon SNS は、HTTP ステータスコード 400 〜 499 を永続的な配信エラーを示すとみなします。

  • リクエストのタイムアウト (15 秒)。リクエストのタイムアウトが発生した場合は、次の再試行がタイムアウトの後に指定された間隔で発生します。たとえば、再試行間隔が 20 秒で、リクエストがタイムアウトした場合、次のリクエストの開始はタイムアウトしたリクエストの開始から 35 秒後になります。

  • 接続タイムアウト、エンドポイントの到達不可能、不適切な SSL 証明書などの接続エラー。

配信ポリシーを使用すると、再試行の合計数をコントロールできるだけでなく、再試行の間の遅延時間もコントロールできます。4 つの個別の段階において、最大 100 回の再試行を指定できます。システムのメッセージの最大有効期間は 1 時間です。この 1 時間の制限は、配信ポリシーで延長することはできません。


          Amazon SNS 配信ポリシーの 4 段階のグラフィック。
  1. 即時の再試行段階 この段階は遅延なしの段階とも呼ばれ、最初の配信の試行の直後に発生します。[Retries with no delay] に設定する値により、最初の配信の試行直後の再試行回数が決まります。この段階では再試行間の遅延時間はありません。

  2. バックオフ前段階バックオフ前段階が、即時の再試行段階に続きます。バックオフ関数が再試行に適用される前に発生する一連の再試行を作成するには、この段階を使用します。バックオフ前段階の再試行回数を指定するには、[Minimum delay retries] を使用します。この段階での再試行の間の遅延時間をコントロールするには、[Minimum delay (最小遅延)] 設定を使用します。

  3. バックオフ段階 再試行バックオフ関数を使用してこの段階の再試行の間の遅延時間をコントロールできるため、この段階はバックオフ段階と呼ばれます。[Minimum delay] および [Maximum delay] を設定し、[Retry backoff function] を選択して、最小遅延時間から最大遅延時間まで遅延時間を増やす間隔を定義します。

  4. バックオフ後段階 バックオフ段階の次にバックオフ後段階が続きます。バックオフ後段階の再試行回数を指定するには、[Maximum delay retries] 設定を使用します。この段階の再試行の間の遅延時間をコントロールするには、[Maximum delay (最大遅延)] 設定を使用できます。

バックオフ段階は、最もよく使用される段階です。配信ポリシーが設定されていない場合、デフォルトでは、バックオフ段階で 3 回再試行が行われ、再試行の間の遅延時間は 20 秒になります。[Minimum delay] と [Maximum delay] の両方のデフォルト値は 20 です。デフォルトの再試行回数は 3 です。したがって、デフォルトの再試行ポリシーでは 20 秒の再試行の遅延時間で合計 3 回再試行が行われます。次の図は、それぞれの再試行に関連する遅延時間を示しています。


          Amazon SNS のデフォルト配信ポリシーのグラフィック。

再試行バックオフ関数による再試行の間の遅延時間への影響を確認するには、最大遅延時間を 40 秒に設定し、残りの設定をデフォルト値のままにします。この変更により、配信ポリシーではバックオフ段階中に 3 回の再試行、20 秒の最小遅延時間、および 40 秒の最大遅延時間が指定されます。デフォルトのバックオフ関数は線形なので、メッセージ間の遅延はバックオフ段階中に一定の割合で増加します。Amazon SNS は 20 秒後に最初の再試行、30 秒後に 2 回目の再試行、40 秒後に最後の再試行を開始します。次の図は、それぞれの再試行に関連する遅延時間を示しています。


          最大遅延時間が 40 に設定されている Amazon SNS のデフォルト配信ポリシーのグラフィック。

システムのメッセージの最大有効期間は 1 時間です。この 1 時間の制限は、配信ポリシーで延長することはできません。

注記

HTTP および HTTPS のサブスクリプションタイプのみが配信ポリシーでサポートされています。Amazon SNS の他のサブスクリプションタイプ(E メール、Amazon SQS、SMS など)のサポートは現在行われていません。

トピックおよびサブスクリプションへの配信ポリシーの適用

Amazon SNS トピックに配信ポリシーを適用できます。トピックに配信ポリシーを設定する場合、ポリシーはトピックのすべてのサブスクリプションに適用されます。次の図は、トピックに関連付けられた 3 つすべてのサブスクリプションに適用する配信ポリシーを持つトピックを示しています。


            3 つの HTTP サブスクリプションおよびトピック配信ポリシーを持つ Amazon SNS トピック。

個々のサブスクリプションに配信ポリシーを適用することもできます。サブスクリプションに配信ポリシーを割り当てると、サブスクリプションレベルのポリシーがトピックレベルの配信ポリシーよりも優先されます。次の図では、1 つのサブスクライブリプションにサブスクリプションレベルの配信ポリシーがあり、他の 2 つのサブスクリプションにはこのポリシーがありません。


            3 つの HTTP サブスクリプション、トピックの配信ポリシー、および 1 つのサブスクリプション配信ポリシーを持つ Amazon SNS トピック。

場合によっては、すべてのサブスクリプション配信ポリシーを無視し、サブスクリプションで独自の配信ポリシーを設定していても、トピックの配信ポリシーがすべてのサブスクリプションに適用されるようにしたいことがあります。すべてのサブスクリプションにトピックの配信ポリシーを適用するように Amazon SNS を設定するには、[View/Edit Topic Delivery Policies (トピック配信ポリシーの表示/編集)] ダイアログボックスの [サブスクリプションの上書きを無視] を選択します。次の図は、サブスクリプションレベルのポリシーが明示的に無視されているため、サブスクリプションに独自のサブスクリプション配信ポリシーがあっても、すべてのサブスクリプションに適用されるトピックレベルの配信ポリシーを示しています。


            3 つの HTTP サブスクリプション、トピック配信ポリシー、および Amazon SNS で無視される 1 つのサブスクリプション配信ポリシーを持つ Amazon SNS トピック。

最大受信レートの設定

サブスクライブしたエンドポイントに Amazon SNS が 1 秒あたりに送信するメッセージの最大数を設定するには、[最大受信レート] 設定を指定します。Amazon SNS は、配信待ちのメッセージを最大 1 時間、保持します。1 時間以上保持されたメッセージは破棄されます。

  • トピックのすべてのサブスクリプションに適用される最大受信レートを設定するには、[Edit Topic Delivery Policy (トピック配信ポリシーの編集)] ダイアログボックスを使ってトピックレベルで設定を適用します。詳細については、「トピックの最大受信レートを設定するには」を参照してください。

  • 特定のサブスクリプションに適用される最大受信レートを設定するには、[Edit Subscription Delivery Policy (サブスクリプション配信ポリシーの編集)] ダイアログボックスを使ってサブスクリプションレベルで設定を適用します。詳細については、「サブスクリプションの最大受信レートを設定するには」を参照してください。

トピックの最大受信レートを設定するには

  1. AWS マネジメントコンソールにサインインした後、Amazon SNS コンソール (https://console.aws.amazon.com/sns/v2/home) を開きます。

  2. ナビゲーションパネルで、[トピック] を選択し、トピックを選択します。

  3. [その他のアクション] ドロップダウンリストを選択してから、[トピックの配信ポリシーの編集] を選択します。

  4. [Maximum receive rate] ボックスに整数値 (2 など) を入力します。

  5. [ポリシーの更新] を選択して変更を保存します。

サブスクリプションの最大受信レートを設定するには

  1. AWS マネジメントコンソールにサインインした後、Amazon SNS コンソール (https://console.aws.amazon.com/sns/v2/home) を開きます。

  2. ナビゲーションパネルで、[トピック] を選択し、トピックの ARN を選択します。

  3. [トピックの詳細] ペインでサブスクリプション選択してから、[トピックの配信ポリシーの編集] を選択します。

  4. [Maximum receive rate] ボックスに整数値 (2 など) を入力します。

  5. [ポリシーの更新] を選択して変更を保存します。

即時の再試行段階

即時の再試行段階は最初の配信の試行の直後に実行されます。この段階は、再試行の間の遅延時間なしで発生するため、遅延なしの段階とも呼ばれます。この段階での再試行のデフォルトの回数は 0 です。

即時の再試行の段階の再試行回数を設定するには

  1. AWS マネジメントコンソールにサインインした後、Amazon SNS コンソール (https://console.aws.amazon.com/sns/v2/home) を開きます。

  2. ナビゲーションパネルで、[トピック] を選択し、トピックの ARN を選択します。

  3. [Topic Details] ペインで、[Other topic actions] ドロップダウンリストから [Edit topic delivery policy] を選択します。

  4. [Retries with no delay] ボックスに整数値を入力します。

  5. [ポリシーの更新] を選択して変更を保存します。

バックオフ前段階

バックオフ前段階が、即時の再試行段階に続きます。バックオフ関数が再試行の間の遅延時間に影響する前に発生する 1 つ以上の再試行を作成する場合は、この段階を使用します。この段階では、再試行の間の時間は一定で、[Minimum delay] で選択する設定と同じです。[最小遅延間隔] 設定は 2 つの段階の再試行に影響を与えます。バックオフ前段階のすべての再試行に適用されるとともに、バックオフ段階の再試行の最初の遅延時間となります。—この段階での再試行のデフォルトの回数は 0 です。

バックオフ前段階の再試行の数を設定するには

  1. AWS マネジメントコンソールにサインインした後、Amazon SNS コンソール (https://console.aws.amazon.com/sns/v2/home) を開きます。

  2. ナビゲーションパネルで、[トピック] を選択し、トピックの ARN を選択します。

  3. [Topic Details] ペインで、[Other topic actions] ドロップダウンリストから [Edit topic delivery policy] を選択します。

  4. [Minimum delay retries] ボックスに整数値を入力します。

  5. この段階のメッセージ間の遅延時間を設定するには、[Minimum delay] ボックスに整数値を入力します。

    設定する値は、[Maximum delay] に設定する値以下である必要があります。

  6. [ポリシーの更新] を選択して変更を保存します。

バックオフ段階

バックオフ段階は、デフォルトで適用される唯一の段階です。[Number of retries] を使用して、バックオフ段階での再試行回数をコントロールできます。

重要

[Number of retries] で選択する値は、[Retries with no delay]、[Minimum delay retries]、および [Maximum delay retries] で設定する再試行を含めて、再試行の合計回数を表します。

バックオフ段階の再試行の頻度は、3 つのパラメータでコントロールできます。

  • 最小遅延間隔 — 最小遅延間隔は、バックオフ段階の最初の再試行に関連する遅延時間を定義します。

  • 最大遅延間隔 — 最大遅延時間は、バックオフ段階の最後の再試行に関連する遅延時間を定義します。

  • バックオフ関数の再試行 — 再試行のバックオフ関数は、バックオフ段階の最初の再試行と最後の再試行の間のすべての再試行に関連する遅延時間を計算するために Amazon SNS で使用されるアルゴリズムを定義します。

4 つの再試行バックオフ関数から選択できます。

  • 線形

  • 算術

  • 幾何学的

  • 指数的

次の画面ショットは、各バックオフ関数がバックオフ期間中にメッセージに関連する遅延時間にどのように影響するかを示しています。縦軸は、10 回ごとの再試行に関連する遅延時間を秒単位で表します。横軸は再試行回数を表します。最小遅延時間は 5 秒で、最大遅延時間は 260 秒です。


            4 つのバックオフ再試行関数を示すグラフ。

バックオフ後段階

バックオフ後段階は最後の段階です。バックオフ関数が再試行の間の遅延時間に影響した後で発生する 1 つ以上の再試行を作成する場合は、この段階を使用します。この段階では、再試行間の時間は一定で、[Maximum delay] で選択する設定と同じです。[最大遅延間隔] 設定は 2 つの段階の再試行に影響を与えます。バックオフ後段階のすべての再試行に適用されるとともに、バックオフ段階の再試行の最後の遅延時間となります。—この段階での再試行のデフォルトの回数は 0 です。

バックオフ後段階の再試行回数を設定するには

  1. AWS マネジメントコンソールにサインインした後、Amazon SNS コンソール (https://console.aws.amazon.com/sns/v2/home) を開きます。

  2. ナビゲーションパネルで、[トピック] を選択し、トピックの ARN を選択します。

  3. [Topic Details] ペインで、[Other topic actions] ドロップダウンリストから [Edit topic delivery policy] を選択します。

  4. [Maximum delay retries] ボックスに整数値を入力します。

  5. この段階のメッセージ間の遅延時間を設定するには、[Maximum delay] ボックスに値を入力します。

    設定する値は、[Minimum delay] に設定する値以上である必要があります。

  6. [ポリシーの更新] を選択して変更を保存します。