컨테이너 이미지를 사용하여 AWS Batch 알아보기

I. 개요

AWS Batch 는 클라우드 환경에서 많은 양의 작업을 효율적으로 처리하기 위해 자동으로 자원을 할당하고 실행하는 서비스 입니다.

AWS Batch 를 통해 대규모 데이터를 처리하거나 작업을 자동으로 관리 할 수 있으며 제출된 작업에 따라 리소스를 효율적으로 프로비저닝하여 수요에 따라 자동으로 스케일 인/아웃이 가능하며, 비용 효율성을 획득 할 수 있습니다. 또한 인프라를 구성하고 관리하는 획일적이고 수고스러운 서버 작업에 대한 부담을 줄이고, 개발에 집중할 수 있도록 하여 업무 효율성을 증대 시킬 수 있습니다.

수만개의 동영상 파일을 변환해야 하는 작업이나 대량의 유전체를 분석 해야 하는 작업 등을 할 때, AWS Batch 를 사용하면 빠른 작업 속도와 함께 비용 효율적이고, 간단한 작업으로 만들 수 있습니다.

본문에서는 간단한 컨테이너 이미지를 활용한 Hands on 을 통해 AWS Batch 에서 실행해보고, AWS Batch 사용 방법과 동작 프로세스에 대해서 자세히 알아보겠습니다.

II. Hands on

AWS Batch 자세히 알아보기

AWS Batch 는 크게 1. 컴퓨팅 환경 2. 작업 정의 3.작업대기열 세가지 영역을 구성 해야합니다. 이 세가지가 유기적으로 연결되어 작업 제출을 하게 되면 세가지 영역에 설정된 구성으로 AWS Batch 작업이 실행됩니다. AWS Batch 는 사용자가 설정한 구성에 따라 Amazon ECS에서 실행되며 이때, AWS Batch 와 Amazon ECS 의 비용은 발생하지 않고, ECS가 실행 된 인프라 리소스에 대해서만 비용이 발생합니다.

컴퓨팅 환경은 컨테이너화된 배치 작업을 실행하는데 사용되는 Amazon ECS 컨테이너 인스턴스를 설정하는 섹션으로, 인스턴스 구성, 네트워크 구성 등을 결정합니다. 작업대기열은 하나 이상의 컴퓨터 환경에 매핑되며 하나의 작업 대기열이 여러개의 컴퓨터 환경과 매핑 될 수도 있습니다. 이렇게 1대 다로 매핑이 되었을때

작업 정의는 작업 실행 방법을 지정하는 섹션입니다. 이 섹션에서는 실행시간과 작업 시도 횟수 등에 대해서 정의하며, 어떠한 작업을 실행할지에 대한 이미지를 지정하는 설정도 해당 섹션에서 구성합니다. 또한 작업이 실행할때 사용되는 명령어를 지정하고, 실행되는 컨테이너의 리소스 사양을 지정합니다.

작업대기열은 작업 제출을 하기 전, 컴퓨팅 환경을 연결하고, 복수의 컴퓨팅 환경을 연결하는 경우 우선 순위를 지정합니다.

이렇게 세 영역에 대하여 구성이 완료 되면 최종적으로 작업 제출 섹션을 통해 사용할 작업 정의와 작업 대기열을 설정하여 작업을 구성하고 작업이 시작될 수 있도록 작업 제출 합니다.

사전준비. AWS Batch 를 통해 작업할 이미지 준비

AWS Batch 를 통해 실행할 배치작업의 컨테이너 이미지를 준비하고, ECR 에 푸시하여 AWS Batch 가 이 이미지를 사용할 수 있도록 사전 준비를 합니다.

AWS Batch 는 ECR 리포지토리를 컴퓨팅 환경에 다운로드 하여 사용하기 때문에 AWS Batch 의 컴퓨팅 환경 작업속성 섹션에서 ECR 리포지토리에 대한 읽기 전용 액세스를 제공하는 실행 역할을 부여해야 합니다.

사전준비가 완료 되었다면 AWS Batch 를 설정합니다.

  1. AWS Batch 컴퓨팅 환경 구성

1-1) 컴퓨팅 환경 구성

AWS Batch 작업을 실행하게되면 실제 작업은 ECS 를 통해 실행되는데, 이때 ECS 가 실행 될 환경을 선택합니다.

Fargate : 초기 설정 및 구성이 적고, 서버나 용량계획, 보안 등 고려할 요소가 적음

EC2 : 높은 수준의 처리량이 필요할때 적합

EKS : 즉시 실행해야 하는 작업에 적합

서비스 역할은 Batch 에 필요한 모든 권한을 포함하는 AWSServiceRoleForBatch 를 선택하고, 인스턴스 역할은 ECS 를 실행하기 위한 ecsInstanceRole 을 선택합니다.

1-2) 인스턴스 구성

AWS Batch 는 워크로드가 컨테이너화 되어 있으므로 스팟인스턴스를 사용하기에 적합한 서비스 입니다.

비용 효율을 위하여 스팟 인스턴스를 선택하고, 온디맨드 가격 최대 % 를 조정하여 스팟 인스턴스 가격이 일정 이상으로 떨어지지 않으면 배치 작업을 시작하지 못하도록 설정하여 비용을 절감합니다. 하지만 온디맨드 가격 최대 % 를 너무 낮게 설정할 경우 해당 가격 이하로 스팟 인스턴스의 가격이 내려가지 않을 시 배치 작업이 진행되지 않고 runnable 상태로 지속되기 때문에 적정한 온디맨드 가격 최대% 를 설정해야 합니다.

실행할 작업이 없을 경우 인스턴스 시간이 낭비되지 않도록 최소 vCPU 를 0으로 하고, 실습하고자하는 컨테이너 이미지에 적합하게 원하는 vCPU와 최대 vCPU 를 설정합니다.

허용된 인스턴스 유형은 Optimal은 C4, M4, R4 인스턴스 패밀리 중 작업 대기열의 수요에 맞는 최적의 인스턴스가 자동으로 선택됩니다.

1-3) 네트워크 구성

보안을 강화하기 위하여 AWS Batch 작업이 이루어지는 ECS 는 Private 서브넷에서 구성되도록 설정합니다.

이 때, ECS 는 ECR 에 저장된 컨테이너 이미지를 가져와야 하기 때문에 ECR 과는 통신할 수 있도록 NAT gateway 와 같은 네트워크 설정을 사용하여 Private 서브넷에 구성하지만 외부와 통신가능하도록 설정해야 합니다.

설정이 완료되면 컴퓨팅 환경 Valid, Enabled 상태인지 확인합니다.

2. AWS Batch 작업 정의 구성

2-1) 작업 및 오케스트레이션 유형 구성

실행 제한 시간을 설정하여 배치가 완료되지 않은 작업을 종료하는 시간을 지정해주고, 예약 우선 순위와 작업 시도 횟수 역시 사용자가 원하는 만큼 조정합니다.

2-2) 컨테이너 구성

컨테이너 구성에서 앞서 ECR 에 푸시한 컨테이너 이미지를 지정하고, 작업이 실행될 때 실행할 명령어가 있다면 지정해줍니다.

실행 역할과 작업 역할은 ECS에서 AWS API 를 직접 호출할 수 있는 ecsTaskExecutionRole 을 설정합니다.

사용자가 작업할 이미지에 맞는 컨테이너 환경 구성을 설정하고,
컨테이너 내 사용할 사용자 이름, Init 프로세스 활성화, 로그를 위한 설정들을 지정합니다.

3. 작업대기열 구성

컴퓨터 환경과 연결할 작업 대기열을 구성합니다.

이 때, 연결하려는 컴퓨터 환경을 지정하고 컴퓨팅 환경을 다수 연결 할 경우 우선순위도 지정합니다.

4. 작업 제출

앞서 컴퓨팅환경, 작업정의, 작업대기열 구성이 완료되었다면 그 구성들을 사용한 작업을 생성하여 제출 합니다.

5. 결과 확인

Cloudwatch 를 통해 작업이 정상적으로 실행되었음이 확인 가능합니다.

ECS 에서도 클러스터가 생성되어 실행되었음을 확인 가능합니다.

EC2 를 확인해보면 해당 Batch 작업이 실행되기위한 Spot Instance 가 실행되었다가 종료 되었음을 확인할 수 있습니다.
aws cli 를 통해서도 해당 작업이 성공적으로 수행되었음을 확인 가능합니다.

 III. 마무리

AWS Batch 를 통해 간단한 컨테이너 이미지를 실행해보았습니다. 본문을 통해 진행한 실습은 AWS Batch 실행 방법 및 동작 프로세스를 이해하기 위한 작은 스케일의 과정이지만 실제 AWS Batch 를 통해 미디어 작업 처리, 데이터 분석 등 대규모 배치 컴퓨팅 작업을 효율적으로 진행할 수 있습니다. 어떠한 컨테이너 이미지를 사용함에 따라 다양하고 복잡한 작업을 간단한 인프라 설정으로 실행할 수 있습니다.

AWS Batch 의 자동 프로비저닝 과정을 통해 워크로드에 따른 최적의 수량과 유형의 클라우드 기반 컴퓨팅 인스턴스를 AWS Batch 가 제공하고 해당 작업이 이루어지는 시간 동안에만 리소스를 활성화하여 비용 절감의 효과와 경제적인 사용 프로세스를 얻을 수 있습니다.

사용자는 AWS Batch 실행을 통해 해당 리소스가 필요할 때만 활성화할 수 있으며 수요의 변화에 따라 확장 및 축소가 용이하고, 관리 포인트가 간소화된 인프라를 합리적으로 운영 및 관리 할 수 있습니다.

참고 자료 출처

https://catalog.workshops.aws/aws-batch-deep-dive/en-US
https://techblog.tabling.co.kr/aws-batch-%EC%98%88%EC%A0%9C%EB%A1%9C-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0-3b45fd9eebab
https://docs.aws.amazon.com/ko_kr/batch/latest/userguide/what-is-batch.html
https://docs.aws.amazon.com/ko_kr/batch/latest/userguide/jobs.html
https://seqera.io/blog/nextflow-and-aws-batch-inside-the-integration-part-1-of-3/

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다