내용으로 건너뛰기

RUNNABLE 상태로 멈춘 AWS Batch 작업의 문제를 해결하려면 어떻게 해야 합니까?

9분 분량
0

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

간략한 설명

작업에 보류 중인 종속성이 없는 경우 AWS Batch는 작업을 RUNNABLE 상태로 전환하며, AWS Batch에서 작업을 예약할 수 있습니다. RUNNABLE 작업은 작업 대기열에 매핑되는 컴퓨팅 환경 중 하나에서 충분한 리소스를 사용할 수 있게 되면 즉시 시작됩니다.

작업을 실행하는 데 필요한 리소스를 사용할 수 없는 경우, 작업이 RUNNABLE 상태로 멈춰 있을 수 있습니다.

참고: 다음 해결 방법은 Amazon Elastic Container Service(Amazon ECS) 컨테이너에서 실행되는 AWS Batch 작업의 문제를 해결합니다. 이러한 컨테이너는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 AWS Fargate 컴퓨팅 환경에서 실행할 수 있습니다. Amazon Elastic Kubernetes Service(Amazon EKS)에서 실행되는 AWS Batch 작업의 문제를 해결하려면 Amazon EKS의 AWS Batch를 참조하십시오.

해결 방법

먼저 중단된 작업이 선입선출(FIFO) 대기열을 차단하고 있는지 확인합니다. 이렇게 해도 문제가 해결되지 않으면 문제 해결을 자동화하여 문제를 확인하거나 수동으로 문제를 해결하십시오.

차단된 FIFO 대기열 확인

다음과 같은 문제로 인해 선입선출(FIFO) 대기열 시작 시 작업이 RUNNABLE 상태로 멈출 수 있습니다.

  • 작업이 공정한 공유 일정을 사용하지 않으므로 그 뒤에 있는 다른 모든 작업을 실행할 수 없습니다.
  • AWS 계정에 잘못된 구성이 있습니다.
  • 계정으로 작업에 필요한 인스턴스에 액세스할 수 없습니다. 예를 들어 계정에 GPU 인스턴스 유형이 필요할 수 있습니다.

FIFO 대기열의 차단을 해제하려면 GetJobQueueSnapshot을 사용하여 대기열을 차단하고 있는 작업을 찾은 다음, 해당 작업을 종료합니다.

문제 해결 프로세스 자동화

AWSSupport-TroubleshootAWSBatchJob 런북을 사용하여 RUNNABLE 상태로 멈춘 AWS Batch 작업의 문제를 해결합니다. 또는 다음 섹션의 단계를 완료하여 문제를 수동으로 해결하십시오.

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

다음 단계를 완료하십시오.

  1. AWS Batch 콘솔을 엽니다.
  2. 탐색 창에서 대시보드를 선택합니다.
  3. 작업 대기열 개요 섹션의 RUNNABLE 열에서 RUNNABLE 상태로 멈춘 작업을 선택합니다. 작업의 세부 정보 페이지가 나타납니다.
  4. 컨테이너 탭을 선택한 다음, vCPU, 메모리GPU 값을 기록하여 9~10번 단계를 완료합니다.
  5. 탐색 창에서 작업 대기열을 선택한 다음, 해당 작업 대기열을 선택합니다.
  6. 환경 순서 탭에서 작업 대기열과 관련된 컴퓨팅 환경을 식별합니다.
  7. 탐색 창에서 환경을 선택한 다음, 권한을 검토할 컴퓨팅 환경을 선택합니다.
  8. 상태 섹션에서 컴퓨팅 환경의 상태 열이 유효인지 확인합니다.
    참고: 오류가 간헐적이거나 일시적인 경우, 컴퓨팅 환경 상태가 유효에서 유효하지 않음으로 변경되는 데 몇 분 정도 걸릴 수 있습니다.
  9. 세부 정보 탭에서 해당 환경과 관련된 서비스 역할에 필요한 권한이 모두 있는지 확인합니다.
  10. 상태 섹션에서 상태 열이 사용인지 확인합니다.
  11. 컴퓨팅 리소스 탭에서 최대 vCPU 값을 확인합니다. 이 값은 AWS Batch가 작업을 실행하기 위해 원하는 vCPU 수를 늘릴 수 있을 만큼 충분히 높아야 합니다.
    참고: Fargate 컴퓨팅 환경을 사용하는 경우 컴퓨팅 환경의 네트워크 및 보안 설정 확인 섹션을 참조하십시오.
  12. 원하는 vCPU 값이 작업을 실행해야 하는 vCPU의 수 이상인지 확인합니다.
  13. 원하는 vCPU 값이 0인 경우, Amazon EC2 인스턴스 유형에 사용 가능한 메모리 및 CPU 리소스의 양을 확인합니다. 원하는 vCPU 값이 0보다 크거나 작업이 아직 RUNNABLE 상태인 경우, 다음 섹션의 단계를 완료합니다.

