Как планировать задачи ECS на AWS Fargate
Я создал определение задачи для службы эластичных контейнеров и успешно запустил его в кластере Fargate. Однако, когда я создаю запланированную задачу в указанном кластере, опция "Тип запуска" жестко закодирована в EC2. Есть ли способ, возможно, через командную строку, запланировать выполнение задачи на Fargate?
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.
проверить этот средний пост:
на кнопке есть этот репозиторий, который имеет команды aws:
https://github.com/JicLotus/ecs-farate-scripts-to-deploy-and-build
Bests