AWS 기술 블로그

AWS Glue Job 리소스 사용량에 대한 알람 및 리포팅 자동화

이 글은 AWS Big Data Blog에 게시된 ‘Automate alerting and reporting for AWS Glue job resource usage by Michael Hamilton and Angus Ferguson’을 한국어로 번역 및 편집하였습니다.

데이터 변환은 규모에 관계없이 모든 조직의 비즈니스에 필요한 데이터 인사이트를 제공하는데 핵심적인 역할을 합니다. 이러한 인사이트를 얻기 위해 고객들은 종종 소스 시스템에서 ETL(추출, 변환, 로드) 작업을 수행하여 보강된 데이터 세트를 생성합니다. 오늘날 많은 조직들이 AWS Glue를 사용하여 서로 다른 소스에서 데이터를 가져와 데이터 레이크, 데이터베이스, 데이터 웨어하우스와 같은 리포지토리에 저장하고, 이를 활용할 수 있도록 ETL 파이프라인을 구축하고 있습니다. 이러한 조직들은 IT 환경 전반에서 비용을 절감하면서도 운영 성능과 효율성을 유지할 수 있는 방법을 찾고 있습니다.

여러분이 데이터 및 분석 담당 부사장이 되어 데이터 엔지니어와 분석가로 구성된 팀을 관리하면서 AWS에서 실행되는 데이터 및 분석 환경과 워크로드를 총괄하는 시나리오를 상상해 봅시다. 이 팀은 개발, 테스트 및 운영 환경에서 AWS Glue for Apache Spark 을 생성할 수 있습니다. 테스트 과정에서 Job 중 하나가 컴퓨팅 리소스를 자동으로 확장하도록 구성하지 않아 Job 실행 시간이 초과되었고, 예상보다 많은 비용이 발생했습니다. 일반적으로 이후 절차로는 Job을 분석하고, 비용 보고서를 통해 사용량이 급증한 계정을 확인하여, Job에서 어떤 일이 발생했는지 로그를 검토하는 등의 작업을 수행하게 됩니다. ETL Job을 수정한 후에는 AWS Glue 환경에 대한 모니터링을 구현하고, 표준 알림 임계값을 설정할 수 있습니다.

이 게시글은 ETL Job의 효율성을 쉽게 측정하고 요구 사항에 따라 구성 세부 정보를 조정할 수 있는 방법을 제공함으로써 조직에서 AWS Glue 환경을 사전에 모니터링하고 비용을 최적화하는 데 도움이 될 것입니다. 이메일을 통해 잘못 설정된 Glue 작업을 알려주는 솔루션도 함께 배포할 수 있습니다. 또한 리소스 사용량을 집계하고, Job 당 비용 견적을 제공하는 주간 보고서가 생성되어 이메일로 전송됩니다.

AWS Glue 비용 고려 사항

AWS Glue for Apache Spark Job은 Worker 개수와 Worker 유형으로 프로비저닝됩니다. 이러한 Job은 G.1X, G.2X, G.4X, G.8X, Z.2X (Ray) Worker 유형 중 하나에 속하며, Data Processing Units (DPUs)와 매핑됩니다. DPUs에는 정해진 크기의 CPU, 메모리, 디스크 공간이 포함됩니다. 다음 표에 자세한 내용이 나와 있습니다.

Worker type DPU vCPU 메모리 (GB) 디스크 (GB)
G.1X 1 4 16 64
G.2X 2 8 32 128
G.4X 4 16 64 256
G.8X 8 32 128 512
Z.2X 2 8 32 128

예를 들어, Job이 G.1X Worker 유형으로 10개의 Worker를  프로비저닝한 경우 해당 Job은 데이터를 처리하는데 40 vCPU, 160GB RAM를 사용할 수 있으며, G.2X는 G.1X의 두 배만큼 데이터를 처리할 수 있습니다.  하지만 Worker를 과도하게 프로비저닝하면, 모든 Worker를 효율적으로 활용하지 못하기 때문에 비용이 증가할 수 있습니다.

2022년 4월, Auto Scaling for AWS Glue 기능이  Glue 3.0 이상 버전에서 출시되었습니다. 여기에는 AWS Glue for Apache Spark과 Streaming Job이 포함됩니다. AWS Glue for Apache Spark에서 자동 크기 조정을 활성화하면, 지정한 최대 Worker 수까지 필요에 따라 Worker를 할당할 수 있습니다. 해당 기능은 비용을 절감하고, ETL 작업을 최적화하는 데 도움이 되므로 AWS Glue 3.0 & 4.0 버전 Job에 대해 자동 확장을 사용하도록 설정하는 것이 좋습니다.

Amazon CloudWatch 지표는 평균 CPU 또는 메모리 사용량과 같은 특정 지표에 대한 알림을 생성하여, AWS Glue 환경을 모니터링할 수 있는 좋은 방법이기도 합니다. AWS Glue와 함께 CloudWatch 지표를 사용하는 방법에 대한 자세한 내용은 Amazon CloudWatch 지표를 사용한 AWS Glue 모니터링을 참조하십시오.

다음 솔루션은 AWS Glue Worker 및 Job duration 임계값을 설정하고, 모니터링을 구성하여, AWS Glue 환경의 성능에 대한 알림을 받는 간단한 방법을 제공합니다. Glue Job이 완료되고, Worker 및  Job duration 임계값을 초과하는 것을 감지하면 작업 실행 완료, 실패, 시간 초과 후에 알림을 받을 수 있습니다.

솔루션 개요

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

단계 요약

AWS Serverless Application Model (AWS SAM)을 통해 애플리케이션을 배포하면, 해당 계정에서 실행 중인 AWS Glue for Apache Spark 및 AWS Glue for Ray Job을 모니터링하기 위해 AWS Glue Worker와  Job duration 임계값을 입력하라는 메시지가 표시됩니다. 솔루션이 실행될 때, 이 값을 기준으로 설정됩니다. 다음은 아키텍처의 각 단계에 대한 상세 설명입니다:

  1. AWS Glue for Apache Spark의 Glue Job 중 성공, 실패, 중지, 시간 초과 시 모두 Amazon EventBridge로 전송됩니다.
  2. EventBridge는 AWS Glue에서 이벤트를 가져와 AWS Lambda 함수를 트리거합니다.
  3. Lambda 함수는 이벤트를 처리하고, 데이터 및 분석팀에 특정 Job 실행에 대한 알림 여부를 결정합니다. 이 함수는 다음 작업을 수행합니다:
    1. 필요한 경우 Amazon Simple Notification Service(Amazon SNS)를 사용하여 이메일을 보냅니다.
      • AWS Glue Job이 Worker 및 Job duration 임계값을 초과하지 않고 성공 또는 중단되었거나, 모니터링되지 않도록 태그가 지정된 경우에는 알림이나 통지를 보내지 않습니다.
      • Job이 성공했지만, Worker 및 Job duration 임계값이 허용된 것보다 초과하여 실행되었거나, 작업 실패 또는 시간 초과한 경우, Amazon SNS는 AWS Glue Job, Run ID, 알림 사유에 대한 정보와 함께 AWS Glue 콘솔의 해당 Run ID 링크가 포함된 알림을 지정된 이메일로 전송합니다.
    2. Lambda 함수는 Job 실행 정보를 Amazon DynamoDB에 기록하여, 주간 집계 보고서를 이메일로 전송합니다. DynamoDB 테이블은 저장 공간을 최소화하기 위해 7일 동안 Time to Live가 활성화됩니다.
  4. DynamoDB 내의 데이터는 일주일에 한 번 별도의 Lambda 함수에 의해 집계되며, 가장 오래 실행되는 Job, 재시도 횟수, 실패, 시간 초과, 비용 분석 등의 정보를 제공합니다.
  5. Amazon Simple Email Service (Amazon SES)는 보고서를 전달하기 위해 사용되며, 이는 Amazon SNS를 사용하는 것보다 더 나은 포맷을 사용할 수 있습니다. 보고서는 HTML 형식으로 출력되며, 집계된 Job 실행 데이터를 테이블로 제공합니다.
  6. 데이터 및 분석팀은 Amazon SNS를 통해 진행 중인 Job 실행에 대한 알림을 받으며, Amazon SES를 통해 주간 집계 보고서를 받습니다.

AWS Glue Python shell 및 Streaming ETL Job은 이 솔루션의 범위에 해당되지 않기 때문에 지원되지 않습니다.

사전 준비사항

솔루션을 배포하기 위해서는 아래와 같은 사항을 미리 준비해야 합니다.

  • 솔루션을 배포할 AWS 계정
  • 리소스를 생성할 수 있는 적절한 AWS Identity 및 Access Management(IAM) 권한
  • AWS 환경에서 템플릿을 실행하기 위해 AWS SAM CLI를 사용하여 아래 솔루션 구축 및 배포 필요

솔루션 배포

이 AWS SAM 애플리케이션은 다음 리소스를 프로비저닝합니다:

  • EventBridge rules (2)
  • Lambda functions (2)
  • SNS topic 및 subscription
  • DynamoDB 테이블
  • SES subscription
  • 필수 IAM roles 및 policies

AWS SAM 애플리케이션을 배포하려면, 다음 단계를 완료하세요:

* [역자 주]영문 글에서는  us-east-1리전에서만 정상 배포되며, 번역 글에서는 ap-northeast-2(서울 리전)에 맞게 코드를 수정했습니다.

aws-samples GitHub 리포지토리를 복제합니다:

git clone https://github.com/aws-samples/aws-glue-job-tracker-ko.git

AWS SAM 애플리케이션을 배포합니다:

cd aws-glue-job-tracker-ko
sam deploy --guided

다음 파라미터를 입력합니다:

GlueJobWorkerThreshold – AWS Glue Job이 해당 임계값 알림을 보내기 전까지 AWS Glue 작업을 실행할 수 있는 최대 Worker 수를 입력합니다. 기본값은 10입니다. 지정한 수보다 많은 worker가 실행되면 알림이 전송됩니다.

GlueJobDurationThreshold – AWS Glue Job이 해당 임계값 알림을 보내기 전까지 실행될 수 있는 최대 시간(분)을 입력합니다. 기본값은 480분(8시간)입니다. 지정한 시간보다 더 길게 Glue Job이 실행되면 알림이 전송됩니다.

GlueJobNotifications – Amazon SNS 및 Amazon SES를 통해 알림을 받아야 하는 대상의 이메일 또는 수신자 목록을 입력합니다. 배포가 완료된 후 SNS topic으로 이동하여 필요에 따라 이메일을 추가할 수 있습니다.

Amazon SNS 및 Amazon SES에서 이메일을 받으려면 subscription 을 확인해야 합니다. 스택이 배포된 후 템플릿에 지정된 이메일을 확인하고, 각 메시지의 링크를 선택하여 확인합니다. 애플리케이션이 성공적으로 프로비저닝되면, AWS Glue for Apache Spark job환경 모니터링이 시작됩니다. 이후 Job이 실패하거나, 시간이 초과하거나, 지정된 임계값을 초과하면 Amazon SNS를 통해 이메일을 받게 됩니다. 예를 들어, 아래 스크린샷은 Job은 성공했지만, Job duration 임계값을 초과한 Job에 대한 SNS 메시지를 보여줍니다.

더 많은 Worker 및  더 긴 Job duration 임계값으로 실행해야 하는 Job이 있을 수 있으며, 솔루션에서 이러한 Job을 수행하지 않기를 원할 수도 있습니다. 이럴 경우, 해당 Job에 Key=remediate, Value=false로 태그하기만 하면 됩니다. Step Function은 여전히 호출되지만 태그를 인식하면 PASS 상태가 됩니다. 작업 태그 지정에 대한 자세한 내용은 AWS Glue의 AWS 태그를 참조하세요.

Weekly reporting 설정

앞서 언급했듯이, AWS Glue for Apache Spark Job이 성공, 실패, 시간 초과, 중지되면 EventBridge는 해당 이벤트를 Lambda로 전달하여 각 Job 실행에 대한 세부 정보를 기록합니다. 일주일에 한 번, 별도의 Lambda 함수가 DynamoDB를 쿼리하고 Job 실행을 집계하여 AWS Glue for Apache Spark 환경에 대한 중요한 인사이트와 권장 사항을 제공합니다. 보고서는 다음 스크린샷과 같이 테이블 구조로 이메일을 통해 전송됩니다. 또한 높은 가시성을 제공하기 위한 것으로, 시간 경과에 따라 가장 오래 실행된 Job, 재시도 횟수, 실패 횟수가 많은 Job 등을 확인할 수 있습니다. 또한 해당 주에 각 AWS Glue Job의 예상 비용을 제공합니다. 하지만 이 비용을 확정된 비용으로 간주해서는 안 됩니다. Job 당 정확한 비용을 확인하려면 AWS Cost and Usage Report를 사용하는 것이 가장 좋습니다. 다음 스크린샷은 GlueJobReportFunction Lambda Function에서 생성되는 총 5개 중 하나의 테이블을 보여줍니다.

리소스 정리하기

솔루션을 더 이상 실행하지 않으려면 프로비저닝된 각 계정의 AWS SAM 애플리케이션을 삭제하세요. AWS SAM 스택을 삭제하려면 프로젝트 디렉터리에서 다음 명령을 실행합니다.

sam delete

결론

이 게시글에서는 조직의 표준 및 정책을 준수하기 위해 AWS Glue Job 구성을 모니터링하고, 비용을 최적화하는 방법에 대해 설명했습니다. 해당 방법을 사용하면 조직 전체에서 AWS Glue Job에 대한 비용 제어를 제공할 수 있습니다. AWS Glue for Apache Spark Job의 비용을 제어하는 데 도움이 되는 다른 방법으로는 AWS Glue Flex JobAuto Scaling이 있습니다. 또한 계정에 배포할 수 있는 솔루션으로 AWS SAM 애플리케이션을 제공했습니다. 이 게시글에 제공된 리소스를 검토하여, AWS Glue에 대해 계속 알아보는 것을 권장드립니다. AWS Glue를 사용한 비용 모니터링 및 최적화에 대해 자세히 알아보려면 이 최신 게시글을 참조하세요. 여기에는 모든 비용 최적화 옵션에 대해 자세히 설명되어 있으며, 모든 Glue 작업 실행에 대한 메트릭이 포함된 CloudWatch 대시보드를 구축하는 템플릿이 포함되어 있습니다.

JeongHee Chae

JeongHee Chae

채정희 솔루션즈 아키텍트는 인프라 운영 경험을 바탕으로 클라우드가 익숙하지 않는 고객들에게 클라우드를 효율적으로 시작할 수 있도록 도움을 드리는 역할을 하고 있습니다.