CloudFrontのオリジンに設定できるタイムアウトが理解できていなかったので絵にしてみた

CloudFrontでオリジンを設定する際に接続タイムアウト・レスポンスタイムアウト・キープアライブタイムアウトが設定できます。各々の違いが理解できていなかったので、絵にしました。
2023.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

タイムアウトの違いを理解したい

こんにちは!AWS事業本部のおつまみです。

CloudFrontのオリジンを設定する際、[追加設定]には以下の項目があります。

全てタイムアウトですが、各々どんな違いがあるのかいまいち理解できていませんでした。

そこで今回は絵にして理解してみたいと思います!

接続タイムアウト

CloudFrontがオリジンへのリクエストで接続を確立しようとするときに待機する秒数です。
②オリジンへリクエストにかかる時間のみが関係します。

デフォルトのタイムアウトは 10 秒、1 ~ 10の秒の範囲で設定可能です。
設定したタイムアウト値以内に接続を確立できない場合は最大3回まで接続を試行します。
全ての試行が失敗してしまった場合は、以下のような挙動になります。

  • セカンドオリジンが設定されていない場合
    • CloudFront はクライアントにエラーレスポンスを返します。
  • セカンドオリジンが設定されている場合
    • セカンドオリジンへの接続を行います。
    • セカンドオリジンへの接続試行も失敗した場合は、CloudFront はクライアントにエラーレスポンスを返します。

レスポンスタイムアウト

CloudFrontがリクエストをオリジンに転送してからレスポンスを受け取るまでに待機する秒数です。
②オリジンへリクエスト③オリジンからのレスポンスにかかる時間が関係します。
カスタムオリジンのみに適用される設定値です。S3オリジンには適用されません。

デフォルトのタイムアウトは 30 秒、1 ~ 60の秒の範囲で設定可能です。60秒以上の設定が必要な場合は上限緩和申請ができます。

しかしクライアント側でHTTP504ステータスコードエラーが発生し、タイムアウト値を引き上げる必要がある場合は、変更前に他の回避方法も検討して下さい。
以下のAWS公式のトラブルシューティング方法が参考になります。

キープアライブタイムアウト

CloudFrontがレスポンスの最後のパケットを取得した後にカスタムオリジンへの接続を維持する秒数です。   ちなみにキープアライブは通信先の相手が活きているか確認する仕組みのことです。
③オリジンからのレスポンス次の②オリジンへリクエストにかかる時間が関係します。
カスタムオリジンのみに適用される設定値です。S3オリジンには適用されません。  

デフォルトのタイムアウトは 5秒、1 ~ 60の秒の範囲で設定可能です。

キープアライブタイムアウトを増やすと、TCP 接続の再構築に必要な時間と後続のリクエストに対する別の TLS ハンドシェイクの実行に必要な時間を節約できます。そのため、オリジンへの通信効率が上がります。 
ただし、TCPコネクションを確立し続けることで負荷がかかってしまいます。  
そのためタイムアウト値を増やす場合は慎重に設定しましょう。

このタイムアウトを有効にする場合は、オリジン側のキープアライブタイムアウト設定も有効にする必要があります。Apache,Nginxなどお使いのオリジン環境に合わせて、KeepAlive設定を行いましょう。

最後に

今回はCloudFrontのオリジン設定にあるタイムアウトについてまとめてみました。

絵にすると理解度があがりますね。

最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!

参考

20201028_BlackBelt_Amazon_CloudFront_deep_dive.pdf

Amazon CloudFrontのオリジンタイムアウトが変更できるようになりました | DevelopersIO