AWS Batch 작업이 RUNNABLE 상태로 멈추는 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 8월 17일

AWS Batch 작업이 RUNNABLE 상태로 멈췄습니다.

간략한 설명

AWS Batch는 작업에 해결되지 않은 종속성이 없고 호스트에서 실행을 예약할 준비가 되면 작업을 RUNNABLE 상태로 전환합니다. RUNNABLE 상태의 작업은 작업의 대기열에 매핑된 컴퓨팅 환경 중 하나에 사용 가능한 리소스가 충분히 있을 때 시작됩니다. 사용 가능한 리소스가 부족하면 작업이 무기한으로 RUNNABLE 상태로 남아 있을 수 있습니다.

기본 Amazon Machine Image(AMI)가 있는 유효한 관리형 컴퓨팅 환경을 사용하는 경우 다음과 같은 이유로 작업이 RUNNABLE 상태로 멈출 수 있습니다.

  • 리소스 부족: 작업에서 지정하는 CPU 또는 메모리 리소스 용량이 컴퓨팅 환경에서 할당 가능한 용량보다 큽니다.
  • 컨테이너 인스턴스가 할당되지 않음: 인스턴스를 생성할 수 없거나 네트워킹 또는 보안상의 문제가 있는 경우 컨테이너 인스턴스가 기반 Amazon Elastic Container Service(Amazon ECS) 클러스터에 조인할 수 없습니다.
  • 호스트 수준 문제: 컨테이너 인스턴스 내의 호스트 또는 Docker 데몬 수준에서 문제가 있을 수 있습니다. 예를 들어 인스턴스의 볼륨이 꽉 찼거나 Docker 데몬 또는 Amazon ECS 컨테이너 에이전트에서 중지 또는 시작 문제가 발생했을 수 있습니다.

해결 방법

컴퓨팅 환경에 작업을 실행하기에 충분한 리소스가 있는지 확인

1.    AWS Batch 콘솔을 엽니다.

2.    [작업 대기열]의 RUNNABLE 열에서 RUNNABLE 상태로 멈춘 작업이 있는 작업 대기열을 선택합니다.

3.    RUNNABLE 상태로 멈춰 있는 작업을 선택합니다.

4.    [작업 세부 정보]의 [환경] 섹션에서 [vCPUs] 및 [메모리]의 값을 가져옵니다.

5.    탐색 창에서 [컴퓨팅 환경]을 선택합니다.

6.    작업을 실행해야 하는 컴퓨팅 환경에서 [상태]가 VALID로 설정되어 있고 [상태]가 ENABLED로 설정되어 있는지 확인합니다.

7.    [최대 vCPU]의 값이 AWS Batch가 작업을 실행하기 위해 [원하는 vCPU]의 수를 늘릴 수 있도록 충분히 높게 설정되어 있는지 확인합니다.

8.    [원하는 vCPU]의 값이 작업을 실행하는 데 필요한 vCPU 수 이상으로 설정되어 있는지 확인합니다.

9.    [원하는 vCPU]가 0인 경우 해당 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 유형에 사용 가능한 메모리 및 CPU 리소스의 양을 확인합니다. [원하는 vCPU]의 값이 0보다 높거나 작업이 여전히 RUNNABLE 상태인 경우 컴퓨팅 환경에 인스턴스가 있고 해당 인스턴스를 작업 실행에 사용할 수 있는지 확인 섹션의 단계를 수행합니다.

중요: 컴퓨팅 환경의 인스턴스 유형 중 하나 이상에 작업에서 지정하는 메모리 용량보다 더 많은 메모리가 있어야 합니다. 또한 해당 인스턴스 유형에 작업에서 지정하는 CPU 리소스 이상의 CPU 리소스가 있어야 합니다. 작업을 실행하기에 충분한 메모리 또는 CPU 리소스가 있는 인스턴스 유형이 하나도 없는 경우 작업을 취소하십시오. 그런 다음 더 적은 CPU 또는 메모리가 필요한 새 작업을 실행하십시오. 또는 작업을 실행하기에 충분한 리소스가 있는 새 컴퓨팅 환경을 생성한 후 작업을 해당 작업 대기열에 할당할 수도 있습니다.

컴퓨팅 환경에 인스턴스가 있고 해당 인스턴스를 작업 실행에 사용할 수 있는지 확인

1.    Amazon ECS 콘솔을 여십시오.

2.    탐색 창에서 [클러스터]를 선택하고 작업이 포함된 클러스터를 선택합니다.

참고: 클러스터의 이름은 컴퓨팅 환경의 이름으로 시작하며 그 뒤에_Batch_와 숫자 및 문자의 랜덤 해시가 붙습니다.

