Hakoをコンテナインスタンス0の状態からoneshotする

hatappi.hateblo.jp

昨日はHakoで狙ったコンテナインスタンスにたいしてoneshotする記事を書きました

このoneshotを僕が使う時はバッチ目的として使用するのでサービスの用にコンテナインスタンスを立て続けるわけではありません
もちろん起動し続けたままでも良いのですが、バッチが半日に1回の場合など使用しない時間が長い場合はお金がもったいないです

そのためバッチを使用する時にコンテナインスタンスを立てたかったのです
aws cliaws sdkで自分の好きな方法でインスタンスをたててからhako oneshotを使用しても良いのですが
Hakoにはリソースが足らない時にスケールアウトしてくれる素敵な機能がついています

下記のブログのオートスケーリングにも記載があるのですがautoscaling_group_for_oneshotにリソースが足らない時に
スケールアウトするAutoScalingグループ名を設定します
つまりこの素敵な機能を使うにはAutoScalingグループにてコンテナインスタンスを管理していないといけないようです

techlife.cookpad.com

コード的にはここらへん 中身も難しいことはしてなくてSDKを使ってAWSAPIを叩きつつ現在のコンテナインスタンスの数やリソース状況をみて足りない場合にスケールアウトしている

ただv1.3.1だと指定クラスタ内にコンテナインスタンスが0だと例外が出てスケールアウトされなかったのでPRを下記で送り

github.com

無事マージしていただきました 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にしていることが分かる
後はしばらく待つといつも通り処理を開始してくれる