我在Elastic Container Service上创建了一个任务定义,并已成功在Fargate群集中运行它。但是,当我在所述群集中创建一个计划任务时,选项为"启动类型"被硬编码为EC2。有没有办法,可能通过命令行安排任务在Fargate上运行?
答案 0 :(得分:8)
抬起头! AWS现在支持此功能:
尽管不在某些地区-截至4月19日,EU-west-2(伦敦)仍不支持该功能。查看此页面顶部的表,以查看您想要的区域是否支持该表:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html
答案 1 :(得分:7)
似乎无法在FARGATE上安排任务。
现在只能通过让你的'调度程序'在ECS外部来实现。我用lambda做了。您也可以使用类似jenkins或简单的cron任务来触发ECS的aws-cli命令,但在这两种情况下你都需要一个总是运行的实例。
我写了一个lambda,它接受要发送到ECS任务的params(覆盖)并且具有该任务应该具有的调度。
更新: 现在FARGATE Cluster详细信息中似乎有一个计划选项卡,允许您在ECS任务上设置cron计划。
答案 2 :(得分:4)
尽管AWS文档为您提供了通过CloudFormation进行此操作的方法,但似乎他们仍未发布此功能。我一直在尝试做something similar并遇到相同的问题。
一旦它变得可用,aws文档中的this link应该会有用。他们建议这样做,但我一直遇到错误,说无法识别NetworkConfiguration
并且无法识别LaunchType
。
"EcsParameters": {
"Group": "string",
"LaunchType": "string",
"NetworkConfiguration": {
"awsvpcConfiguration": {
"AssignPublicIp": "string",
"SecurityGroups": [ "string" ],
"Subnets": [ "string" ]
}
},
更新:以下是一种替代方法,它最终通过aws cli上的aws events put-targets
命令为我工作了!
确保您的AWS CLI是最新的。此方法对于较旧的失败
CLI的版本。运行此命令以更新:pip install awscli --upgrade --user
在那之后,您应该很好。使用aws events put-targets --rule <value> --targets <value>
命令。确保在运行此命令之前,您已经在集群上定义了一条规则。如果没有,您也可以使用aws events put-rule
cmd来完成。请参考AWS docs for put-rule和for 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"}'
答案 3 :(得分:2)
您可以创建一个CloudWatch规则,该规则使用计划作为事件源,并使用ESC任务作为目标。
答案 4 :(得分:0)
不幸的是,不支持这个。有一个未解决的问题new ForEachDStream is created and registered。希望它尽快完成,因为我也想使用它!
答案 5 :(得分:0)
披露:我为SenseDeep工作,提供Powerdown @ https://www.powerdown.io
其他服务提供此功能。 PowerDown提供了安排Fargate服务的能力。这是服务级别,而不是任务级别,但很容易为任务创建服务。例如:您可以安排CICD管道容器运行9-5 M-F。
答案 6 :(得分:0)
不可能在同一群集中拥有EC2实例和Fargate实例。
可以安排Fargate实例。创建特定的服务,然后通过aws工具对其进行更新。例如:
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
最佳