ecscheduleでECSのScheduled Taskを管理する

Japan APN Ambassador Advent Calendar 2020 2 日目のエントリです。ecschedule で ECS の Scheduled Task を管理してみました。

github.com

songmu.jp

インストール

go get でインストールしました。

$ go get github.com/Songmu/ecschedule/cmd/ecschedule
$ ecschedule -help
Usage of ecschedule (v0.3.0 rev:HEAD):
  -conf string
        configuration
  -version
        display version

Commands:
  apply  apply the rule
  dump   dump tasks
  run    run the rule
  diff   diff of the rule with remote

Scheduled Task の dump

dump サブコマンドで既存の Scheduled Task を dump することが可能です。今回は既に存在する Scheduled Task を dump してみます。

$ ecschedule dump --cluster sample-cluster --region ap-northeast-1 > ecschedule.yaml
$ cat ecschedule.yaml
region: ap-northeast-1
cluster: sample-cluster
rules:
- name: batch
  scheduleExpression: rate(1 minute)
  disabled: true
  taskDefinition: batch:6
  launch_type: FARGATE
  platform_version: 1.3.0
  network_configuration:
    aws_vpc_configuration:
      subnets:
      - subnet-xxxxxxxxxxxxxxxxxx
      security_groups:
      - sg-xxxxxxxxxxxxxxxxxx
      assign_public_ip: ENABLED

ecschedule.yaml に対象 ECS Cluster に存在する Scheduled Task が dump されました。

Scheduled Task の apply

該当の Scheduled Task が Disabled の状態となっているため、ecschedule で有効化してみます。

$ git diff
diff --git a/ecschedule.yaml b/ecschedule.yaml
index dd7be7b..31f021e 100644
--- a/ecschedule.yaml
+++ b/ecschedule.yaml
@@ -3,7 +3,6 @@ cluster: sample-cluster
 rules:
 - name: batch
   scheduleExpression: rate(1 minute)
-  disabled: true
   taskDefinition: batch:6
   launch_type: FARGATE
   platform_version: 1.3.0

ecschedule.yaml を変更して apply サブコマンドを実行する前に、diff サブコマンドで ecschedule.yaml と Scheduled Task の状態を差分確認してみます。

$ ecschedule -conf ecschedule.yaml diff -rule batch

以下の様に差分を出力してくれます。PR レビューに便利ですね。

f:id:enokawaa:20201129231810p:plain

差分が確認できたので apply します。

$ ecschedule -conf ecschedule.yaml apply -rule batch

差分が適用されました。

f:id:enokawaa:20201129232651p:plain

AWS マネージメントコンソールから Scheduled Task を見てみると、問題なく ENABLED となっていることが確認できました。

f:id:enokawaa:20201129233049p:plain

おわりに

簡単ですが、ecschedule を用いて Scheduled Task を管理してみました。とても便利ですね。個人的には dump 機能が好きです。「当初は AWS マネージメントコンソールや AWS CLI で作成したけど、後から IaC で管理したい」というケースに非常にマッチするのではないでしょうか。

ECS Service の Deployment は ecspresso で、Scheduled Task は ecschedule で管理すると最強なのでは説が僕の中で浮上しています。