AWS Batchの使用感

AWS Batch を試しに使ってみた感想です。 少ないサンプルでの結果なので間違ってる部分はあるかもしれません。あらかじめご了承ください。

良いところ

管理しなければならない部分が減る

オートスケールやインスタンスサイズなどをAWS側でよしなに調整してくれる。

  • ジョブのコンテナ定義のvcpumemoryに合わせてAutoScalingGroupを作ってくれる。
  • インスタンスサイズは optimal が設定できる。 optimalではジョブの条件を満たすインスタンスを自動的に選んでくれる。

試してないがスポットインスタンスの入札も行ってくれるらしい。

使いにくいところ

ジョブをsubmitしてから実行されるまで数分以上待たされることがある

ComputeEnvironment上にインスタンスが起動していない状態だと、結構待たされる。

  • AutoScalingGroupの設定とインスタンス起動が行われるので、そこに時間がかかっていそう。

インスタンスタイプにoptimalを設定した場合の挙動

起動中のインスタンスタイプでは満たせないジョブをsubmitすると実行まで時間がかかる。

public subnetでしか起動しない

private subnetでNAT通るようにした状態でもいつまでもジョブが実行されず。

  • セキュリティグループは設定できるので実害はないかなとは思う。

インスタンスがTerminateされる時間がまちまち

ジョブがなくなってからインスタンスがTerminateされる時間はまちまち。 ジョブがなくなってから5分程度でTerminateされることもあれば1時間程度かかることもある。

ジョブ定義のパラメータはcommand内でしか使えない

ジョブ定義のパラメータcommand にしか使えない。environment にも使えるようになればさらに便利そう。

  • ジョブ定義のパラメータはジョブをsubmitした時点で置換されるので、JobDetailの中では置換された状態で表示される。
    • 確認しやすいが、秘匿情報を渡したい場合には使えない。

まとめ

  • インスタンスが起動した状態であればジョブキューは迅速に消化されるので最低1台は起動しておくのが良いかなと感じた。
  • インスタンスサイズが変わるときの挙動に不安を感じたので、インスタンスサイズは固定したほうが良さそう。