【发布时间】:2021-04-09 22:26:00
【问题描述】:
问题:我们有一个每天都会运行的计划作业(AWS Fargate + Lambda + DynamoDB)。但是由于某些问题,如果 Container 卡住了,我们需要停止容器并重新触发相同的作业。
有什么方法可以停止/超时 AWS Fargate 任务?
【问题讨论】:
标签: amazon-web-services amazon-ec2 aws-lambda amazon-dynamodb aws-fargate
问题:我们有一个每天都会运行的计划作业(AWS Fargate + Lambda + DynamoDB)。但是由于某些问题,如果 Container 卡住了,我们需要停止容器并重新触发相同的作业。
有什么方法可以停止/超时 AWS Fargate 任务?
【问题讨论】:
标签: amazon-web-services amazon-ec2 aws-lambda amazon-dynamodb aws-fargate
您可以在控制台上或通过 AWS CLI 执行此操作。您可能希望使用stop-task API 来执行此操作。这要求您首先获取任务 ID,列出集群中的任务,然后根据您需要过滤的内容(我猜是任务定义?)过滤它们。
【讨论】:
您不需要构建额外的逻辑。您可以利用内置的 HEALTHCHECK 功能。 您可以在official documentation页面阅读更多信息
在创建 TASK 定义时,在容器部分,您将看到高级容器配置 您可以在此处为 HEALTHCHECK 指定以下属性:
| Attribute | Description | Default Value |
|---|---|---|
| Command | The healthcheck command, it can be one-liner command or a shell script call | None |
| Interval | The time period in seconds between each health check execution between 5 and 300 seconds. | 30 seconds |
| Timeout | The time period in seconds to wait for a health check to succeed before it is considered a failure between 2 and 60 seconds | 5 seconds |
| Start Period | waiting time to before doing health check(container booting time) . It can be 0-300seconds | Disabled |
| Retries | The number of times to retry a failed health check before the container is considered unhealthy between 1 and 10 retries | 3 retries |
所以在使用正确的参数指定健康检查一个线性命令或脚本后,健康检查将连续运行。根据您指定的 HealthCheck 命令的结果,每次检查执行后您有 2 个结果
| Condition | HealthCheck Status |
|---|---|
| An exit code of 0 | Success |
| A non-zero exit code | Failure |
所以在连续检查容器是否填满所有失败重试后,将被确定为不健康,然后将自动停止并替换。您不需要额外的控制器、检查器、调谐器! 只需编写一个简单的健康检查,它确实表明您的容器是健康的。
其他的条件要注意了;
任务需要在服务中定义。
如果您使用的是 1.1.0 或更高版本的平台,则 Fargate 任务支持容器运行状况检查。
对于属于配置为使用 Classic Load Balancer 的服务的一部分的任务,不支持容器运行状况检查。
【讨论】:
您可以检查任务的状态,使用 ECS cli 停止和重新启动它们,并为此创建一个脚本。
【讨论】: