Amazon ECS 태스크 정의의 잘못된 CPU 또는 메모리 오류 문제 해결
Amazon ECS 태스크 정의의 잘못된 CPU 또는 메모리 오류 문제 해결
Amazon ECS API나 AWS CLI로 태스크 정의를 등록할 때 잘못된 cpu 또는 memory 값을 지정하면 발생하는 오류와 해결 방법을 알아봐요.
출처: 문서
본문
Amazon ECS API나 AWS CLI로 태스크 정의를 등록할 때 잘못된 cpu 또는 memory 값을 지정하면 다음 오류가 반환돼요.
An error occurred (ClientException) when calling the RegisterTaskDefinition operation: Invalid 'cpu' setting for task.
참고 — Terraform을 사용할 때는 다음 오류가 반환될 수 있어요.
Error: ClientException: No Fargate configuration exists for given values.
이 문제를 해결하려면 태스크 정의의 태스크 CPU와 메모리에 지원되는 값을 지정해야 해요. cpu 값은 태스크 정의에서 CPU 단위 또는 vCPU로 표현할 수 있어요. 태스크 정의가 등록되면 CPU 단위를 나타내는 정수로 변환돼요. memory 값은 태스크 정의에서 MiB 또는 GB로 표현할 수 있어요. 태스크 정의가 등록되면 MiB를 나타내는 정수로 변환돼요.
requiresCompatibilities 파라미터에 FARGATE를 지정하는 태스크 정의(EC2도 지정하더라도)는 다음 표의 값 중 하나를 사용해야 해요. 이 값들은 CPU와 memory 파라미터의 지원 값 범위를 결정해요.
Fargate에서 호스팅되는 태스크의 경우 다음 표가 유효한 CPU와 메모리 조합을 보여줘요. JSON 파일의 메모리 값은 MiB로 지정돼요. GB 값을 MiB로 변환하려면 값에 1024를 곱해요. 예: 1 GB = 1024 MiB.
| CPU 값 | 메모리 값 | AWS Fargate 지원 OS |
|---|---|---|
| 256 (.25 vCPU) | 512 MiB, 1 GB, 2 GB | Linux |
| 512 (.5 vCPU) | 1 GB, 2 GB, 3 GB, 4 GB | Linux |
| 1024 (1 vCPU) | 2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB | Linux, Windows |
| 2048 (2 vCPU) | 4 GB ~ 16 GB (1 GB 단위) | Linux, Windows |
| 4096 (4 vCPU) | 8 GB ~ 30 GB (1 GB 단위) | Linux, Windows |
| 8192 (8 vCPU) (Linux 플랫폼 1.4.0 이상 필요) | 16 GB ~ 60 GB (4 GB 단위) | Linux |
| 16384 (16 vCPU) (Linux 플랫폼 1.4.0 이상 필요) | 32 GB ~ 120 GB (8 GB 단위) | Linux |
| 32768 (32 vCPU) (Linux 플랫폼 1.4.0 이상 필요) | 60 GB, 120 GB, 244 GB | Linux |
Amazon EC2에서 호스팅되는 태스크의 경우 지원되는 태스크 CPU 값은 0.25 vCPU에서 192 vCPU 사이예요. CPU 제어 메커니즘은 EC2와 Fargate 간에 다릅니다:
- Amazon EC2에서 호스팅되는 태스크 - Amazon ECS는 CPU period와 CPU quota를 사용해 태스크 크기 CPU 하드 한도를 제어해요. 태스크 정의에서 vCPU를 지정하면 Amazon ECS는 그 값을
cgroup에 적용되는 CPU period와 CPU quota 설정으로 변환해요. - Fargate에서 호스팅되는 태스크 - Amazon ECS는 CPU shares를 사용해 CPU 할당을 제어해요. CPU quota와 period 값은 Fargate 태스크의 CPU 제한에 사용되지 않아요.
Amazon EC2 태스크의 경우 CPU quota는 주어진 CPU period 동안 cgroup에 부여된 CPU 시간 양을 제어해요. 두 설정 모두 마이크로초 단위로 표현돼요. CPU quota가 CPU period와 같으면 cgroup이 하나의 vCPU에서 최대 100% 실행할 수 있다는 뜻이에요(여러 vCPU의 경우 100%가 되는 다른 분율도 가능). CPU quota의 최대값은 1000000us이고 CPU period의 최소값은 1ms예요. 이 값들을 사용해 CPU 수의 한도를 설정할 수 있어요. CPU quota를 변경하지 않고 CPU period를 변경하면 태스크 정의에 지정한 것과 다른 유효 한도를 갖게 돼요. 100ms period는 0.125에서 10 범위의 vCPU를 허용해요.
참고 — 태스크 수준 CPU와 메모리 파라미터는 Windows 컨테이너에서 무시돼요.