3.    [ECS 인스턴스] 뷰를 선택하고 작업을 실행하는 데 컨테이너 인스턴스를 사용할 수 있는지 확인합니다.

4.    클러스터에 작업을 실행하는 데 사용 가능한 컨테이너 인스턴스가 있는 경우[Docker 데몬] 및 [Amazon ECS container agent]의 상태를 확인합니다. 자세한 내용은 Amazon Linux 1 AMI가 있는 Amazon ECS 컨테이너 인스턴스가 연결 해제된 이유는 무엇입니까?를 참조하십시오.

ECS 클러스터에 인스턴스가 없는 경우 컴퓨팅 환경에 따라 아래의 섹션 중 하나에 있는 단계를 완료하십시오.

  • 온디맨드 컴퓨팅 환경에 인스턴스를 생성할 수 있는지 확인
  • 스팟 컴퓨팅 환경에 인스턴스를 생성할 수 있는지 확인

온디맨드 컴퓨팅 환경에 인스턴스를 생성할 수 있는지 확인

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 [Auto Scaling 그룹]을 선택합니다.

3.    [필터]에 컴퓨팅 환경의 이름을 입력합니다.

참고: Amazon EC2는 동일한 컴퓨팅 환경에 두 개 이상의 Auto Scaling 그룹을 생성할 수 있습니다.

4.    각 Auto Scaling 그룹에 대해[활동 기록] 뷰를 선택한 다음 차단 문제가 없는지 살펴봅니다.

인스턴스 실행을 차단하는 문제가 있는 경우 [Status] 열에 [Unsuccessful]로 표시됩니다. 예를 들어 계정이 최대 인스턴스 수에 도달하면 Amazon EC2에서 다음과 유사한 메시지가 반환될 수 있습니다.

Launching a new EC2 instance. Status Reason: Your quota allows for 0 more running instance(s). You requested at least 1. Launching EC2 instance failed.

이벤트에는 작업을 제출한 시점의 UTC 기준 타임스탬프가 포함됩니다. 예를 들어 다음과 같습니다.

At 2018-09-03T05:54:30Z a user request update of AutoScalingGroup constraints to min: 0, max: 1, desired: 1 changing the desired capacity from 0 to 1.
At 2018-09-03T05:54:52Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.

참고: AWS Batch는 사용자를 대신해 인스턴스를 요청합니다. Auto Scaling 그룹을 수동으로 수정하지 마십시오. 그러면 컴퓨팅 환경이 INVALID 상태가 될 수 있습니다. 인스턴스 제한과 제한을 늘리도록 요청하는 방법에 대한 자세한 내용은 Amazon EC2 서비스 할당량을 참조하십시오.

Auto Scaling 그룹의 최근 이벤트에 성공적인 이벤트만 표시되는 경우 컨테이너 인스턴스 IAM 역할 확인 섹션의 단계를 수행하십시오. 그러면 인스턴스가 ECS 클러스터에 조인되지 않은 이유를 알아낼 수 있습니다.

스팟 컴퓨팅 환경에 인스턴스를 생성할 수 있는지 확인

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 [Instances]에 대해 [Spot Requests]를 선택합니다.

3.    [filter]에서 [Request type]에 대해 [fleet]을 선택합니다.

4.    [Status]에서 [active]를 선택합니다.

5.    [Description]을 선택하고 [Total target capacity]의 값을 통해 스팟 인스턴스의 요청이 이행되었는지 확인합니다. 인스턴스가 생성되지 않은 경우 [History] 뷰에서 이유를 설명하는 메시지를 확인합니다. 예를 들어 입찰 가격에 미치지 않은 요청에 대해서는 다음과 유사한 메시지가 반환됩니다.

m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324

6.    컴퓨팅 환경의 올바른 입찰률을 선택하고 입찰 가격을 변경하는 경우 새 컴퓨팅 환경을 생성합니다. 자세한 내용은 스팟 인스턴스 요금 기록을 참조하십시오.

참고: AWS Batch가 자동으로 스팟 플릿 요청을 생성합니다. 스팟 플릿 요청을 수동으로 수정하지 마십시오. 그러면 컴퓨팅 환경이 INVALID 상태가 될 수 있습니다.

Auto Scaling 그룹의 최근 이벤트에 성공적인 이벤트만 표시되는 경우 컨테이너 인스턴스 IAM 역할 확인 섹션의 단계를 수행하십시오.

컨테이너 인스턴스 IAM 역할 확인

1.    AWS Batch 콘솔을 엽니다.

2.    탐색 창에서[컴퓨팅 환경]을 선택한 다음 컴퓨팅 환경을 선택합니다.

3.    [컴퓨팅 환경 세부 정보] 섹션에서 [인스턴스 역할]의 이름을 가져옵니다.

