web-dev-qa-db-fra.com

Comment planifier des tâches ECS sur AWS Fargate

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?

 enter image description here

12
Jared S
6
David Lin

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.

7
NikhilWanpal

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"}'
4
tanvi

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.

2
André

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.

0
PowerDown

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:

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

Au bouton, ce référentiel contient les commandes aws:

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

Meilleurs

0
jiccranck

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!

0
coolboyjules