J'ai créé une définition de tâche sur Elastic Container Service et l'ai exécutée avec succès dans un cluster Fargate. Cependant, lorsque je crée une tâche planifiée dans ledit cluster, l'option "Type de lancement" est codée en dur en EC2. Existe-t-il un moyen, peut-être via la ligne de commande, de planifier l'exécution de la tâche sur Fargate?
La tête haute ! Ceci est maintenant pris en charge dans AWS:
Il semble n'y avoir aucun moyen de planifier une tâche sur FARGATE.
La seule façon de le faire semble être d’avoir votre planificateur externe à ECS. Je l'ai fait avec un lambda. Vous pouvez également utiliser quelque chose comme un jenkins ou une simple tâche périodique qui déclenche la commande aws-cli vers ECS, bien que vous ayez besoin d'une instance toujours en cours d'exécution.
J'ai écrit un lambda qui accepte l'envoi des paramètres (paramétrages) à la tâche ECS et dispose du calendrier que la tâche était censée avoir.
Mise à jour: Il semble qu'il existe maintenant un onglet de planification dans les détails du cluster FARGATE qui vous permettra de définir des planifications périodiques des tâches ECS.
Bien que la documentation AWS vous permette de le faire via CloudFormation, il semble qu'ils n'aient pas encore publié cette fonctionnalité. J'ai essayé de faire quelque chose de similaire et ai rencontré le même problème. Une fois disponible, ce lien à partir des documents aws devrait être utile. Voici comment ils suggèrent de le faire, mais je continue à courir dans des erreurs en disant que NetworkConfiguration
n'est pas reconnu et LaunchType
n'est pas reconnu.
"EcsParameters": {
"Group": "string",
"LaunchType": "string",
"NetworkConfiguration": {
"awsvpcConfiguration": {
"AssignPublicIp": "string",
"SecurityGroups": [ "string" ],
"Subnets": [ "string" ]
}
},
Mise à jour: Voici une alternative qui a finalement fonctionné pour moi grâce à la commande aws events put-targets
sur le aws cli!
Assurez-vous que votre aws cli est à jour. Cette méthode échoue pour les anciens versions de la cli. lancez ceci pour mettre à jour: pip install awscli --upgrade --user
Après cela, vous devriez être prêt à partir. Utilisez la commande aws events put-targets --rule <value> --targets <value>
. Assurez-vous qu'avant d'exécuter cette commande, vous avez une règle déjà définie sur votre cluster. Sinon, vous pouvez également le faire avec le aws events put-rule
cmd. Reportez-vous aux docs AWS pour put-rule et pour put-cibles .
Un exemple de règle de la documentation est donné ci-dessous:
aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"
La commande put-cibles qui a fonctionné pour moi est la suivante:
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"}'
Vous pouvez créer une règle CloudWatch utilisant une planification en tant que source d'événements et une tâche ESC en tant que cible.
Divulgation: Je travaille pour SenseDeep qui fournit Powerdown @ https://www.powerdown.io
D'autres services fournissent cette fonctionnalité. PowerDown permet de planifier les services Fargate. C'est au niveau du service, pas au niveau de la tâche, mais il est facile de créer des services pour les tâches. Par exemple: vous pouvez planifier un conteneur de pipeline CICD pour exécuter 9-5 M-F.
Il n'est pas possible d'avoir des instances EC2 et Fargate dans le même cluster.
Il est possible de planifier une instance Fargate. Créez un service spécifique et mettez-le à jour à partir des outils aws. Ex:
aws ecs update-service --service my-http-service --task-definition
https://docs.aws.Amazon.com/cli/latest/reference/ecs/update-service.html
Ressources utiles:
Vous pouvez utiliser les outils aws d'ECS et exécuter lambda ou travis.
Découvrez ce post moyen:
Au bouton, ce référentiel contient les commandes aws:
https://github.com/JicLotus/ecs-farate-scripts-to-deploy-and-build
Meilleurs
Non ce n'est pas encore supporté malheureusement. Il y a un numéro en suspens ici . J'espère que cela se fera bientôt, car j'aimerais aussi l'utiliser!