Как планировать задачи ECS на AWAR Fargate
Я создал определение задачи в Elastic Container Service и успешно выполнил его в кластере Fargate. Однако, когда я создаю запланированную задачу в указанном кластере, опция "Тип запуска" жестко запрограммирована для EC2. Есть ли способ, возможно, через командную строку запланировать выполнение задачи на Fargate?
Ответы
Ответ 1
Берегись ! Это теперь поддерживается в AWS:
https://aws.amazon.com/about-aws/whats-new/2018/08/aws-fargate-now-supports-time-and-event-based-task-scheduling/
Хотя не в некоторых регионах - по состоянию на 19 апреля он все еще не был поддержан в ЕС-запад-2 (Лондон). Проверьте таблицу в верхней части этой страницы, чтобы узнать, поддерживается ли она в нужном вам регионе: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html.
Ответ 2
Кажется, что нет способа планировать задачу в FARGATE.
Только так, как это может быть сделано прямо сейчас, похоже, что ваш "планировщик" является внешним по отношению к ECS. Я сделал это с лямбдой. Вы также можете использовать что-то вроде jenkins или простой задачи cron, которая запускает команду aws-cli для ECS, в обоих случаях, хотя вам понадобится всегда исполняемый экземпляр.
Я написал лямбду, которая принимает параметры (переопределения), которые должны быть отправлены в задачу ECS, и имеет график, который должна была выполнять задача.
Обновление. Кажется, теперь есть вкладка расписания в данных FARGATE Cluster, которая позволит вам установить расписания cron для задач ECS.
Ответ 3
Хотя документация 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
После этого вам должно быть хорошо идти. Используйте команду aws events put-targets --rule <value> --targets <value>
. Убедитесь, что перед запуском этой команды у вас есть правило, уже определенное на вашем кластере. Если нет, вы можете сделать это с помощью команды aws events put-rule
cmd. Обратитесь к документам AWS для put-rule и для put-target.
Пример правила из документации приведен ниже:
aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"
Команда put-target, которая работала для меня, такова:
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"}'
Ответ 4
Вы можете создать правило CloudWatch, которое использует расписание как источник события и задачу ESC в качестве цели.
Ответ 5
К сожалению, это пока не поддерживается. Существует открытый вопрос здесь. Надеюсь, это скоро будет сделано, так как я тоже хотел бы использовать его!
Ответ 6
Раскрытие информации: я работаю для SenseDeep, который предоставляет Powerdown @https://www.powerdown.io
Другие функции предоставляют эту функциональность. PowerDown дает возможность планировать услуги Fargate. Это на уровне обслуживания, а не на уровне задач, но легко создавать службы для задач. Например: вы можете запланировать контейнер конвейера CICD для запуска 9-5 MF.
Ответ 7
Невозможно иметь экземпляры EC2 и экземпляры Fargate в одном кластере.
Можно запланировать экземпляр Fargate. Создайте определенный сервис и обновите его с помощью инструментов aws. Пример:
aws ecs update-service --service my-http-service --task-definition
https://docs.aws.amazon.com/cli/latest/reference/ecs/update-service.html
Полезные ресурсы:
Вы можете использовать инструменты ECS aws и выполнять на лямбда или 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