AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

ECS on EC2를 할 때, 생성한 Task가 대기 상태일 때 해결 방법과 두개의 도커 이미지를 하나의 태스크로 올릴때 질문드립니다.

0

안녕하세요

ECR에 프론트 도커파일, 백엔드 도커파일이 푸시되어 있는 상태에서, ECS에 배포하기 위해 ECS 클러스터를 생성하고, Task Definition을 설정했습니다. 하나의 Task Definition에서 컨테이너를 2개 두려고 각 도커파일 이미지 uri를 추가하는데, 생성된 Task를 서비스로 생성할 때, task가 계속 대기중이고 실행되지 않는 이슈가 있습니다. 이에 대한 원인은 어떻게 확인할 수 있으며 클러스터의 인스턴스 크기 문제인지, 컨테이너를 설정할때 할당한 자원의 문제인지 등을 어떻게 확인하고 해결하는지가 궁금합니다. 두개의 컨테이너를 하나의 태스크로 정의하고 서비스를 실행하는 부분의 예시가 있으면 좋겠습니다.

질문됨 한 달 전29회 조회
2개 답변
0

ECS on EC2에서 Task가 대기 상태일 때 해결 방법과 두 개의 도커 이미지를 하나의 태스크로 올리는 것에 대해 설명드리겠습니다.

Task가 계속 대기 중이고 실행되지 않는 이슈의 원인을 확인하기 위해서는 다음과 같은 방법들을 사용할 수 있습니다:

  1. Amazon ECS 콘솔에서 서비스 이벤트 로그를 확인합니다. 이를 통해 서비스 관련 오류 메시지를 볼 수 있습니다.

  2. 컨테이너 인스턴스에서 Amazon ECS 컨테이너 에이전트 로그를 확인합니다. 이 로그는 태스크 실행과 관련된 자세한 정보를 제공합니다.

  3. Docker 데몬 로그를 확인하여 컨테이너 시작 관련 문제를 파악할 수 있습니다.

  4. 태스크 정의에서 지정한 메모리와 CPU 리소스가 컨테이너 인스턴스의 가용 리소스를 초과하지 않는지 확인합니다.

  5. CannotPullContainer 오류가 있는지 확인하고, 이 경우 이미지 풀 권한과 이미지 URL을 점검합니다.

  6. IAM 역할 요청을 확인하여 태스크에 필요한 권한이 올바르게 설정되어 있는지 확인합니다.

두 개의 컨테이너를 하나의 태스크로 정의하는 방법은 다음과 같습니다:

  1. 태스크 정의에서 두 개의 컨테이너 정의를 추가합니다. 각 컨테이너에 대해 이미지 URI, 필요한 리소스(CPU, 메모리), 포트 매핑 등을 지정합니다.

  2. 컨테이너 간 통신이 필요한 경우, 링크를 사용하거나 네트워크 모드를 'awsvpc'로 설정하여 동일한 네트워크 네임스페이스를 공유하도록 할 수 있습니다.

  3. 환경 변수나 볼륨을 통해 컨테이너 간 데이터를 공유할 수 있습니다.

  4. 태스크 정의를 저장하고 이를 사용하여 서비스를 생성하거나 태스크를 실행합니다.

리소스 할당 문제인 경우, 태스크 정의에서 각 컨테이너에 할당된 CPU와 메모리를 조정하거나, 더 큰 인스턴스 유형을 사용하여 클러스터의 리소스를 늘릴 수 있습니다. 또한, ECS 콘솔에서 서비스 이벤트와 태스크 상태를 주기적으로 확인하여 문제의 원인을 파악하고 해결할 수 있습니다.
Sources
Amazon ECS troubleshooting - Amazon Elastic Container Service
Amazon ECS task metadata v4 examples - Amazon Elastic Container Service

profile picture
답변함 한 달 전
0

안녕하세요, 해당 내용에 대해서 답변 드리겠습니다. ECS Task가 pending status에 빠질 경우 여러가지 원인이 있을 수 있습니다. 컨테이너 인스턴스가 최대 CPU를 초과 했는지 AWS CloudWatch 메트릭을 통해서 확인해 보세요!

ECS Task Pending Status 트러블슈팅

주요 발생 원인

  • Docker 데몬 무응답
  • 대용량 Docker 이미지
  • ECS 컨테이너 에이전트 연결 끊김
  • 기존 태스크 종료 지연
  • VPC 라우팅 설정 오류
  • 컨테이너 의존성 문제

1. 상세 원인 및 해결방안

1.1 컨테이너 자원 설정 문제

문제:

  • Task Definition의 CPU/메모리 할당이 인스턴스 가용 자원 초과

진단:

aws ecs describe-tasks --cluster <CLUSTER_NAME> --tasks <TASK_ID>

해결방안:

  • Task Definition 자원 할당량 조정
  • 클러스터 인스턴스 스케일업/아웃

1.2 인스턴스 자원 부족

문제의 인스턴스에서 해당 명령을 실행합니다.

진단:

free -m  # 메모리 확인
top      # CPU 확인

해결방안:

  • 인스턴스 타입 업그레이드
  • 추가 인스턴스 프로비저닝

1.3 Docker 이미지 크기

진단:

  • /etc/ecs/ecs.config 설정 확인
ECS_IMAGE_PULL_BEHAVIOR=prefetch-cached

해결방안:

  • 이미지 최적화
  • 레이어 정리
  • 이미지 캐싱 설정

1.4 ECS 에이전트 연결

진단:

# Amazon Linux 2
sudo systemctl status ecs

# Docker 컨테이너 확인
sudo docker ps -f name=ecs-agent

재시작:

sudo systemctl restart ecs

1.5 VPC 라우팅

확인사항:

  • 인터넷/NAT 게이트웨이 구성
  • AWS PrivateLink 설정
  • 라우팅 테이블 구성

1.6 컨테이너 의존성

해결방안:

  • 컨테이너 HEALTHY 상태 확인
  • 의존성 명확한 정의
  • essential 속성 적절한 설정

2. 멀티 컨테이너 Task 예시

Task Definition 예시:

{
  "family": "my-task-definition",
  "containerDefinitions": [
    {
      "name": "frontend",
      "image": "<account_id>.dkr.ecr.<region>.amazonaws.com/frontend:latest",
      "memory": 256,
      "cpu": 128,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80
        }
      ]
    },
    {
      "name": "backend",
      "image": "<account_id>.dkr.ecr.<region>.amazonaws.com/backend:latest",
      "memory": 512,
      "cpu": 256,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 8080,
          "hostPort": 8080
        }
      ]
    }
  ],
  "requiresCompatibilities": ["EC2"],
  "networkMode": "bridge",
  "cpu": "512",
  "memory": "1024"
}

Task 배포:

# Task Definition 등록
aws ecs register-task-definition --cli-input-json file://my-task-definition.json

# 서비스 생성
aws ecs create-service \
  --cluster <CLUSTER_NAME> \
  --service-name my-ecs-service \
  --task-definition my-task-definition \
  --desired-count 1 \
  --launch-type EC2

3. 문제 해결 체크리스트

  • [ ] 자원 할당량 확인
  • [ ] 인스턴스 상태 점검
  • [ ] Docker 이미지 최적화
  • [ ] 네트워크 설정 검증
  • [ ] 컨테이너 의존성 확인
  • [ ] 에이전트 상태 점검

위의 단계들을 체계적으로 확인하시면 ECS Task의 pending 상태 문제를 해결하실 수 있습니다. 답변 드린 내용이 도움이 되셨길 바랍니다! 즐거운 하루 되세요! 😊

profile picture
답변함 한 달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