제 AWS Batch 작업이 RUNNABLE 상태에서 멈추는 이유는 무엇인가요?

8분 분량
0

제 AWS Batch 작업이 RUNNABLE 상태에서 멈췄습니다.

간략한 설명

AWS Batch는 작업에 미해결 종속성이 없고 작업을 호스트에 예약할 수 있는 경우 작업을 RUNNABLE 상태로 전환합니다. RUNNABLE 상태의 작업은 작업 대기열에 매핑되는 컴퓨팅 환경 중 하나에 충분한 리소스가 확보되는 즉시 시작됩니다.

작업을 실행하는 데 필요한 리소스를 사용할 수 없는 경우, 작업이 계속하여 RUNNABLE 상태로 유지될 수 있습니다. 자세한 내용은 RUNNABLE 상태에서 중단된 작업을 참조합니다.

RUNNABLE 상태에서 중단된 AWS Batch 작업의 문제를 해결하려면, AWSSupport-TroubleshootAWSBatchJob 런북을 사용합니다. 그런 다음, 출력 섹션을 참조하여 문제의 가능한 원인과 해결하기 위한 단계를 확인합니다.

**참고:**이 문서에서는 Amazon Elastic Compute Cloud(Amazon EC2)의 Amazon Elastic Container Service(Amazon ECS) 및 AWS Fargate의 Amazon ECS에 대한 문제 해결을 다룹니다. Amazon Elastic Kubernetes Service(Amazon EKS)의 AWS Batch 문제를 해결하려면, Amazon EKS의 AWS Batch를 참조합니다.

해결 방법

AWSSupport-TroubleshootAWSBatchJob SAW 런북 사용하기

AWS Support 자동화 워크플로(AWS SAW)를 사용하여 이 문제 해결 프로세스를 자동화합니다. AWSSupport-TroubleshootAWSBatchJob 런북을 사용하려면, RUNNABLE 상태에서 멈춘 AWS Batch 작업의 문제 해결을 위해 SAW 런북을 사용하려면 어떻게 해야 하나요?를 참조합니다.

이 런북이 문제를 식별하는 데 도움이 되지 않는 경우, 다음 섹션을 참조하여 진행되지 않는 작업의 문제를 수동으로 해결합니다.

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

1.    AWS Batch 콘솔을 엽니다.

2.    대시보드를 선택합니다.

3.    작업 대기열 개요 창의 RUNNABLE 열에서 RUNNABLE 상태로 멈춰 있는 작업을 선택합니다. 작업 세부 정보 페이지가 나타납니다.

4.    작업 세부 정보컨테이너 섹션의 vCPUs, 메모리, 그리고 GPUs 값을 확인합니다. 9-10단계를 완료하려면 해당하는 값이 필요합니다.

5.    모든 컴퓨팅 환경에서 작업이 실행될 수 있으므로 Job queues(작업 대기열) 페이지에서 하나의 작업 대기열을 선택하고 관련 컴퓨팅 환경을 검토합니다. 이후, 각 컴퓨팅 환경에 대해 6~10단계를 반복합니다.

6.    컴퓨팅 환경 페이지에서 컴퓨팅 환경을 선택해 권한을 확인합니다.

7.    컴퓨팅 환경의 상태 열이 유효로 설정되어 있는지 확인합니다. 또한, 해당 환경과 관련된 서비스 역할에 필요한 권한이 모두 있는지 확인합니다.

참고: 오류가 간헐적이거나 일시적인 경우, 컴퓨팅 환경 상태유효에서 유효하지 않음로 변경되는 데 몇 분 정도 걸릴 수 있습니다.

8.    상태 열이 활성화됨으로 설정되어 있는지 확인합니다.

9.    최대 vCPU 값이 AWS Batch가 필요한 vCPU 값을 증가시켜 작업을 수행할 수 있을 정도로 높은지 확인합니다.

참고: AWS Fargate 컴퓨팅 환경을 사용하는 경우, 컴퓨팅 환경의 네트워크 및 보안 설정 확인 섹션을 참조합니다.

10.    필요한 vCPU 값이 작업을 실행해야 하는 vCPU의 수 이상인가 확인합니다.

필요한 vCPU 값이 0인 경우, Amazon EC2 인스턴스 유형에 사용 가능한 메모리 및 CPU 리소스의 양을 확인합니다.

-또는-

필요한 vCPU 값이 0보다 크거나 작업이 아직 RUNNABLE 상태인 경우, 다음 섹션의 단계를 완료합니다.

**중요:**컴퓨팅 환경의 인스턴스 유형 중 적어도 하나 이상에 작업에서 지정된 것보다 많은 메모리가 있어야 합니다. 또한 인스턴스 유형에는 작업에 지정된 것 이상의 CPU 리소스가 존재해야 합니다. 적어도 하나 이상의 인스턴스 유형에 메모리 또는 CPU 리소스가 충분하지 않아 작업을 실행할 수 없는 경우 작업을 취소합니다. CPU나 메모리가 보다 덜 필요한 새 작업을 실행합니다. 또는 작업을 수행하기 위한 충분한 자원이 있는 새 컴퓨팅 환경을 생성하고 적절한 작업 대기열에 해당 작업을 할당합니다.

