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