Как планировать задачи ECS на AWS Fargate

Я создал определение задачи для службы эластичных контейнеров и успешно запустил его в кластере Fargate. Однако, когда я создаю запланированную задачу в указанном кластере, опция "Тип запуска" жестко закодирована в EC2. Есть ли способ, возможно, через командную строку, запланировать выполнение задачи на Fargate?

enter image description here

7 ответов



кажется, нет никакого способа планирования задачи на FARGATE.

единственный способ, которым это можно сделать прямо сейчас, - это иметь внешний "планировщик" для ECS. Я сделал это с лямбдой. Вы также можете использовать что-то вроде Дженкинса или простой задачи cron, которая запускает команду aws-cli в ECS, в обоих этих случаях, хотя вам понадобится всегда работающий экземпляр.

Я написал лямбду, которая принимает параметры (переопределения) для отправки в задачу ECS и имеет расписание задачи должен был.

обновление: Кажется, в Fargate Cluster details теперь есть вкладка расписание, которая позволит вам установить расписания cron для задач ECS.


вы можете создать правило CloudWatch, которое использует расписание в качестве источника событий и задачу ESC в качестве цели.


хотя документация AWS дает вам способы сделать это через CloudFormation, похоже, что они еще не выпустили эту функцию в любом случае. Я пытался сделать что-то подобное и столкнулся с той же проблемой. Как только он станет доступен,этой ссылке из документов aws должно быть полезно. Вот как они предлагают это сделать, но я продолжаю сталкиваться с ошибками, говоря NetworkConfiguration не признала и LaunchType не признанный.

 "EcsParameters": { 
        "Group": "string",
        "LaunchType": "string",
        "NetworkConfiguration": { 
           "awsvpcConfiguration": { 
              "AssignPublicIp": "string",
              "SecurityGroups": [ "string" ],
              "Subnets": [ "string" ]
           }
        },

обновление: вот альтернатива, которая в конечном итоге работает для меня через aws events put-targets команда на aws cli!

убедитесь, что ваш AWS cli обновлен. Этот способ не для старых версии cli. запустите это, чтобы обновить:pip install awscli --upgrade --user

после этого, вы должны быть хорошо идти. Используйте . Убедитесь, что перед выполнением этой команды в кластере уже определено правило. Если нет, вы можете сделать это с the aws events put-rule cmd тоже. Обратитесь к AWS docs for put-rule и для put-targets.

пример правила из документации приведен ниже:

aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"

команда put-targets, которая работала для меня, такова:

aws events put-targets --rule cli-RS-rule --targets '{"Arn": "arn:aws:ecs:1234/cluster/clustername","EcsParameters": {"LaunchType": "FARGATE","NetworkConfiguration": {"awsvpcConfiguration": {"AssignPublicIp": "ENABLED", "SecurityGroups": [ "sg-id1233" ], "Subnets": [ "subnet-1234" ] }},"TaskCount": 1,"TaskDefinitionArn": "arn:aws:ecs:1234:task-definition/taskdef"},"Id": "sampleID111","RoleArn": "arn:aws:iam:1234:role/eventrole"}'

нет, это пока не поддерживается, к сожалению. Есть открытый вопрос здесь. Надеюсь, это будет сделано в ближайшее время, как я хотел бы использовать его, как хорошо!


раскрытие: я работаю на SenseDeep, который обеспечивает Powerdown @ https://www.powerdown.io

другие службы предоставляют эту функциональность. PowerDown дает возможность планировать услуги Fargate. Это на уровне обслуживания, а не на уровне задачи, но легко создавать службы для задач. Например: вы можете запланировать контейнер трубопровода CICD для запуска 9-5 M-F.


невозможно иметь экземпляры EC2 и экземпляры Fargate в одном кластере.

можно запланировать экземпляр Fargate. Создайте определенный сервис и обновите его с помощью инструментов aws. Ex:

aws ecs update-service --service my-http-service --task-definition

https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html

полезные ресурсы:

вы можете использовать инструменты ECS aws и выполнять на lambda или travis.

проверить этот средний пост:

https://medium.com/@joseignaciocastelli92/how-to-create-a-continuous-deployment-process-using-ecs-fargate-docker-travis-410d84b4d99e

на кнопке есть этот репозиторий, который имеет команды aws:

https://github.com/JicLotus/ecs-farate-scripts-to-deploy-and-build

Bests