昨日はHakoで狙ったコンテナインスタンスにたいしてoneshotする記事を書きました
このoneshotを僕が使う時はバッチ目的として使用するのでサービスの用にコンテナインスタンスを立て続けるわけではありません
もちろん起動し続けたままでも良いのですが、バッチが半日に1回の場合など使用しない時間が長い場合はお金がもったいないです
そのためバッチを使用する時にコンテナインスタンスを立てたかったのです
aws cliやaws sdkで自分の好きな方法でインスタンスをたててからhako oneshot
を使用しても良いのですが
Hakoにはリソースが足らない時にスケールアウトしてくれる素敵な機能がついています
下記のブログのオートスケーリングにも記載があるのですがautoscaling_group_for_oneshot
にリソースが足らない時に
スケールアウトするAutoScalingグループ名を設定します
つまりこの素敵な機能を使うにはAutoScalingグループにてコンテナインスタンスを管理していないといけないようです
コード的にはここらへん 中身も難しいことはしてなくてSDKを使ってAWSのAPIを叩きつつ現在のコンテナインスタンスの数やリソース状況をみて足りない場合にスケールアウトしている
ただv1.3.1だと指定クラスタ内にコンテナインスタンスが0だと例外が出てスケールアウトされなかったのでPRを下記で送り
無事マージしていただきました 2017/05/03時点でv1.3.3ですが、このバージョンにて取り込まれています :tada:
hako | RubyGems.org | your community gem host
コード
scale_out.yml
scheduler: type: ecs region: ap-northeast-1 cluster: test-cluster autoscaling_group_for_oneshot: test-auto-scaling-group app: image: busybox memory: 1000
$ hako oneshot scale_out.yml -- echo "Hello" ~~ I, [2017-05-23T20:36:18.938312 #8533] INFO -- : Increment desired_capacity of test-auto-scaling-group from 0 to 1 ~~
実行するとdesired_capacity
を0から1にしてインスタンスの希望台数を1にしていることが分かる
後はしばらく待つといつも通り処理を開始してくれる