どうもこんにちは。
今回はRailsアプリケーションのデプロイ時にロードバランサーのタイムアウト値を自動で更新できるようにしました。
経緯
私の会社では、新しいバージョンをデプロイするときに、以下の流れで作業を行います。
- RDSのデータをバックアップ
- ElasticBeanstalkの環境をクローン(複製)する
- EC2の画面から、ロードバランサーのアイドルタイムアウトの値を60秒→1200秒に変更する
- ソースコードをデプロイする
60秒→1200秒へ変更する理由は、「動画ファイルなどの容量の大きなファイルをサーバーへアップロードするときに60秒以上が経過してしまうと504ステータスエラーが発生してしまう」からです。
つまり、動画ファイルをアップロードしている途中にサーバーが通信をストップしてしまうということです。
ebextensionsを使用する
今回はebextensionsを使用してカスタムを行いました。
ebextensionsとは、Elastic Beanstalkでの環境構築時に環境をカスタマイズする設定ファイルを配置するディレクトリです。
これを使用することで、AWSコンソール上でポチポチ設定を変更する必要がなくなります。
手順
1. .ebextensionsというディレクトリを作成
プロジェクトのルートディレクトリに移動して、以下のコマンドを叩いてください。
mkdir .ebextensions
2. 任意の名前でconfigファイルを作成
touch load_balancer.config
3. 設定値を記述
YAML形式で設定値を記述します。
option_settings:
aws:elb:policies:
ConnectionSettingIdleTimeout: "1200"
aws:elbv2:loadbalancer:
IdleTimeout: "1200"
これでgit commit
してeb deploy
を叩けばデプロイできます!
補足
aws:elb:policiesとaws:elbv2:loadbalancerの違い
aws:elb:policies
Elastic Beanstalkの環境設定の一部として使用されます。
Elastic Beanstalkが管理するロードバランサーの設定に影響を与えます。
aws:elbv2:loadbalancer
Amazon Elastic Load Balancing (ELB) の設定の一部として使用されます。
ELBが管理するロードバランサーの設定に影響を与えます。