J'essaie de configurer une tâche planifiée avec ECS Fargate mais je ne peux pas comprendre pourquoi elle ne fonctionne pas. Je peux confirmer que la tâche fonctionne correctement en utilisant RunTask
, mais lorsque j'essaie de la déclencher selon un calendrier, tout ce que je reçois est un groupe de 'FailedInvocations' sans explication.
Je sais cependant que la règle est en train d'être déclenchée, donc c'est un bon signe. Voir la capture d'écran ci-dessous:
Mais chaque fois que cela est déclenché, il y a juste une 'InvocationDécochée'. Voici la règle de planification:
Et les autorisations par défaut sur la ecsEventRole
avec juste ecs:runTask
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:RunTask"
],
"Resource": [
"*"
]
}
]
}
Mon intuition dit que cette ecsEventsRole
n'a pas assez d'autorisations. Devrais-je essayer de lui donner ceux que ecsTaskExecutionRole
a?
Merci
EDIT: Ceci est maintenant supporté dans la région us-east-1
. Voir les commentaires.
J'ai rencontré un problème similaire où des tâches planifiées ECS normales ne fonctionnaient pas.
Je l'ai finalement résolu en ajoutant une stratégie supplémentaire à ecsEventsRole
qui permet à CloudWatch Events de transférer les rôles IAM aux tâches ECS:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListInstanceProfiles",
"iam:ListRoles",
"iam:PassRole"
],
"Resource": "*"
}
]
}
Voici une solution de contournement possible: utilisez une fonction lambda comme cible pour la règle cloudwatch et créez la tâche dans le code de la fonction lambda.
Voici un exemple de code pour la fonction lambda: https://lobster1234.github.io/2017/12/03/run-tasks-with-aws-fargate-and-lambda/
Les liens décrivent comment compiler la nouvelle version de boto avec la fonction lambda, mais ce n'est plus nécessaire depuis qu'AWS a déjà mis à jour la version de lambda boto à 1.4.8.
J'ai testé et ça marche.
Avez-vous essayé d'utiliser aws cli et d'exécuter aws events put-rule
suivi de aws events put-targets --rule <value> --targets <value>
à la place? J'avais un problème similaire et utiliser la version récente de aws cli a fonctionné pour moi.
Voici un exemple:
aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"
Suivi de la commande ci-dessous sur une seule ligne:
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"}'