Amazon ECS 태스크 스케일인 보호 엔드포인트

Amazon ECS 태스크 스케일인 보호 엔드포인트

Amazon ECS 컨테이너 에이전트는 컨테이너 에이전트 API 엔드포인트와 상호 작용할 수 있는 방법을 제공하기 위해 ECS_AGENT_URI 환경 변수를 Amazon ECS 태스크의 컨테이너에 자동으로 주입해요. 보호가 필요하다는 것을 스스로 판단할 수 있는 태스크에는 Amazon ECS 컨테이너 에이전트 엔드포인트를 사용할 것을 권장해요.

출처: 문서

본문

컨테이너가 작업 처리(taking work)를 시작할 때 컨테이너 내부에서 태스크 스케일인 보호 엔드포인트 경로 $ECS_AGENT_URI/task-protection/v1/state 를 사용해 protectionEnabled 속성을 설정할 수 있어요. 이 URI에 대한 PUT 요청을 컨테이너 내부에서 사용해 태스크 스케일인 보호를 설정해요. 이 URI에 대한 GET 요청은 태스크의 현재 보호 상태를 반환해요.

태스크 스케일인 보호 요청 파라미터 $ { ECS_AGENT_URI}/task-protection/v1/state 엔드포인트로 다음 요청 파라미터를 사용해 태스크 스케일인 보호를 설정할 수 있어요.

  • ProtectionEnabled
    • 태스크를 보호 대상으로 표시하려면 true 를 지정해요. 보호를 제거하고 태스크가 종료 대상이 되게 하려면 false 를 지정해요.
    • 유형: Boolean
    • 필수: 예
  • ExpiresInMinutes
    • 태스크가 보호되는 시간(분). 최소 1분에서 최대 2,880분(48시간)까지 지정할 수 있어요. 이 기간 동안 태스크는 서비스 Auto Scaling이나 배포의 스케일인 이벤트로 종료되지 않아요. 이 기간이 지나면 protectionEnabled 파라미터가 false 로 설정돼요.
    • 시간을 지정하지 않으면 태스크가 자동으로 120분(2시간) 동안 보호돼요.
    • 유형: Integer
    • 필수: 아니요

다음 예제는 서로 다른 기간으로 태스크 보호를 설정하는 방법을 보여 줘요.

기본 시간으로 태스크 보호 예제 이 예제는 태스크를 기본 시간인 2시간 동안 보호하는 방법을 보여 줘요.

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

60분 동안 태스크 보호 예제 이 예제는 expiresInMinutes 파라미터를 사용해 태스크를 60분 동안 보호하는 방법을 보여 줘요.

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

24시간 동안 태스크 보호 예제 이 예제는 expiresInMinutes 파라미터를 사용해 태스크를 24시간 동안 보호하는 방법을 보여 줘요.

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

PUT 요청은 다음 응답을 반환해요.

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

태스크 스케일인 보호 응답 파라미터 $ { ECS_AGENT_URI}/task-protection/v1/state 태스크 스케일인 보호 엔드포인트에서 JSON 응답으로 다음 정보가 반환돼요.

  • ExpirationDate
    • 태스크의 보호가 만료되는 epoch 시간. 태스크가 보호되지 않으면 이 값은 null 이에요.
  • ProtectionEnabled
    • 태스크의 보호 상태. 태스크에 스케일인 보호가 활성화되어 있으면 값은 true 이고, 그렇지 않으면 false 예요.
  • TaskArn
    • 컨테이너가 속한 태스크의 전체 Amazon Resource Name(ARN).

다음 예제는 보호된 태스크에 대해 반환된 세부 정보를 보여 줘요.

curl --request GET ${ECS_AGENT_URI}/task-protection/v1/state
{
    "protection":{
        "ExpirationDate":"2023-12-20T21:57:44Z",
        "ProtectionEnabled":true,
        "TaskArn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
    }
}

실패가 발생하면 다음 정보가 반환돼요.

  • Arn
    • 태스크의 전체 Amazon Resource Name(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 Resource Name(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"
  }
}

더 알아보기 (Learn more)