如何以编程方式停止 AWS Fargate 容器?
How to stop AWS Fargate container programmatically?
问题:我们有一个预定的作业(AWS Fargate + Lambda + DynamoDB)这将 运行 每天。但是由于一些问题,如果容器卡住了,我们需要停止容器并再次重新触发相同的作业。
我们有什么方法可以 stop/timeout AWS Fargate 任务吗?
您可以检查任务的状态,使用 ECS cli 停止并重新启动它们,并为此创建一个脚本。
您可以在控制台或通过 AWS CLI 执行此操作。您可能想使用 stop-task API 来做到这一点。这需要您首先获取列出集群中任务的任务 ID,然后根据您需要过滤的内容(我猜是任务定义?)过滤它们。
您不需要构建额外的逻辑。您可以利用内置的 HEALTHCHECK 功能。
您可以在 official documentation 页面
阅读更多信息
创建任务定义时,在容器部分,您将看到高级容器配置
您可以在此处为 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
所以连续检查container fill all failure retries之后,就判定为unhealthy,然后自动停止并替换。您不需要额外的控制器、检查器、调谐器!
只需编写一个简单的健康检查,它真正表明您的容器是健康的。
对方条件要注意;
需要在服务中定义任务。
如果您使用的平台版本为 1.1.0 或更高版本,则 Fargate 任务支持容器运行状况检查。
作为配置为使用 Classic Load Balancer 的服务的一部分的任务不支持容器运行状况检查。
问题:我们有一个预定的作业(AWS Fargate + Lambda + DynamoDB)这将 运行 每天。但是由于一些问题,如果容器卡住了,我们需要停止容器并再次重新触发相同的作业。
我们有什么方法可以 stop/timeout AWS Fargate 任务吗?
您可以检查任务的状态,使用 ECS cli 停止并重新启动它们,并为此创建一个脚本。
您可以在控制台或通过 AWS CLI 执行此操作。您可能想使用 stop-task API 来做到这一点。这需要您首先获取列出集群中任务的任务 ID,然后根据您需要过滤的内容(我猜是任务定义?)过滤它们。
您不需要构建额外的逻辑。您可以利用内置的 HEALTHCHECK 功能。 您可以在 official documentation 页面
阅读更多信息创建任务定义时,在容器部分,您将看到高级容器配置 您可以在此处为 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 |
所以连续检查container fill all failure retries之后,就判定为unhealthy,然后自动停止并替换。您不需要额外的控制器、检查器、调谐器! 只需编写一个简单的健康检查,它真正表明您的容器是健康的。
对方条件要注意;
需要在服务中定义任务。
如果您使用的平台版本为 1.1.0 或更高版本,则 Fargate 任务支持容器运行状况检查。
作为配置为使用 Classic Load Balancer 的服务的一部分的任务不支持容器运行状况检查。