16

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

在此处输入图像描述

4

7 回答 7

10

小心 !这现在在 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

于 2018-09-06T01:20:39.413 回答
8

似乎没有办法在 FARGATE 上安排任务。

现在可以完成的唯一方法似乎是将您的“调度程序”置于 ECS 外部。我用 lambda 做到了。您还可以使用诸如 jenkins 之类的东西或一个简单的 cron 任务来将 aws-cli 命令触发到 ECS,尽管在这两种情况下您都需要一个始终运行的实例。

我编写了一个 lambda,它接受要发送到 ECS 任务的参数(覆盖)并具有该任务应该具有的时间表。

更新:现在 FARGATE 集群详细信息中似乎有一个计划选项卡,可让您在 ECS 任务上设置 cron 计划。

于 2018-01-18T06:03:53.373 回答
5

虽然 AWS 文档为您提供了通过 CloudFormation 执行此操作的方法,但他们似乎还没有发布此功能。我一直在尝试做类似的事情并遇到了同样的问题。一旦它变得可用, aws 文档中的这个链接应该很有用。以下是他们建议的做法,但我一直遇到错误,说不NetworkConfiguration被识别和LaunchType不被识别。

 "EcsParameters": { 
        "Group": "string",
        "LaunchType": "string",
        "NetworkConfiguration": { 
           "awsvpcConfiguration": { 
              "AssignPublicIp": "string",
              "SecurityGroups": [ "string" ],
              "Subnets": [ "string" ]
           }
        },

更新:这是一个替代方案,它最终通过aws events put-targetsaws cli 上的命令为我工作!

确保您的 aws cli 是最新的。对于旧版本的 cli,此方法失败。运行此更新: pip install awscli --upgrade --user

在那之后,你应该很高兴。使用aws events put-targets --rule <value> --targets <value>命令。确保在运行此命令之前,您已经在集群上定义了规则。如果没有,您也可以使用aws events put-rulecmd 执行此操作。有关 put-ruleput-targets的信息,请参阅AWS 文档。

下面给出了文档中的规则示例:

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"}'
于 2018-09-06T20:03:07.870 回答
2

您可以创建使用计划作为事件源和 ESC 任务作为目标的 CloudWatch 规则。

于 2018-05-06T13:52:37.530 回答
0

不,不幸的是,这还不支持。这里有一个未解决的问题。希望它尽快完成,因为我也想使用它!

于 2017-12-25T21:01:51.117 回答
0

披露:我为提供 Powerdown @ https://www.powerdown.io的 SenseDeep 工作

其他服务提供此功能。PowerDown 提供了安排 Fargate 服务的能力。这是在服务级别,而不是任务级别,但很容易为任务创建服务。例如:您可以安排 CICD 管道容器运行 9-5 MF。

于 2018-03-06T21:30:45.393 回答
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

最好的

于 2018-08-11T18:46:20.953 回答