Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

参考

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/scheduled_tasks_cli_tutorial.html

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした