如何在 AWS Fargate 上安排 ECS 任务
How to schedule ECS tasks on AWS Fargate
我在 Elastic Container Service 上创建了一个任务定义,并在 Fargate 集群中成功 运行。但是,当我在所述集群中创建计划任务时,"Launch Type" 的选项被硬编码到 EC2。有没有办法,也许通过命令行将任务安排到 Fargate 上的 运行?
不,不幸的是,目前尚不支持此功能。有一个未解决的问题 here。希望尽快搞定,我也想用!
似乎无法在 FARGATE 上安排任务。
目前唯一可以做到的方法似乎是让您的 'scheduler' 位于 ECS 外部。我是用 lambda 做的。您还可以使用类似 jenkins 的东西或将 aws-cli 命令触发到 ECS 的简单 cron 任务,在这两种情况下,尽管您总是需要一个实例 运行.
我编写了一个 lambda,它接受要发送到 ECS 任务的参数(覆盖)并具有该任务应该具有的计划。
更新:
现在 FARGATE 集群详细信息中似乎有一个计划选项卡,允许您在 ECS 任务上设置 cron 计划。
披露:我在 SenseDeep 工作,它提供 Powerdown @ https://www.powerdown.io
其他服务提供此功能。 PowerDown 提供了安排 Fargate 服务的能力。这是服务级别的,不是任务级别的,但是很容易为任务创建服务。例如:您可以将 CICD 管道容器安排到 运行 9-5 M-F.
您可以创建一个 CloudWatch 规则,将计划用作事件源并将 ESC 任务用作目标。
不可能在同一集群中同时拥有 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 上执行。
查看此媒体 post:
在按钮处有这个存储库,其中包含 aws 命令:
https://github.com/JicLotus/ecs-farate-scripts-to-deploy-and-build
最佳
注意! AWS 现已支持:
尽管某些地区不支持 - 截至 4 月 19 日,EU-west-2(伦敦)仍不支持它。检查此页面顶部的 table 以查看您想要的区域是否支持它:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html
虽然 AWS 文档为您提供了通过 CloudFormation 执行此操作的方法,但他们似乎还没有发布此功能。我一直在尝试对同一问题进行 something similar 和 运行 处理。
一旦可用,aws 文档中的 this link 应该会有用。这是他们建议的做法,但我一直 运行ning 出错,说 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, and 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"}'
我在 Elastic Container Service 上创建了一个任务定义,并在 Fargate 集群中成功 运行。但是,当我在所述集群中创建计划任务时,"Launch Type" 的选项被硬编码到 EC2。有没有办法,也许通过命令行将任务安排到 Fargate 上的 运行?
不,不幸的是,目前尚不支持此功能。有一个未解决的问题 here。希望尽快搞定,我也想用!
似乎无法在 FARGATE 上安排任务。
目前唯一可以做到的方法似乎是让您的 'scheduler' 位于 ECS 外部。我是用 lambda 做的。您还可以使用类似 jenkins 的东西或将 aws-cli 命令触发到 ECS 的简单 cron 任务,在这两种情况下,尽管您总是需要一个实例 运行.
我编写了一个 lambda,它接受要发送到 ECS 任务的参数(覆盖)并具有该任务应该具有的计划。
更新: 现在 FARGATE 集群详细信息中似乎有一个计划选项卡,允许您在 ECS 任务上设置 cron 计划。
披露:我在 SenseDeep 工作,它提供 Powerdown @ https://www.powerdown.io
其他服务提供此功能。 PowerDown 提供了安排 Fargate 服务的能力。这是服务级别的,不是任务级别的,但是很容易为任务创建服务。例如:您可以将 CICD 管道容器安排到 运行 9-5 M-F.
您可以创建一个 CloudWatch 规则,将计划用作事件源并将 ESC 任务用作目标。
不可能在同一集群中同时拥有 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 上执行。
查看此媒体 post:
在按钮处有这个存储库,其中包含 aws 命令:
https://github.com/JicLotus/ecs-farate-scripts-to-deploy-and-build
最佳
注意! AWS 现已支持:
尽管某些地区不支持 - 截至 4 月 19 日,EU-west-2(伦敦)仍不支持它。检查此页面顶部的 table 以查看您想要的区域是否支持它:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html
虽然 AWS 文档为您提供了通过 CloudFormation 执行此操作的方法,但他们似乎还没有发布此功能。我一直在尝试对同一问题进行 something similar 和 运行 处理。
一旦可用,aws 文档中的 this link 应该会有用。这是他们建议的做法,但我一直 运行ning 出错,说 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, and 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"}'