任务横向缩减保护端点
如果您使用的是托管在 AWS Fargate 上的 Amazon ECS 任务,请参阅《用于 AWS Fargate 的 Amazon Elastic Container Service 用户指南》中的任务横向缩减保护端点。
使用 Amazon ECS 任务缩容保护来保护您的任务,使其不因来自 Service Auto Scaling 或部署的横向缩减事件而终止。您可以在任务容器应用程序代码中设置和获取任务横向缩减保护的状态。
Amazon ECS 容器代理使用 AWS API GetTaskProtection 和 UpdateTaskProtection 来提供任务横向缩减保护。有关失败原因的列表,请参阅 API 失败原因。
有关任务横向缩减保护的更多信息,请参阅 任务横向缩减保护
任务横向缩减保护端点路径
以下任务横向缩减保护端点路径可供容器使用:$ECS_AGENT_URI/task-protection/v1/state
从容器内向此 URI 发出的 PUT 请求将设置任务横向缩减保护。向此 URI 发出的 GET 请求将获得任务的当前保护状态。
任务横向缩减保护端点请求
您可以使用具有以下请求参数的 (${ECS_AGENT_URI/task-protection/v1/state})
端点设置任务横向缩减保护。
保护
ProtectionEnabled
-
指定
true
以标记要保护的任务,指定false
以取消设置保护,使其符合终止条件。类型:布尔值
必需:是
ExpiresInMinutes
-
如果将
protectionEnabled
设置为true
,则可以使用expiresInMinutes
参数来指定必须保护任务多长时间。您可以指定最少 1 分钟到最多 2,880 分钟(48 小时)。在这段时间内,您的任务不会因来自 Service Auto Scaling 或部署的横向缩减事件而终止。在这段时间过后,protectionEnabled
参数将重置为false
如果您未指定时间,则任务将自动保护 120 分钟(2 小时)。
类型:整数
必需:否
以下示例显示了如何设置不同持续时间的任务保护。
示例 1
此示例显示了如何在 2 小时的默认时间段内保护任务。
PUT $ECS_AGENT_URI/task-protection/v1/state -d '{"ProtectionEnabled":true}'
示例 2
此示例显示了如何使用 expiresInMinutes
参数保护任务 60 分钟。
PUT $ECS_AGENT_URI/task-protection/v1/state -d '{"ProtectionEnabled":true,"ExpiresInMinutes":60}'
示例 3
此示例显示了如何使用 expiresInMinutes
参数保护任务 24 小时。
PUT $ECS_AGENT_URI/task-protection/v1/state -d '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}'
任务横向缩减保护端点响应
以下信息返回自任务横向缩减保护端点 (${ECS_AGENT_URI/task-protection/v1/state}
) JSON 响应。
保护
ExpirationDate
-
任务保护到期的纪元时间。如果任务未受到保护,则此值将为 null。
ProtectionEnabled
-
任务的保护状态。如果为任务启用了横向缩减保护,则值为
true
。否则为false
。 TaskArn
-
容器所属的任务的完整 Amazon Resource Name (ARN)。
以下示例显示了针对受保护的任务返回的详细信息。
GET $ECS_AGENT_URI/task-protection/v1/state
{ "protection":{ "ExpirationDate":"2022-10-06T02:29:16Z", "ProtectionEnabled":true, "TaskArn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0" } }
失败
发生故障时会返回以下信息。
Arn
-
任务的 Amazon 资源名称(ARN)。
Detail
-
与故障相关的详细信息。
Reason
-
失败的原因。
以下示例显示了针对未受保护的任务返回的详细信息。
{ "failure":{ "Arn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0", "Detail":null, "Reason":"TASK_NOT_VALID" } }
错误
出现异常时会返回以下信息。
requestID
-
导致异常的 Amazon ECS API 调用的 AWS 请求 ID。
Arn
-
任务或服务的 Amazon 资源名称(ARN)全名。
Code
-
错误代码。
Message
-
错误消息。
注意 如果出现
RequestError
或RequestTimeout
错误,则很可能遇到了联网问题。尝试用于 Amazon ECS 的 VPC 端点。
以下示例显示了发生错误时返回的详细信息。
{ "requestID":"12345-abc-6789-0123-abc", "error":{ "Arn":"arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0", "Code":"AccessDeniedException", "Message":"User: arn:aws:sts::444455556666:assumed-role/my-ecs-task-role/1234567890abcdef0 is not authorized to perform: ecs:GetTaskProtection on resource: arn:aws:ecs:us-west-2:555555555555:task/test/1234567890abcdef0 because no identity-based policy allows the ecs:GetTaskProtection action" } }
如果 Amazon ECS 代理由于网络问题或 Amazon ECS 控制面板关闭等原因无法从 Amazon ECS 端点获得响应,则会出现以下错误。
{ "error": { "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0", "Code": "RequestCanceled", "Message": "Timed out calling Amazon ECS Task Protection API" } }
当 Amazon ECS 代理收到来自 Amazon ECS 的节流异常时,就会出现以下错误。
{ "requestID": "12345-abc-6789-0123-abc", "error": { "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0", "Code": "ThrottlingException", "Message": "Rate exceeded" } }