본문 바로가기
AWS

AWS Batch Job Queue Blocked 상태 처리 하기 (EventBridge)

by parkjp 2024. 6. 21.

서론

AWS Batch를 이용하다가 보면 배치 작업이 Runnable 상태에서 멈춰있는 작업이 생길 수 있습니다.

해당 작업을 EventBridge를 통해 자동화 하여 처리하는 방법에 대해 알아보도록 하겠습니다.

 

지난 글에서는 Batch 작업이 완료되거나 실패된 후에 EventBridge를 이용하여 후 처리를 하는 방법을 알아보았습니다.

못 보신분들은 아래 링크를 참고해 주세요.

 

https://developer-jp.tistory.com/206

 

AWS Batch - EventBridge를 이용한 상태 변경 처리 하기

서론AWS Batch를 쓰다보면 배치 작업이 완료나 실패처리가 된 후에 처리작업을 해야할 일이 생깁니다.오늘은 Batch 작업이 완료되거나 실패된 후에 EventBridge를 이용하여 후 처리를 하는 방법을 알아

developer-jp.tistory.com

 

반응형

Runnable에서 멈춰있는 작업 처리하기

우선 Runnable에서 멈춰 있는 작업은 여러 이유 때문에 발생할 수 있습니다.

구성 오류, 엑세스 권한 또는 용량 문제 등으로 발생 할 수 있는데요.

구성 또는 역할 설정을 잘못했다던지, gpu를 쓴다면 nvidia-device-plugin-daemonset이 설치가 되지 않았다던지, Quota가 부족하다던지, 물리적으로 AWS 측 Resource가 없다던지 등 여러 이유로 작업이 진행되지 않을 수 있습니다.

 

이렇게 멈춰있는 작업을 처리하려면 EventBridge를 이용해야 합니다.

이벤트를 받게 되면 해당 작업에 대한 상세정보와 사유를 받게 됩니다.

EventBridge를 설정하는 방법은 이전 글에서 설명하였으니, 간단하게 이벤트 규칙 패턴만 참고하시어 적용하시면 될 것 같습니다.

 

{
  "detail-type": ["Batch Job Queue Blocked"],
  "source": ["aws.batch"]
}

 

위 패턴은 모든 배치 작업에 대해 Queue가 막힌 경우에 이벤트가 발생되는 패턴입니다.

마찬가지로 "detail"키로 특정 Queue, 특정 구성에 대해서만 해당 이벤트가 발생하도록 할 수도 있습니다.

설정을 하고 나면 대상을 SQSLambda로 보내어 해당 작업을 종료 시키거나 다른 후처리 작업을 하실 수 있습니다.

 

아래에는 Queue Blocked Event가 발생했을 때 설정한 대상(sqs 또는 lambda 등)에서 받을 수 있는

이벤트 내용 예시입니다.

{
    "version": "0",
    "id": "c8f9c4b5-76e5-d76a-f980-7011e206042b",
    "detail-type": "Batch Job Queue Blocked",
    "source": "aws.batch",
    "account": "123456789012",
    "time": "2022-01-11T23:36:40Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:batch:us-east-1:123456789012:job/4c7599ae-0a82-49aa-ba5a-4727fcce14a8",
        "arn:aws:batch:us-east-1:123456789012:job-queue/PexjEHappyPathCanary2JobQueue"
    ],
    "detail": {
        "jobArn": "arn:aws:batch:us-east-1:123456789012:job/4c7599ae-0a82-49aa-ba5a-4727fcce14a8",
        "jobName": "event-test",
        "jobId": "4c7599ae-0a82-49aa-ba5a-4727fcce14a8",
        "jobQueue": "arn:aws:batch:us-east-1:123456789012:job-queue/PexjEHappyPathCanary2JobQueue",
        "status": "RUNNABLE",
        "statusReason": "blocked-reason"
        "attempts": [],
        "createdAt": 1641944200058,
        "retryStrategy": {
            "attempts": 2,
            "evaluateOnExit": []
        },
        "dependsOn": [],
        "jobDefinition": "arn:aws:batch:us-east-1:123456789012:job-definition/first-run-job-definition:1",
        "parameters": {},
        "container": {
            "image": "137112412989.dkr.ecr.us-east-1.amazonaws.com/amazonlinux:latest",
            "command": [
                "sleep",
                "600"
            ],
            "volumes": [],
            "environment": [],
            "mountPoints": [],
            "ulimits": [],
            "networkInterfaces": [],
            "resourceRequirements": [
                {
                    "value": "2",
                    "type": "VCPU"
                }, {
                    "value": "256",
                    "type": "MEMORY"
                }
            ],
            "secrets": []
        },
        "tags": {
            "resourceArn": "arn:aws:batch:us-east-1:123456789012:job/4c7599ae-0a82-49aa-ba5a-4727fcce14a8"
        },
        "propagateTags": false,
        "platformCapabilities": []
    }
}

 

 

마무리

 

오늘은 AWS EventBridge를 이용하여 Batch 작업에서 queue blocked events에 대한 처리 방법에 대해 알아보았습니다.

저도 위와 같은 방법으로 배치 작업이 막히는 경우에 Lambda로 보내어 작업을 취소시키고 후처리하는 것으로 진행하였습니다. 

 

아래 AWS Batch troubleshooting 문서를 참고해도 좋을 것 같습니다.

https://docs.aws.amazon.com/ko_kr/batch/latest/userguide/troubleshooting.html 

 

문제 해결 AWS Batch - AWS Batch

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

반응형