Amazon web services 更新Fargate TaskDefinition后,触发任务的CloudWatch事件由于非活动任务定义而失败
我在ECS中定义了一系列任务,这些任务按照定期计划运行。我最近在Terraform中更新了任务定义,将容器的默认环境变量从调试更改为生产: 我使用Fargate的Scheduled Tasks功能运行此任务,将其设置为每4小时一次。然而,在更新了任务定义之后,我开始发现这些任务不是由CloudWatch触发的,因为我的上一个容器日志是几天前的 我使用CloudTrail深入研究了这个问题,并注意到RunTask事件条目的一个特定部分: 在日志的后面,我注意到ECS试图运行的任务定义是Amazon web services 更新Fargate TaskDefinition后,触发任务的CloudWatch事件由于非活动任务定义而失败,amazon-web-services,amazon-ecs,Amazon Web Services,Amazon Ecs,我在ECS中定义了一系列任务,这些任务按照定期计划运行。我最近在Terraform中更新了任务定义,将容器的默认环境变量从调试更改为生产: 我使用Fargate的Scheduled Tasks功能运行此任务,将其设置为每4小时一次。然而,在更新了任务定义之后,我开始发现这些任务不是由CloudWatch触发的,因为我的上一个容器日志是几天前的 我使用CloudTrail深入研究了这个问题,并注意到RunTask事件条目的一个特定部分: 在日志的后面,我注意到ECS试图运行的任务定义是 "tas
"taskDefinition": "arn:aws:ecs:us-east-1:XXXXX:task-
definition/important-task-name:2",
但是,在我的ECS任务定义中,重要任务名称的最新版本是3。因此,事件似乎没有触发,因为我正在使用任务定义的非活动版本
我是否可以在AWS Fargate中安排任务,而不必手动通过控制台停止/重新启动/更新每个集群的计划更新?难道没有办法简单地要求CloudWatch获取最新的活动任务定义吗?云地图似乎是解决这些问题的一种方法
您可以使用CloudWatch事件规则来控制计划任务,并且无论何时更新任务定义,都可以更新规则。假设您有两个文件: myRule.json
{
"Name": "run-every-minute",
"ScheduleExpression": "cron(0/1 * * * ? *)",
"State": "ENABLED",
"Description": "a task that will run every minute",
"RoleArn": "arn:aws:iam::${IAM_NUMBER}:role/ecsEventsRole",
"EventBusName": "default"
}
myTargets.json
{
"Rule": "run-every-minute",
"Targets": [
{
"Id": "scheduled-task-example",
"Arn": "arn:aws:ecs:${REGION}:${IAM_NUMBER}:cluster/mycluster",
"RoleArn": "arn:aws:iam::${IAM_NUMBER}:role/ecsEventsRole",
"Input": "{\"containerOverrides\":[{\"name\":\"myTask\",\"environment\":[{\"name\":\"ENVIRONMENT\",\"value\":\"production\"},{\"name\":\"foo\",\"value\":\"bar\"}]}]}",
"EcsParameters": {
"TaskDefinitionArn": "arn:aws:ecs:${REGION}:${IAM_NUMBER}:task-definition/myTaskDefinition",
"TaskCount": 1,
"LaunchType": "FARGATE",
"NetworkConfiguration": {
"awsvpcConfiguration": {
"Subnets": [
"subnet-xyz1",
"subnet-xyz2",
],
"SecurityGroups": [
"sg-xyz"
],
"AssignPublicIp": "ENABLED"
}
},
"PlatformVersion": "LATEST"
}
}
]
}
现在,每当myTaskDefinition有新版本时,您都可以更新您的规则,例如:
aws事件放置规则-cli输入jsonfile://myRule.json -地区$地区
aws事件放置目标-cli输入jsonfile://myTargets.json -地区$地区
回音“完成”
但当然,用您的凭证替换IAM_编号和地区,虽然这可以从理论上回答问题,但在此处包含答案的基本部分,并提供链接供参考。您找到解决方案了吗?@MatheusIanzer no我没有
{
"Name": "run-every-minute",
"ScheduleExpression": "cron(0/1 * * * ? *)",
"State": "ENABLED",
"Description": "a task that will run every minute",
"RoleArn": "arn:aws:iam::${IAM_NUMBER}:role/ecsEventsRole",
"EventBusName": "default"
}
{
"Rule": "run-every-minute",
"Targets": [
{
"Id": "scheduled-task-example",
"Arn": "arn:aws:ecs:${REGION}:${IAM_NUMBER}:cluster/mycluster",
"RoleArn": "arn:aws:iam::${IAM_NUMBER}:role/ecsEventsRole",
"Input": "{\"containerOverrides\":[{\"name\":\"myTask\",\"environment\":[{\"name\":\"ENVIRONMENT\",\"value\":\"production\"},{\"name\":\"foo\",\"value\":\"bar\"}]}]}",
"EcsParameters": {
"TaskDefinitionArn": "arn:aws:ecs:${REGION}:${IAM_NUMBER}:task-definition/myTaskDefinition",
"TaskCount": 1,
"LaunchType": "FARGATE",
"NetworkConfiguration": {
"awsvpcConfiguration": {
"Subnets": [
"subnet-xyz1",
"subnet-xyz2",
],
"SecurityGroups": [
"sg-xyz"
],
"AssignPublicIp": "ENABLED"
}
},
"PlatformVersion": "LATEST"
}
}
]
}