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

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

enter image description here

Ответ 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