컴퓨팅 환경에 인스턴스가 존재하며, 인스턴스를 작업을 실행하는 데 사용할 수 있는지 확인합니다.

작업을 실행해야 하는 환경으로 식별한 컴퓨팅 환경에 대해 다음 단계를 수행합니다.

1.    Amazon ECS 콘솔을 엽니다.

2.    탐색 창에서 클러스터를 선택합니다. 그런 다음, 작업이 포함된 클러스터를 선택합니다.

일반적인 ECS 문제 해결 지침은 Amazon ECS 문제 해결을 참조합니다.

**참고:**클러스터 이름은 컴퓨팅 환경 이름으로 시작합니다. 그 뒤에 _Batch_ 및 숫자와 글자로 이루어진 무작위 해시가 추가됩니다.

3.    ECS 인스턴스 보기를 선택합니다. 그런 다음, 컨테이너 인스턴스가 작업을 실행할 수 있는지 확인합니다.

4.    클러스터에 작업을 실행할 수 있는 컨테이너 인스턴스가 존재하는 경우, Docker 대몬(daemon)의 상태를 확인합니다. 그런 다음, Amazon ECS 컨테이너 에이전트의 상태를 확인합니다.

참고: 자세한 내용은 연결이 끊긴 Amazon ECS 에이전트 문제를 어떻게 해결하나요?를 참조합니다.

Amazon ECS 클러스터에 인스턴스가 없는 경우, 컴퓨팅 환경에서 인스턴스를 생성할 수 있는지 확인합니다. 인스턴스를 생성할 수 있는지 확인하려면, 컴퓨팅 환경에 따라 다음 절차 중 하나를 완료합니다.

온디맨드 컴퓨팅 환경에서 인스턴스를 생성할 수 있는지 확인하는 절차는 다음과 같습니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    왼쪽 탐색 창에서 오토 스케일링 그룹을 선택합니다.

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

참고: Amazon EC2에서 동일한 컴퓨팅 환경에 대해 둘 이상의 오토 스케일링 그룹을 생성할 수 있습니다.

4.    각 오토 스케일링 그룹마다 활동 기록 보기를 선택합니다. 그런 다음, 차단 문제가 있는지 찾아봅니다.

인스턴스가 실행되는 것을 방지하는 문제가 존재하면 상태 열에 실패가 표시됩니다.

예를 들어, 계정의 최대 인스턴스 수에 도달한 경우, 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가 사용자를 대신하여 인스턴스를 요청합니다. 오토 스케일링 그룹을 수동으로 수정하면 컴퓨팅 환경이 무효화될 수 있습니다. 인스턴스 제한 및 한도 증가를 요청하는 방법에 대한 자세한 내용은 Amazon EC2 Service Quotas을 참조합니다.

5.    오토 스케일링 그룹이 최근 이벤트에서 성공한 이벤트만 표시하는 경우, 다음 섹션의 단계를 완료합니다.

중요: 서비스에 연결된 AWS Identity and Access Management(IAM) 역할 AWSServiceRoleForAutoScaling에 특정한 권한을 설정해야 합니다. IAM 역할 AWSServiceRoleForAutoScaling에는 적어도 고객 관리형 AWS Key Management Service(AWS KMS) 키에 대한 사용자 액세스 권한이 존재해야 합니다. 이 권한은 사용자 지정 Amazon Machine Image(AMI), 암호화된 Amazon Elastic Block Store(Amazon EBS) 볼륨, 고객이 관리하는 AWS KMS 키가 있는 환경에서 필요합니다. 자세한 내용은 고객 관리 키에 대한 액세스를 허용하는 키 정책 섹션을 참고합니다.

스팟 컴퓨팅 환경에서 인스턴스를 생성할 수 있음을 확인하는 절차는 다음과 같습니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 인스턴스를 선택합니다. 그런 다음, 스팟 요청을 선택합니다.

3.    필터의 요청 유형플릿을 선택합니다.

4.    상태활성을 선택합니다.

5.    설명을 선택합니다. 그런 다음, 총 목표 용량 값을 확인해 스팟 인스턴스 요청이 만족되었는지 확인합니다. 인스턴스가 생성되지 않은 경우, 이력 뷰를 확인하여 그 이유를 설명하는 메시지를 확인합니다. 예를 들어, 입찰 가격에 도달할 수 없는 요청은 다음 예와 유사한 메시지를 반환합니다.

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는 사용자를 대신하여 스팟 플릿 요청을 생성합니다. 스팟 플릿 요청을 수동으로 수정하지 마십시오. 그렇지 않으면 컴퓨팅 환경이 무효화될 수 있습니다.

