CDP:Scheduled Autoscalingパターン
提供:AWS-CloudDesignPattern
バッチサーバーの自動オンオフ
目次 |
解決したい課題
定時実行のバッチ処理は多くのシステムで実施されており、その方法として、常時起動しているサーバー上のスケジューラー(例えばUNIXのcron)を使うケースが多い。しかし実際にバッチ処理を行なっている時間は短く、その他の時間のサーバーリソースは無駄になりコスト効率が悪い。このような用途のバッチサーバーのリソースを、いかに効率的に利用するかが常に課題となっている。
クラウドでの解決/パターンの説明
従来は定時実行のバッチサーバーでも、当然のこととして常時起動しているサーバーを1台割り当てる必要があった。そして他の機能(処理)も持たせ、サーバーリソースの利用効率を上げる工夫をしてきた。クラウドでは必要なときのみ仮想サーバーを利用できるので、バッチ処理を行なっているときのみ仮想サーバーを起動することが現実的になった。
定時実行のバッチ処理は、仮想サーバーを定時で起動する仕組みが必要となる。これはクラウドのスケジューリングの仕組みを使うと実現できる。
実装
AWSには「Auto Scaling」と呼ぶEC2インスタンスを自動的に増減できる仕組みがある。Auto Scalingは定時にEC2インスタンスを増減させる機能も持っており、定時実行のバッチ処理に利用することが可能である。
- 起動時に該当処理を実行するAMI(マシンイメージ)を用意する。
- Auto Scalingにて、指定時刻にAMIからEC2が起動されるように設定する。
- 処理終了後、EC2がターミネートするようにEC2自体およびAuto Scalingを設定する。
構造
利点
- 定時のバッチを処理するEC2インスタンスは常時起動していない。処理実行時のみしかEC2インスタンスは起動しないため大幅なコスト削減が期待できる。
注意点
- バッチ処理の終了時刻を決めるのが難しい場合、EC2インスタンス上のバッチ処理が終了してから、EC2インスタンス自身が自分を終了させる方法もよく用いられる。[関連ブログ 1]
- EC2インスタンスは時間単位で課金され、短時間であっても一度起動して終了すると、1時間分の課金がかかる。起動、終了のタイミングには注意が必要である。
その他
関連ブログ
- ↑ suz-lab - blog の「定時にEC2を起動 & バッチが終了したらターミネート」( http://blog.suz-lab.com/2012/04/ec2.html )