LoginSignup
11
8

More than 5 years have passed since last update.

ECS ScheduleTaskの登録をAPI経由で行う

Last updated at Posted at 2018-04-11

CloudWatchイベントのAPIを使ってECS ScheduleTaskにスケジュール登録する手順について簡単にまとめた。

下記のブログを書いた時点では理解できておらず、いつか書かないとな思っていたAPI経由でのScheduleTaskの登録手順になります。

Amazon ECS ScheduleTaskで実現するスマートなDockerベースのバッチ実行環境

aws-cliを使ってScheduleTaskを登録する

①CloudWatchEventsにルールを登録

例)毎朝9:00(JST)に起動する「ecs-task-schedule-hogehoge」という名前のイベントを登録する。
※CloudWatchイベントの時刻はGMTなので注意

## イベントの登録

$ aws events put-rule --schedule-expression "cron(0 0 * * ? *)" --name ecs-task-schedule-hogehoge --description "説明"
{
    "RuleArn": "arn:aws:events:ap-northeast-1:[ID]:rule/ecs-task-schedule-hogehoge"
}

CloudWatchイベントが登録される。(この時点では、ターゲットが登録されていないのでECS側のScheduleTaskには何も登録されていない)

2018-04-11-ecs1.png

②スケジュール登録したいクラスタのARNを取得

GUIからだとクラスタのARNを見れる場所が見当たらないのでaws-cliでclusterArnを取得する

## クラスタのARNを取得
$ aws ecs describe-clusters --clusters [クラスタ名]
{
    "clusters": [
        {
            "status": "ACTIVE",
            "clusterName": "クラスタ名",
            "registeredContainerInstancesCount": 0,
            "pendingTasksCount": 0,
            "runningTasksCount": 0,
            "activeServicesCount": 5,
            "clusterArn": "arn:aws:ecs:ap-northeast-1:[ID]:cluster/[クラスタ名]"
        }
    ],
    "failures": []
}

## こんな感じでjq使ってで取得すると便利
$ aws ecs describe-clusters --clusters [クラスタ名]|jq '.clusters[].clusterArn'
"arn:aws:ecs:ap-northeast-1:[ID]:cluster/クラスタ名"

③ターゲット(ECSでいうスケジュールルール)を登録する

設定内容は下記
※scheduleのdescriptionを登録出来なさそうなのが運用上は辛いかな。。(後から足すか)

パラメータ名 意味
rule ①で作ったCloudWatchEventsのルール名
targets.Id ターゲットの名前
targets.Arn ②で取得したターゲットに登録するECSのクラスタのARN
targets.RoleArn ecs:RunTaskが実行出来るIAMRoleのARN(GUIから作ると初回にecsEventsRoleという名前で生成される)
targets.EcsParameters.TaskDefinitionArn このScheduleTaskで起動したいタスク(コンテナ)のタスク定義ARN
targets.EcsParameters.TaskCount 一回ごとに起動するタスク数
## スケジュールタスクの登録
aws events put-targets --rule "ecs-task-schedule-hogehoge" --targets "Id"="ecs-task-schedule-hogehoge","Arn"="arn:aws:ecs:ap-northeast-1:[ID]:cluster/[クラスタ名]","RoleArn"="arn:aws:iam::[ID]:role/EcsTaskCommonRole","EcsParameters"="{"TaskDefinitionArn"= "arn:aws:ecs:ap-northeast-1:[ID]:task-definition/tst-mamari-task:1","TaskCount"= 1}"

下記のようにECSのscheduleTaskにタスクが登録される。

2018-04-11-ecs2.png

2018-04-11-ecs3.png

terraformの場合でも、同じように下記2つのリソースタイプを使えば実現出来そう。

cloudwatch_event_rule
cloudwatch_event_target

参考

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8