7.    오토 스케일링 그룹의 가장 최근 이벤트에 성공한 이벤트만 표시되는 경우, 다음 섹션의 단계를 완료합니다.

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

1.    AWS Batch 콘솔을 엽니다.

2.    탐색 창에서 컴퓨팅 환경을 선택합니다. 그런 다음, 컴퓨팅 환경을 선택합니다.

3.    컴퓨팅 환경 세부 정보 섹션에서 인스턴스 역할 이름을 변경합니다.

4.    IAM 콘솔을 엽니다.

5.    검색 상자에 인스턴스 역할 이름을 입력합니다. 그런 다음, 결과에서 인스턴스 역할을 선택합니다.

6.    권한 보기를 선택합니다. 그런 다음, 역할에 AmazonEC2ContainerServiceforEC2Role 관리형 정책이 연결되어 있는지 확인합니다. 정책이 연결되어 있는 경우, 인스턴스 역할이 적절하게 구성되어 있으며 11단계로 건너뛸 수 있습니다.

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

8.    검색 상자에 AmazonEC2ContainerServiceforEC2Role을 선택합니다.

9.    AmazonEC2ContainerServiceforEC2Role 정책의 확인란을 선택합니다. 그런 다음, 정책 연결을 선택합니다.

10.    신뢰 관계 보기를 선택합니다. 그런 다음, 신뢰 관계 편집을 선택합니다.

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

{
  "Version": "2012-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(VPC) 콘솔을 엽니다.

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

6.    컴퓨팅 환경의 각 서브넷마다 설명을 선택합니다. 그런 다음, 공개 IPv4 주소 자동 할당 값을 확인합니다.

공개 IPv4 주소 자동 할당 값이 인 경우, 서브넷에서 실행된 인스턴스에는 다음 값이 존재합니다.

  • 퍼블릭 IPv4 주소
  • 라우팅 목적지가 0.0.0.0/0인 라우팅 테이블
  • 대상(예: igw-1a2b3c4d)으로 설정된 인터넷 게이트웨이

퍼블릭 IPv4 주소 자동 할당 값이 아니요인 경우, 서브넷에서 실행된 인스턴스에는 다음 값이 존재합니다.

  • 프라이빗 IPv4 주소
  • 라우팅 목적지가 0.0.0.0/0인 라우팅 테이블
  • 타겟(예: nat-12345678901234567)으로 설정된 NAT 게이트웨이.

참고: 자세한 내용은 예제의 라우팅 섹션을 참고합니다. 프라이빗 서브넷 및 NAT 서버가 존재하는 VPC.

7.    탐색 창에서 보안 그룹을 선택합니다.

8.    컴퓨팅 환경에 지정된 각 보안 그룹마다 아웃바운드 규칙 보기를 선택합니다. 그런 다음, 다음과 같이 설정된 규칙이 있는지 확인합니다.

  • 유형에서 모든 트래픽을 선택합니다.
  • 프로토콜에서 모두를 선택합니다.
  • 포트 범위에서 모두를 선택합니다.
  • 대상에서 0.0.0.0/0를 선택합니다.

중요: 규칙이 존재하지 않는 경우, 편집을 선택합니다. 그런 다음, 규칙을 생성합니다. 아웃바운드 트래픽에 더 제한적인 규칙을 사용하려면, 유형HTTPS (443), 목적지0.0.0.0/0을 선택합니다.

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

10.    VPC의 네트워크 액세스 제어 목록(네트워크 ACL)을 선택합니다.

11.    모든 트래픽이 연결된 서브넷으로 들어오고 나가는 것을 허용하도록 기본 네트워크 ACL이 구성되어 있는지 확인합니다.

중요: ACL을 수정한 경우, 서브넷에서 인터넷으로의 아웃바운드 IPv4 HTTPS 트래픽을 허용하는 규칙을 추가합니다. 자세한 내용을 보려면, 보안 그룹을 사용하여 EC2 인스턴스로의 트래픽 제어네트워크 ACL을 사용하여 서브넷에 대한 트래픽 제어를 참조합니다. VPC, 서브넷 또는 보안 그룹을 변경하려면 새 컴퓨팅 환경을 생성합니다.

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

**참고:**이 문서의 절차는 가능한 모든 근본 원인과 문제 해결 방법을 다루지는 않습니다. RUNNABLE 상태에서 멈춘 AWS Batch 작업에 대한 추가 문제 해결은 AWS CloudTrail을 사용합니다. 사용자명 속성을 aws-batch로 설정해 이벤트를 검색해 예약된 작업 중 발생하는 오류를 조사합니다.

관련 정보

Linux 인스턴스에 연결하기

Windows 인스턴스에 연결하기

AWS 공식
AWS 공식업데이트됨 6달 전