4.    AWS Identity and Access Management(IAM) 콘솔을 엽니다.

5.    검색 창에서 인스턴스 역할의 이름을 검색한 후 검색 결과에서 인스턴스 역할을 선택합니다.

6.    [권한] 뷰를 선택한 다음, AmazonEC2ContainerServiceforEC2Role 관리형 정책이 해당 역할에 연결되어 있는지 확인합니다. 이 정책이 연결되어 있으면 인스턴스 역할이 제대로 구성된 것이며, 11단계로 건너뛰면 됩니다.

7.    [정책 연결]을 선택합니다.

8.    검색 창에 AmazonEC2ContainerServiceforEC2Role을 입력합니다.

9.    AmazonEC2ContainerServiceforEC2Role 정책의 확인란을 선택한 후 [정책 연결]을 선택합니다.

10.    [신뢰 관계] 뷰를 선택하고 [신뢰 관계 편집]을 선택합니다.

11.    신뢰 관계에 다음 정책이 포함되어 있는지 확인합니다.

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

12.    신뢰 관계가 위 예제의 정책과 일치할 경우 [취소]를 선택합니다. 신뢰 관계가 위 예제의 정책과 일치하지 않을 경우 정책 문서 콘솔에 정책을 복사합니다. 그런 다음 [신뢰 정책 업데이트]를 선택합니다.

그래도 여전히 인스턴스가 Amazon ECS 클러스터에 조인되지 않을 경우 컴퓨팅 환경의 네트워크 및 보안 설정 확인 섹션의 단계를 수행하십시오.

컴퓨팅 환경의 네트워크 및 보안 설정 확인

1.    AWS Batch 콘솔을 엽니다.

2.    탐색 창에서[컴퓨팅 환경]을 선택한 다음 컴퓨팅 환경을 선택합니다.

3.    [컴퓨팅 리소스] 섹션에서 [서브넷] 및 [보안 그룹]의 값을 가져옵니다.

4.    Amazon Virtual Private Cloud(Amazon VPC) 콘솔을 엽니다.

5.    탐색 창에서 [서브넷]을 선택합니다.

6.    컴퓨팅 환경의 각 서브넷에 대해 [설명]을 선택한 후 [퍼블릭 IPv4 주소 자동 할당] 속성의 값을 확인합니다.

값이 []이면 서브넷에서 실행된 인스턴스가 퍼블릭 IPv4 주소, 라우팅 대상 0.0.0.0/0이 있는 라우팅 테이블, 대상(예: igw-1a2b3c4d)으로 설정된 인터넷 게이트웨이로 구성된 것입니다.

값이 [아니요]이면 서브넷에서 실행된 인스턴스가 프라이빗 IPv4 주소, 라우팅 대상 0.0.0.0/0이 있는 라우팅 테이블, 대상(예: nat-12345678901234567)으로 설정된 NAT 게이트웨이로 구성된 것입니다. 자세한 내용은 라우팅을 참조하십시오.

7.    탐색 창에서 [Security Groups]를 선택합니다.

8.    컴퓨팅 환경에 지정된 각 보안 그룹에 대해 아웃바운드 규칙 뷰를 선택하고 다음 설정의 규칙이 있는지 확인합니다.
[유형]에서 [모든 트래픽]을 선택합니다.
[프로토콜]에서 [모두]를 선택합니다.
[포트 범위]에서 [모두]를 선택합니다.
[대상]에서 [0.0.0.0/0]을 선택합니다.

중요: 해당하는 규칙이 없는 경우 [편집]을 선택한 후 규칙을 생성하십시오. 아웃바운드 트래픽에 대해 보다 제한적인 규칙을 원하는 경우 [HTTPS (443)]을 [유형]으로 선택하고 [0.0.0.0/0]을 [대상]으로 선택하십시오.

9.    탐색 창에서 [네트워크 ACL]을 선택합니다.

10.    컴퓨팅 환경에 지정된 VPC의 ACL(액세스 제어 목록)을 선택합니다.

11.    기본 네트워크 ACL이 연결된 서브넷의 내부와 외부로의 모든 트래픽 흐름을 허용하도록 구성되었는지 확인합니다.

중요: ACL을 수정한 경우 서브넷에서 인터넷으로의 아웃바운드 IPv4 HTTPS 트래픽을 허용하는 규칙을 추가하십시오. 자세한 내용은 VPC의 보안 그룹네트워크 ACL을 참조하십시오. VPC, 서브넷 또는 보안 그룹을 변경하려면 새 컴퓨팅 환경을 만듭니다.

인스턴스가 여전히 ECS 클러스터에 조인되지 않는 경우 인스턴스에 연결합니다. 그런 다음, Docker 데몬Amazon ECS 컨테이너 에이전트의 상태를 확인합니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?