Amazon ECS 태스크 스케일인 보호 엔드포인트
Amazon ECS 태스크 스케일인 보호 엔드포인트
Amazon ECS container agent가 제공하는 태스크 스케일인 보호(task scale-in protection) 엔드포인트를 사용해 태스크가 스케일인 이벤트로부터 보호되도록 설정하는 방법을 알아봐요.
출처: 문서
본문
Amazon ECS container agent는 Amazon ECS 태스크의 컨테이너에 ECS_AGENT_URI 환경 변수를 자동으로 주입해 container agent API 엔드포인트와 상호 작용하는 방법을 제공해요.
보호의 필요성을 스스로 판단할 수 있는 태스크에는 Amazon ECS container agent 엔드포인트를 사용할 것을 권장해요. 컨테이너가 작업 처리를 시작할 때 컨테이너 내부에서 태스크 스케일인 보호 엔드포인트 경로 $ECS_AGENT_URI/task-protection/v1/state로 protectionEnabled 속성을 설정할 수 있어요. 컨테이너 내부에서 이 URI로 PUT 요청을 사용해 태스크 스케일인 보호를 설정해요. 이 URI로 GET 요청을 하면 태스크의 현재 보호 상태가 반환돼요.
태스크 스케일인 보호 요청 파라미터
다음 요청 파라미터로 ${ECS_AGENT_URI}/task-protection/v1/state 엔드포인트를 사용해 태스크 스케일인 보호를 설정할 수 있어요.
ProtectionEnabled — 태스크를 보호로 표시하려면 true를 지정하고, 보호를 제거해 태스크를 종료 대상으로 만들려면 false를 지정해요. Type: Boolean, Required: Yes.
ExpiresInMinutes — 태스크가 보호되는 분 수. 최소 1분에서 최대 2,880분(48시간)까지 지정할 수 있어요. 이 기간 동안 태스크는 서비스 Auto Scaling이나 배포의 스케일인 이벤트로 종료되지 않아요. 이 기간이 지나면 protectionEnabled 파라미터가 false로 설정돼요. 시간을 지정하지 않으면 태스크는 자동으로 120분(2시간) 동안 보호돼요. Type: Integer, Required: No.
다음 예시들은 다양한 기간으로 태스크 보호를 설정하는 방법을 보여줘요.
기본 기간으로 태스크 보호 (2시간):
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true}'
60분 동안 태스크 보호:
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":60}'
24시간 동안 태스크 보호:
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}'
Windows 컨테이너 예시 (Examples for Windows containers)
Windows 컨테이너의 경우 curl 대신 PowerShell의 Invoke-RestMethod cmdlet을 사용할 수 있어요. 다음 예시들은 이전 curl 명령의 PowerShell 버전을 보여줘요.
기본 기간으로 Windows 컨테이너 태스크 보호 (2시간):
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true}' -ContentType 'application/json'
60분 동안 Windows 컨테이너 태스크 보호:
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true,"ExpiresInMinutes":60}' -ContentType 'application/json'
24시간 동안 Windows 컨테이너 태스크 보호:
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}' -ContentType 'application/json'
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 — 컨테이너가 속한 태스크의 전체 ARN(Amazon Resource Name).
보호된 태스크에 대해 반환되는 세부 정보의 예시:
curl --request GET ${ECS_AGENT_URI}/task-protection/v1/state
Windows 컨테이너의 경우 다음 PowerShell 명령으로 보호 상태를 얻습니다:
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"
}
}
실패 시 반환되는 정보
- Arn — 태스크의 전체 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 — 태스크 또는 서비스의 전체 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 agent가 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 agent가 Amazon ECS에서 제한(throttling) 예외를 받으면 다음 오류가 나타나요.
{
"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"
}
}