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
- 필수: 아니요
- 태스크가 보호되는 시간(분). 최소 1분에서 최대 2,880분(48시간)까지 지정할 수 있어요. 이 기간 동안 태스크는 서비스 Auto Scaling이나 배포의 스케일인 이벤트로 종료되지 않아요. 이 기간이 지나면
다음 예제는 서로 다른 기간으로 태스크 보호를 설정하는 방법을 보여 줘요.
기본 시간으로 태스크 보호 예제 이 예제는 태스크를 기본 시간인 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이에요.
- 태스크의 보호가 만료되는 epoch 시간. 태스크가 보호되지 않으면 이 값은
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"
}
}