前回の記事でAWSでシステムを構築する際にはCloudFrontを利用した方が良い理由についてご説明しました
AWSでCloudFrontを導入する際に、デフォルト設定のまま使ってしまうと、注意が必要なポイントについてご説明します。
CloudFrontはAWS(Amazon Web Service)が提供するCDN(コンテンツデリバリーネットワーク)サービスです。
CloudFrontをAWSで使用した場合、ほとんどの場合は下記の様な構成になると思います。
AWSでクラウドフロントを使用する場合の基本構成
まずCloudFrontエッジサーバから情報を取得する元として、画像や動画、CSS、JavaScriptなどの静的なファイルはS3に保存します。
そして、PHPなどのプログラミング言語で生成される動的なページはEC2に配置します。
この情報の取得元をオリジンサーバと言います。このオリジンサーバの設定について下記の2つの設定を見直すことをオススメします。
- エラーレスポンスのキャッシュ時間
- オリジン keep-alive タイムアウト
エラーレスポンスのキャッシュ時間
デフォルトだとCloudFrontはオリジンサーバから一度4xx, 5xxなどのエラーレスポンスを受け取ってしまうと、5分間は同一のURLでユーザーにエラーを返し続けます。これはCloudFrontエッジサーバの負荷をなるべく下げるためにそのようになっているのだと思いますが、たったの一度だけエラーが発生した場合でも5分間もそれが継続し続けてしまうので注意が必要です。
CloudFront がエラーをキャッシュする時間を制御する
下記の手順で設定を変更できます
AWSコンソールにログインし、メニューのサービスからCloudFrontに移動し、CloudFrontディストリビューションを選択します。
そしてError Pagesのタブをクリックします。次に、Create Custom Error Responseボタンを押します。
そして一つずつエラーキャッシュ時間を変更したいステータスコードを選び設定していきます。
オリジンkeep aliveタイムアウト
こちらはCloudFrontエッジサーバとオリジンサーバがTCPコネクションを維持する時間で、デフォルトだと5秒と短めに設定されています。
こちらも多くのユーザーにサービスを提供しているCloudFrontエッジサーバの負荷をなるべく高くならないようにという意図でそのように設定されているのかなと思います。
オリジンサーバは一番最初にユーザーからリクエストがあった場合には、オリジンサーバとの間で、TCPコネクションの確立、TLSハンドシェイクという、接続確立のための処理を行います。
その確立のために、何度もオリジンサーバとの間で通信を行う必要があり、特に海外のユーザーにサイトを提供している場合では無視できないくらい大きくなって行きます。最近のサイトでは、HTTPSが当たり前ですので、TLSハンドシェイクの処理が必要になり、以前よりもさらに時間がかかるようになっています。
CloudFrontのkeep-alive タイムアウトを長くすることで、一度確立した接続を長くすることができます。
ただ、これも長くしすぎてしまうと、オリジンサーバのELBの負荷も高まってしまいますが、ELBもオートスケールという機能で自動的に拡張して行きますので、アクセス数にもよりますがそれほど心配はいらないと思います。
下記の手順で設定を変更できます。
AWSコンソールのCloudFrontからディストリビューションを選択しOrigins and Origin Groupsタブを選択します。次に、設定を変更したいオリジンをチェックしEditボタンを押します。
Origin Keep-alive Timeoutの値を変更し、Yes, Editボタンを押します。
以上で終わりになります。CloudFrontを構築する際にはこちらの設定を見直してみてください。