

# Endpoint de Proteção de Tarefa na Redução de Escala do Amazon ECS
<a name="task-scale-in-protection-endpoint"></a>

O agente de contêiner do Amazon ECS injeta automaticamente a variável de ambiente `ECS_AGENT_URI` nos contêineres de tarefas do Amazon ECS para fornecer um método de interação com o endpoint da API do agente de contêiner.

Recomendamos o uso do endpoint do agente de contêiner do Amazon ECS para tarefas que possam autodeterminar a necessidade de proteção. 

Quando um contêiner começa a processar o trabalho, você pode definir o atributo `protectionEnabled` por meio do caminho `$ECS_AGENT_URI/task-protection/v1/state` do endpoint de proteção de tarefa na redução de escala de dentro do contêiner. 

Use uma solicitação PUT para esse URI de dentro de um contêiner para definir a proteção de tarefa na redução da escala. Uma solicitação GET para esse URI retorna o status atual da proteção de uma tarefa.

## Parâmetros de solicitação da proteção de tarefa na redução de escala
<a name="task-scale-in-protection-request"></a>

É possível definir a proteção de tarefa na redução da escala na horizontal usando o endpoint `${ECS_AGENT_URI}/task-protection/v1/state` com os parâmetros de solicitação a seguir.

`ProtectionEnabled`  
Especifique `true` para que uma tarefa receba proteção. Especifique `false` para remover a proteção e tornar a tarefa elegível para encerramento.  
Tipo: booliano  
Obrigatório: Sim

`ExpiresInMinutes`  
O número de minutos em que a tarefa é protegida. É possível especificar, no mínimo, de 1 minuto a 2.880 minutos (48 horas). Durante esse período, a tarefa não será encerrada por eventos de redução da escala na horizontal decorrentes de ajuste de escala automático do serviço ou de implantações. Após esse período, o parâmetro `protectionEnabled` será definido como `false`  
Se você não especificar o período, a tarefa será automaticamente protegida por 120 minutos (2 horas).  
Tipo: inteiro  
Obrigatório: não

Os exemplos a seguir mostram como definir uma proteção de tarefa na redução da escala horizontalmente com diferentes durações.

**Exemplo de como proteger uma tarefa com o período padrão**

Este exemplo mostra como proteger uma tarefa com o período padrão de duas horas.

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true}'
```

**Exemplo de como proteger uma tarefa por 60 minutos**

Este exemplo mostra como proteger uma tarefa por 60 minutos usando o parâmetro `expiresInMinutes`.

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":60}'      
```

**Exemplo de como proteger uma tarefa por 24 horas**

Este exemplo mostra como proteger uma tarefa por 24 horas usando o parâmetro `expiresInMinutes`.

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}'      
```

**Exemplos de contêineres do Windows**

Para contêineres do Windows, você pode usar o cmdlet `Invoke-RestMethod` do PowerShell em vez do curl. Os exemplos a seguir mostram os equivalentes do PowerShell dos comandos curl anteriores.

**Exemplo de como proteger uma tarefa de contêiner do Windows com o período de tempo padrão**

Este exemplo mostra como proteger uma tarefa com o período de tempo padrão de duas horas usando o PowerShell.

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true}' -ContentType 'application/json'
```

**Exemplo de como proteger uma tarefa de contêiner do Windows por 60 minutos**

Este exemplo mostra como proteger uma tarefa por 60 minutos usando o parâmetro `expiresInMinutes` com o PowerShell.

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true,"ExpiresInMinutes":60}' -ContentType 'application/json'
```

**Exemplo de como proteger uma tarefa de contêiner do Windows por 24 horas**

Este exemplo mostra como proteger uma tarefa por 24 horas usando o parâmetro `expiresInMinutes` com o PowerShell.

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}' -ContentType 'application/json'
```

A solicitação PUT retorna a resposta a seguir.

```
{
  "protection": {
    "ExpirationDate": "2023-12-20T21:57:44.837Z",
    "ProtectionEnabled": true,
    "TaskArn": "arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
  }
}
```

## Parâmetros de resposta da proteção de tarefa na redução de escala
<a name="task-scale-in-protection-response"></a>

As informações a seguir são retornadas do endpoint de proteção de tarefa na redução da escala `${ECS_AGENT_URI}/task-protection/v1/state` na resposta em JSON .

`ExpirationDate`  
O período em que a proteção da tarefa expirará. Se a tarefa não estiver protegida, esse valor será nulo.

`ProtectionEnabled`  
O status de proteção da tarefa. Se a proteção contra redução da escala horizontalmente estiver ativada para uma tarefa, o valor será `true`. Caso contrário, ele será `false`.

`TaskArn`  
O nome de recurso da Amazon (ARN) da tarefa à qual o contêiner pertence.

O exemplo a seguir mostra os detalhes retornados para uma tarefa protegida.

```
curl --request GET ${ECS_AGENT_URI}/task-protection/v1/state
```

Para contêineres do Windows, use o seguinte comando do PowerShell para obter o status da proteção:

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Get
```

```
{
    "protection":{
        "ExpirationDate":"2023-12-20T21:57:44Z",
        "ProtectionEnabled":true,
        "TaskArn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
    }
}
```

As informações a seguir são retornadas quando ocorre uma falha.

`Arn`  
O nome completo do recurso da Amazon (ARN) da tarefa.

`Detail`  
Os detalhes relacionados à falha.

`Reason`  
O motivo da falha.

O exemplo a seguir mostra os detalhes retornados para uma tarefa que não está protegida.

```
{
    "failure":{
        "Arn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0",
        "Detail":null,
        "Reason":"TASK_NOT_VALID"
    }
}
```

As informações a seguir são retornadas quando ocorre uma exceção.

`requestID`  
O ID da solicitação da AWS para a chamada de API do Amazon ECS que resulta em uma exceção.

`Arn`  
O nome completo do recurso da Amazon (ARN) da tarefa ou serviço.

`Code`  
O código do erro.

`Message`  
A mensagem de erro.  
Se surgir um erro `RequestError` ou `RequestTimeout`, provavelmente será um problema de rede. Experimente usar endpoints da VPC para o Amazon ECS.

O exemplo a seguir mostra os detalhes retornados quando ocorre um erro.

```
{
    "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"
    }    
}
```

O erro a seguir será exibido se o agente do Amazon ECS não conseguir obter uma resposta do endpoint do Amazon ECS devido a problemas de rede ou inoperância do ambiente de gerenciamento do 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"
  }
}
```

O erro a seguir é exibido quando o agente do Amazon ECS recebe uma exceção de controle de utilização do 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"
  }
}
```