서론
AWS Batch를 이용하다가 보면 배치 작업이 Runnable 상태에서 멈춰있는 작업이 생길 수 있습니다.
해당 작업을 EventBridge를 통해 자동화 하여 처리하는 방법에 대해 알아보도록 하겠습니다.
지난 글에서는 Batch 작업이 완료되거나 실패된 후에 EventBridge를 이용하여 후 처리를 하는 방법을 알아보았습니다.
못 보신분들은 아래 링크를 참고해 주세요.
https://developer-jp.tistory.com/206
Runnable에서 멈춰있는 작업 처리하기
우선 Runnable에서 멈춰 있는 작업은 여러 이유 때문에 발생할 수 있습니다.
구성 오류, 엑세스 권한 또는 용량 문제 등으로 발생 할 수 있는데요.
구성 또는 역할 설정을 잘못했다던지, gpu를 쓴다면 nvidia-device-plugin-daemonset이 설치가 되지 않았다던지, Quota가 부족하다던지, 물리적으로 AWS 측 Resource가 없다던지 등 여러 이유로 작업이 진행되지 않을 수 있습니다.
이렇게 멈춰있는 작업을 처리하려면 EventBridge를 이용해야 합니다.
이벤트를 받게 되면 해당 작업에 대한 상세정보와 사유를 받게 됩니다.
EventBridge를 설정하는 방법은 이전 글에서 설명하였으니, 간단하게 이벤트 규칙 패턴만 참고하시어 적용하시면 될 것 같습니다.
{
"detail-type": ["Batch Job Queue Blocked"],
"source": ["aws.batch"]
}
위 패턴은 모든 배치 작업에 대해 Queue가 막힌 경우에 이벤트가 발생되는 패턴입니다.
마찬가지로 "detail"키로 특정 Queue, 특정 구성에 대해서만 해당 이벤트가 발생하도록 할 수도 있습니다.
설정을 하고 나면 대상을 SQS나 Lambda로 보내어 해당 작업을 종료 시키거나 다른 후처리 작업을 하실 수 있습니다.
아래에는 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' 카테고리의 다른 글
AWS Batch - EventBridge를 이용한 상태 변경 처리 하기 (0) | 2024.06.17 |
---|---|
AWS EKS NodeSelector 설정하기 (0) | 2024.02.19 |
AWS EKS tolerations, taints의 정의, 설정하기 (0) | 2024.02.05 |
AWS Batch와 EKS(k8s)를 사용하여 배치를 돌려보자 (0) | 2024.01.29 |
[AWS] SageMaker AutoScaling 자동화 (0) | 2023.08.07 |