[AWS] Batch

birdgang
7 min readDec 25, 2023

--

이번 시간엔 AWS Batch를 살펴봅시다.

배치(batch) 작업을 도커 이미지로서 실행하기 위해서는 두 가지 옵션이 있습니다.

첫 번째는 Fargate에서 배치 작업을 실행하는 겁니다. 배치 작업을 위한 완전한 서버리스 오퍼링을 제공하니 매우 유용하죠 저도 사용하곤 합니다.

또는 인스턴스를 동적 프로비저닝할 수도 있습니다. VPC에 있는 스팟 인스턴스와 EC2가 해당하겠죠. 이 내용은 곧 살펴볼 겁니다.

배치 작업의 두 가지 옵션을 꼭 기억하세요.

다음으로 배치 작업의 규모와 요구 사항에 따라 최적의 양과 타입을 선택해야 합니다.

AWS Batch는 전반적으로 Fargate나 EC2를 관리하니까 완전관리형 서버리스 서비스라고 생각할 수 있겠죠. 사용한 기본 리소스에 대해서만 지불하면 됩니다. Fargate든 EC2 인스턴스든 간에요.

예를 들어, 이미지를 배치 처리할 수 있고 수천 개의 동시 작업도 실행할 수 있죠 CloudWatch EventsEventBridge를 이용해서 배치 작업 일정을 짜거나 AWS Step Functions로 오케스트레이션할 수도 있죠.

AWS Batch — Solution Architecture

Amazon S3 이미지로 섬네일을 생성할 때 사용 가능한 솔루션 아키텍처를 살펴봅시다.

AWS Batch에서 배치 작업을 생성하면 ECS가 관리할 거예요. EC2 인스턴스나 스팟 플릿인 스팟 인스턴스가 될 수도 있고 서버리스 방식에서는 Fargate를 사용하겠죠. 이제 사용자가 Amazon S3에 업로드하는 파일이 이미지라고 가정할게요.

어떻게 Amazon S3에서 배치 작업을 트리거할까요? 두 가지 옵션이 있는데요.

첫 번째는 Amazon S3 이벤트 알림을 사용해서 Lambda 함수를 트리거하는 방법입니다. Lambda 함수는 AOS SDK로 API를 호출하고 배치 작업을 가동하죠.

두 번째는 Amazon S3에서 Amazon EventBridge로 이벤트를 바로 푸시하는 겁니다.

Amazon EventBridge는 Amazon S3 이벤트 알림을 바로 읽을 수 있으니까요. Amazon EventBridge는 Amazon ECS와 직접 통합됩니다. 그러니 이 단계는 Amazon EventBridge로 필터링 능력이 좋아진다는 이점이 있죠. 그리고 코드를 다룰 필요가 없으니 서버리스 오퍼링에 해당합니다.

Amazon EventBridge는 AWS Batch를 실행하는 방법을 알죠. 배치 작업이 실행되면 어떤 일이 일어날까요? 가령 Amazon ECR의 배치 작업에 의해 도커 이미지를 풀 하겠죠. 그리고 코드를 실행할 겁니다.

코드는 API 호출을 통해 Amazon S3에서 파일을 가져올 테니 이 배치 작업이 바른 IAM 역할을 갖추도록 만들어야 합니다.

Amazon S3로부터 가져온 파일을 처리하고 Amazon S3의 타겟 버킷 대상으로 보냅니다. 그다음 Amazon DynamoDB로 메타데이터를 넣죠. 이걸 모두 처리하려면 IAM 역할이 확실해야 합니다.

Batch vs. Lambda

Lambda와 배치(Batch)의 차이는 뭘까요?

Lambda는 시간제한이 있으므로 런타임이 제한되죠. 런타임 중에 빌드한 항목에 액세스하거나 AWS Lambda를 위해 빌드한 특수 컨테이너 이미지를 가져올 수 있지만 모든 도커 이미지를 가져올 수는 없습니다.

Lambda는 디스크 공간을 일시적이고 제한된 방식으로 제공합니다. 게다가 서버리스고요.

반면 배치는 시간제한이 없습니다.

배치 작업을 원하는 만큼 할 수 있죠. 도커 이미지로 패키징 되었다면 런타임을 제한하지 않습니다.

그러므로 더 유연하죠. 디스크 공간을 위해 EBS나 인스턴스 스토어를 사용하고 AWS가 직접 관리할 수 있는 EC2 인스턴스를 사용합니다.

서버리스로 진행하고 싶다면 Fargate를 사용하고요. 이제 컴퓨팅 환경에 대해 자세히 살펴봅시다.

첫 번째는 관리형 컴퓨팅 환경으로 이 경우 AWB Batch는 용량과 환경 내 인스턴스 타입을 관리합니다.

AWS Batch — Compute Environments

온디맨드와 스팟 인스턴스 중 선택할 수 있죠. 스팟 인스턴스의 최대 금액을 설정할 수도 있고요.

이를 통해 용량에 대해선 걱정할 필요가 없습니다. 용량을 확장하는 건 Amazon의 역할이죠. 게다가 비용도 비싸지 않을 거예요. 강화된 관리형 옵션이므로 이를 관리형 컴퓨팅 환경이라고 합니다.

모든 인스턴스가 VPC 안에서 실행 되죠. 만약 프라이빗 서브넷에서 인스턴스를 실행한다면 ECS 서비스에 액세스해야 합니다.

즉, 퍼블릭 라우트에 대한 ECS 서비스에 액세스하는 NAT Gateway나 NAT 인스턴스가 있어야 하죠. 아니면 프라이빗 엑세스를 위해 ECS 서비스를 위한 VPC 엔드포인트를 생성해야 합니다.

다음은 비관리형 컴퓨팅 환경입니다

인스턴스 구성을 제어 및 관리하고 프로비저닝과 확장을 할 수 있죠. 그러므로 여러분의 역할이 큽니다. 인스턴스에 대해 스스로 비용을 지불하고요.

AWS Batch — Managed Compute Environment

관리형 컴퓨팅 환경에 대해 더 자세하게 살펴봅시다 중요한 내용이 거든요

어떤 내용이 있을까요?

우선 AWS Batch를 통해 컴퓨팅 환경에 필요한 최소, 최대 vCPU를 설정합니다. 만약 스팟 인스턴스를 사용하면 스팟 인스턴스는 m5.large c5.xlarge, r5.2xlarge를 실행할 거예요.

실행하는 인스턴스 타입이 크게 중요한 건 아니에요. 중요한 건 설정한 최소, 최대 vCPU입니다. vCPU 기반의 인스턴스 총량을 확인하고 AWS Batch의 관리형 컴퓨팅 환경에 맞는지 확인합니다. 그다음 배치 작업 대기열이 생기죠. 이런 방식으로 EC2 인스턴스에 도커 컨테이너를 실행할 배치 작업이 분배됩니다.

AWS Batch로 작업을 보내려면 SDK를 사용해 작업 대기열에 작업을 추가해야 합니다. 이건 Lambda로도 할 수 있죠 CloudWatch Events로도 가능하고 Step Functions를 사용해도 됩니다.

배치 작업 대기열에 대기하는 작업이 많다면 오토 스케일링을 설정할 수 있습니다. 관리형 컴퓨팅 환경을 통해 자동으로 새 스팟 인스턴스와 새 온디맨드 인스턴스를 생성하고 작업 증감량에 대응하기 위해서요 작업 대기열의 크기에 따라 알맞은 환경을 갖출 수 있겠죠.

AWS Batch — Multi Node Mode

배치 작업 하나는 EC2 인스턴스 하나와 같다고 했죠. 다중 노드 모드에선 그렇지 않습니다.

다중 노드는 최신 모드에 해당하는데요. 큰 스케일과 고성능 컴퓨팅(HPC)을 원한다면 탁월한 선택이 되죠. 이 경우에는 작업 실행하기 위해 다중 EC2나 ECS 인스턴스를 동시에 활용합니다.

강하게 연결된 워크로드의 경우 도움이 되겠죠 또한 워크로드를 빠르게 처리하려면 동시에 여러 인스턴스가 있어야 합니다. 이건 단일 작업의 경우입니다. 한 작업을 위해 몇 개의 노드를 생성할지도 정해야 하죠. 다른 노드를 모두 관리하는 메인 노드 하나를 갖추고 그 외 노드는 자식 노드가 됩니다. 이때는 스팟 인스턴스를 사용하지 않고 EC2 실행 모드가 클러스터 배치 그룹에 있다면 더 좋습니다. 강화된 네트워킹이 가능하니까요. 아주 중요한 부분이에요.

다중 노드는 스팟 인스턴스를 사용하지 않고 배치 그룹은 클러스터 모드로 사용하는 게 좋아요. 배치 그룹에 클러스터 모드가 있으니 같은 가용 영역 내 같은 랙에 모든 게 있겠죠.

AWB Batch가 다중 노드 작업을 제출하면 실행될 EC2 메인 인스턴스가 하나 생길 거예요. 그럼 그 EC2 인스턴스가 실행되고 다중 노드 작업 내 다른 EC2 인스턴스를 관리하겠죠. 작업이 완료되면 모든 게 멈춥니다.

--

--

No responses yet