おそらくはそれさえも平凡な日々

ECSのScheduled Taskを管理するツールを作った

その名もecschedule。だいぶ前から作っていたのだが、この度実戦投入した。

https://github.com/Songmu/ecschedule

Nature社では、ECS上でGoのサービスを動かしており、バッチ系の定期実行タスクもECS Scheduled Taskを利用している。

最近バッチの本数が増えてきて管理したくなり、このツールを導入しました。

便利だとは思うが、かなり社内事情にべったりであるため、フィードバック歓迎です。具体的には以下の制約を前提としています。

  • Rule名がユニークであること
  • RuleにはTargetが1つだけ紐付いており、TaskのContainer Overridesでタスクを実行している

ecspressoにかなり影響を受けており、ECS Scheduled Task用のecspressoのような作りになっています。

インストール

% brew install Songmu/tap/ecschedule
# or
% go get github.com/Songmu/ecschedule/cmd/ecschedule

導入方法

以下のコマンドで設定をダンプします。

% ecschedule dump --cluster clusterName --region us-east-1 > ecschedule.yaml

これを、環境変数を変数化するなどして調整すると以下のようになります。must_env あたりにecspressoリスペクトが感じられます。

region: us-east-1
cluster: clusterName
- name: taskName1
  description: task 1
  scheduledExpression: cron(30 15 ? * * *)
  taskDefinition: taskDefName
  containerOverrides:
  - name: containerName
    command: [subcommand1, arg]
    environment:
      HOGE: foo
      FUGA: {{ must_env `APP_FUGA` }}
- name: taskName2
  description: task2
  scheduledExpression: cron(30 16 ? * * *)
  taskDefinition: taskDefName2
  containerOverrides:
  - name: containerName2
    command: [subcommand2, arg]

変更の適用

設定ファイルを編集して、ルールの変更を適用したい場合には、apply サブコマンドを利用します。

% ecschedule -conf ecschedule.yaml apply -rule $ruleName

事前に diff サブコマンドを叩いておくと変更差分が確認できるので便利です。

% ecschedule -conf ecschedule.yaml diff -rule $ruleName

全部のルールを一斉に適用したい場合には apply サブコマンドに -all オプションを付与します。差分があるものだけが適用されます。

% ecschedule -conf ecschedule.yaml apply -all

弊社ではこの-allオプションをdeploy時に自動適用するようにしています。一斉自動適用最初はちょっと怖かったのですが、特に問題なく動いています。

goccy/go-yamlは神

このツールを作り始めた頃に、既存のGoのYAMLライブラリが理想の挙動にならなくて困り果てており、自分で作るかという沼にハマりかけたところに、goccyさんが颯爽とイケてるyamlライブラリを作り始めてくれて助かりました。皆さん使いましょう。

https://github.com/goccy/go-yaml

ということで、ecschedule も便利ですのでぜひご利用ください。

created at
last modified at

2020-11-16T21:24:38+0900

comments powered by Disqus