각 컴퓨팅 환경에 대해 6~14번 단계를 반복합니다.

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

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

작업을 실행하는 컴퓨팅 환경에서 다음 단계를 완료하십시오.

  1. Amazon ECS 콘솔을 엽니다.
  2. 탐색 창에서 클러스터를 선택한 다음, 작업이 포함된 클러스터를 선택합니다.
    참고: 클러스터 이름은 컴퓨팅 환경의 이름으로 시작하고 그 뒤에 _Batch_ 및 숫자와 문자의 임의 해시가 나옵니다.
  3. 인프라 탭을 선택합니다.
  4. 컨테이너 인스턴스 섹션에서 해당 컨테이너 인스턴스를 찾은 다음, 작업을 실행하는 데 컨테이너 인스턴스를 사용할 수 있는지 확인합니다.

클러스터에 작업을 실행하는 데 사용할 수 있는 컨테이너 인스턴스가 있는 경우 Docker 대몬Amazon ECS 컨테이너 에이전트의 상태를 확인하십시오. 자세한 내용은 연결이 끊긴 Amazon ECS 에이전트의 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

Amazon ECS 클러스터에 인스턴스가 없는 경우 컴퓨팅 환경에서 인스턴스를 만들 수 있는지 확인하십시오.

온디맨드 컴퓨팅 환경

다음 단계를 완료하십시오.

  1. Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Auto Scaling을 선택한 다음, Auto Scaling 그룹을 선택합니다.

  3. 검색 상자에 컴퓨팅 환경의 이름을 입력한 다음, 컴퓨팅 환경을 선택합니다.
    참고: Amazon EC2에서 동일한 컴퓨팅 환경에 대해 둘 이상의 Auto Scaling 그룹을 생성할 수 있습니다.

  4. 각 Auto Scaling 그룹에 대해 활동 탭을 선택한 다음, 활동 기록 섹션에서 차단 문제를 찾습니다.
    참고: 문제가 발생하여 인스턴스가 시작되지 않으면 상태 열에 실패가 표시됩니다.
    예를 들어 계정의 최대 인스턴스 수에 도달한 경우, 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 그룹을 수동으로 수정하면 컴퓨팅 환경이 무효화될 수 있습니다. 인스턴스 할당량 및 할당량 증가를 요청하는 방법에 대한 자세한 내용은 Amazon EC2 서비스 할당량을 참조하십시오.

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

중요: AWSServiceRoleForAutoScaling AWS Identity and Access Management(IAM) 서비스 역할에 대한 권한을 설정해야 합니다. AWSServiceRoleForAutoScaling IAM 역할은 고객 관리형 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. 상태에서 활성을 선택합니다.
  6. 설명을 선택한 다음, 총 목표 용량 값을 검토하여 스팟 인스턴스 요청이 이행되었는지 여부를 확인합니다. 인스턴스가 없는 경우 기록 보기를 확인하여 이유를 확인합니다.
    예를 들어, 입찰 가격에 도달할 수 없는 요청은 다음과 비슷한 메시지를 반환합니다.
    "m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324"
  7. 컴퓨팅 환경을 위한 적절한 입찰 비율을 선택합니다. 입찰 가격을 변경하는 경우 반드시 새 컴퓨팅 환경을 만들어야 합니다. 자세한 내용은 스팟 인스턴스 요금 기록을 참조합니다.
    참고: AWS Batch는 사용자를 대신하여 스팟 플릿 요청을 생성합니다. 스팟 플릿 요청을 수동으로 수정하지 마십시오. 그렇지 않으면 컴퓨팅 환경이 무효화될 수 있습니다.

Auto Scaling 그룹의 최근 이벤트에 성공한 이벤트만 표시되는 경우 다음 섹션의 단계를 완료하십시오.

컨테이너 인스턴스의 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"
    }
  ]
}
  1. 신뢰 정책에 위의 문이 포함된 경우 취소를 선택합니다. 신뢰 정책에 위의 문이 포함되어 있지 않은 경우 정책에 해당 문을 추가합니다. 그런 다음, 정책 업데이트를 선택합니다.

인스턴스가 여전히 Amazon ECS 클러스터에 조인되지 않은 경우 다음 섹션의 단계를 완료하십시오.

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

다음 단계를 완료하십시오.

  1. AWS Batch 콘솔을 엽니다.
  2. 탐색 창에서 환경을 선택한 다음, 컴퓨팅 환경을 선택합니다.
  3. 컴퓨팅 리소스 섹션에서 서브넷보안 그룹 값을 기록해 둡니다.
  4. Amazon Virtual Private Cloud(Amazon VPC) 콘솔을 엽니다.
  5. 탐색 창에서 서브넷을 선택합니다.
  6. 컴퓨팅 환경에서 각 서브넷을 선택한 다음, 세부 정보 탭에서 퍼블릭 IPv4 주소 자동 할당 값을 식별합니다.
    퍼블릭 IPv4 주소 자동 할당 값이 인 경우, 서브넷에서 실행된 인스턴스에는 다음 속성이 있습니다.
    퍼블릭 IPv4 주소
    경로 대상이 0.0.0.0/0인 라우팅 테이블
    대상으로 설정된 인터넷 게이트웨이(예: igw-1a2b3c4d)
    퍼블릭 IPv4 주소 자동 할당 값이 아니요인 경우, 서브넷에서 실행된 인스턴스에는 다음 속성이 있습니다.
    프라이빗 IPv4 주소
    경로 대상이 0.0.0.0/0인 라우팅 테이블
    대상으로 설정된 NAT 게이트웨이(예: nat-12345678901234567)
    참고: 자세한 내용은 라우팅을 참조하십시오.
  7. 탐색 창에서 보안 그룹을 선택합니다.
  8. 컴퓨팅 환경의 각 보안 그룹에 대해 아웃바운드 규칙 탭을 선택합니다. 그 후 다음 설정을 사용하는 규칙이 있는지 확인합니다.
    유형에서 모든 트래픽을 선택합니다.
    프로토콜에서 모두를 선택합니다.
    포트 범위에서 모두를 선택합니다.
    대상에서 0.0.0.0/0을 선택합니다.
    중요: 규칙이 없는 경우 작업을 선택한 다음, 아웃바운드 규칙 편집을 선택합니다. 그런 다음, 규칙을 만듭니다. 아웃바운드 트래픽에 더 제한적인 규칙을 사용하려면 유형에서 **HTTPS(443)**를, 대상에서 0.0.0.0/0을 선택합니다.
  9. 탐색 창에서 네트워크 ACL을 선택합니다.
  10. VPC의 네트워크 액세스 제어 목록(네트워크 ACL)을 선택합니다.
  11. 인바운드 규칙아웃바운드 규칙 탭에서 네트워크 ACL이 모든 트래픽에 연결된 서브넷에서 들어오고 나가는 것을 허용하는지 확인합니다.

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

인스턴스가 여전히 Amazon ECS 클러스터에 조인되지 않은 경우 인스턴스에 연결합니다. Docker 대몬Amazon ECS 컨테이너 에이전트의 상태를 확인합니다. 자세한 내용은 연결이 끊긴 Amazon ECS 에이전트의 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

참고: RUNNABLE 상태로 멈춘 AWS Batch 작업의 문제를 추가로 해결하려면 AWS CloudTrail을 사용하십시오. 사용자 이름 속성을 aws-batch로 설정하여 예약된 작업 중에 발생하는 오류를 검색합니다.

관련 정보

SSH를 사용하여 Linux 인스턴스에 연결

RDP를 사용하여 Windows 인스턴스에 연결

사용자가 AWS Batch에서 차단된 작업 대기열을 감지하고 이에 대응하는 데 도움이 되는 새로운 알림 도입

AWS Batch에서 작업 대기열의 맨 앞에 있는 작업을 볼 수 있는 작업 대기열 스냅샷 도입

AWS 공식업데이트됨 일 년 전