如何在AWS Fargate上安排ECS任务

时间:2017-12-06 18:40:14

标签: amazon-ecs aws-fargate

我在Elastic Container Service上创建了一个任务定义,并已成功在Fargate群集中运行它。但是,当我在所述群集中创建一个计划任务时,选项为"启动类型"被硬编码为EC2。有没有办法,可能通过命令行安排任务在Fargate上运行?

enter image description here

7 个答案:

答案 0 :(得分:8)

抬起头! AWS现在支持此功能:

https://aws.amazon.com/about-aws/whats-new/2018/08/aws-fargate-now-supports-time-and-event-based-task-scheduling/

尽管不在某些地区-截至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-rulefor 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上执行。

查看这篇中等帖子:

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

在按钮处,此存储库包含aws命令:

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

最佳