CDP:Scheduled Autoscalingパターン

From AWS-CloudDesignPattern
Jump to: navigation, search

バッチ処理サーバの自動オンオフ

Contents

解決したい課題

定時実行のバッチ処理は、多くのシステムで実施されており、常時起動しているサーバ上のスケジューラー(Unixの場合はcronが多い)で実行されていることも多い。 しかし実際にバッチ処理を行なっている時間は短く、その他の時間のサーバリソースは遊んでしまうこととなり、非常にコスト効率が悪い。 このような用途のバッチサーバのリソースを、いかに効率的に利用するかが、常に課題となっている。

クラウドでの解決/パターンの説明

従来は定時実行のバッチサーバでも、当然のこととして常時起動しているサーバを一台割り当てる必要があった。そして他の機能(処理)ももたせ、サーバリソースの利用効率を上げる工夫をしてきた。 クラウドでは仮想サーバを必要なときのみ利用できるので、バッチ処理を行なっているときのみ仮想サーバを起動することが現実的なものになった。しかし、定時実行のバッチ処理の場合は、仮想サーバを定時で起動するための仕組みが必要となる。

これはクラウドのスケジューリングの仕組みを使い実現することが可能となる。 バッチ処理を行いたい時間に限り仮想サーバを稼動するようにし、非常にコスト効率の良いシステムを実現できる。

実装

AWSにはAuto Scalingと呼ばれる自動でEC2を増減できる仕組みがある。そして、そのAuto Scalingには定時にEC2を増減させる機能も持っており、定時実行のバッチ処理に利用することが可能である。

  • 起動時に該当処理を実行するEC2(AMI)を用意する。
  • Auto Scalingにて、指定時刻にAMIからEC2が起動されるように設定する。
  • 処理終了後、EC2がターミネートされるようにもEC2自体およびAuto Scalingを設定する。

構造

6wNg0ISJczU5Pz1m-47DC8.png

利点

  • 定時のバッチ処理を常時起動しているEC2で行うのではなく、処理実行時のみしかEC2が起動しないため大幅なコスト削減が期待できる。

注意点

  • バッチ処理が終了する時刻を決めるのが難しい場合は、EC2上のバッチ処理が終了してから、EC2自身が自分を終了する作り込みを行う方法もよく用いられる。
  • EC2は時間単位で課金され、短時間であっても一度起動して終了すると、1時間分の課金がかかるので、起動、終了のタイミングには注意が必要である。

寄贈したアーキテクト

Ninja of Three

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox