ちょっと話題の記事

[新機能] AWS Elastic Load Balancing(ELB)のタイムアウト値を変更する

2014.07.25

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

ども、大瀧です。
本日、AWSで使用できるロードバランササービス、ELBでタイムアウト値変更のオプションが追加されました。これまでは、AWSサポートに個別に連絡しAWS側で変更するという手続きでしたが、ユーザー側で自由に設定できるようになりました!!また、上限も以前は17分でしたが、今回のアップデートでなんと最大60分まで設定できます。

ELBのタイムアウト値とは

ELBは、ロードバランサのサービスとして一般に言うリバースプロキシの機能を持ちます。処理の流れを以下に示します。

  1. ELBはクライアントからのリクエストを受信し、EC2インスタンスに転送する
  2. EC2インスタンスはELBが転送したリクエストに対応する処理を実行する
  3. EC2インスタンスはレスポンスとしてELBに処理の結果を返送する
  4. ELBはEC2インスタンスのレスポンスをクライアントに転送する

今回のタイムアウト値は、上記手順の2と3にかかった時間の合計値を指します。デフォルトは60秒で、60秒を経過するとELBはEC2インスタンスのレスポンスを待たずに、エラーとしてクライアントにHTTP 504: Gateway Timeoutを返します。EC2でのリクエストに対する処理がJavaやPHPなどの動的処理で時間がかかったり、EC2の処理性能が足りないというケースで起こりうるトラブルです。

設定方法

現状、ELBのCreate Load Balancerのウィザードには設定が見当たらないため、ELBを作成したあとでタイムアウト値を変更します。

AWS Management ConsoleのEC2の管理画面のメニューから[Load Balancers]を選択し、ELB一覧から設定したいELBを選択します。[Details]タブの項目の末尾、[Connection Settings]にある[Idle Timeout]が今回のタイムアウト値です。ここで、現在の設定の確認と変更ができます。

elb-timeout

では、試しに60分に変更してみます。[Edit]リンクをクリックし、秒単位でタイムアウト値を入力します。今回は60分なので、3600と入力し[Save]で保存します。

elb-timeout02

タイムアウト値が60分になりました!

elb-timeout03

まとめ

ELBのタイムアウト値が変更できるようになったこと、上限が60分になったことをご紹介しました。ELBを使った構成でアプリの動きがおかしい!といったときにこの記事を思い出してみてください。

参考資料