AWS Glue를 사용하여 Amazon S3에서 Amazon Redshift로 데이터를 점진적으로 로드하는 ETL 서비스 파이프라인 구축 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Glue를 사용하여 Amazon S3에서 Amazon Redshift로 데이터를 점진적으로 로드하는 ETL 서비스 파이프라인 구축

작성자: Rohan Jamadagni(AWS) 및 Arunabha Datta(AWS)

환경: 프로덕션

기술: 분석, 데이터 레이크, 스토리지 및 백업

AWS 서비스: Amazon Redshift, Amazon S3, AWS Glue, AWS Lambda

요약

이 패턴은 최적의 데이터 레이크 성능을 위해 Amazon Simple Storage Service(Amazon S3)를 구성한 다음 AWSGlue를 사용하여 추출, 변환 및 로드(ETL) 작업을 수행하여 Amazon S3에서 Amazon Redshift로 증분 데이터 변경 사항을 로드하는 방법에 대한 지침을 제공합니다. 

Amazon S3의 소스 파일은 쉼표로 구분된 값(CSV), 및 XML JSON 파일을 포함하여 다양한 형식을 가질 수 있습니다. 이 패턴은 AWS Glue를 사용하여 소스 파일을 Apache Parquet와 같은 비용 최적화 및 성능 최적화 형식으로 변환하는 방법을 설명합니다. Amazon Athena와 Amazon Redshift Spectrum에서 직접 파켓 파일을 쿼리할 수 있습니다. 또한 Parquet 파일을 Amazon Redshift에 로드하고, 집계하고, 집계된 데이터를 소비자와 공유하거나 Amazon 를 사용하여 데이터를 시각화할 수 있습니다 QuickSight.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정.

  • 올바른 권한이 있고 CSV, XML또는 JSON 파일을 포함하는 S3 소스 버킷입니다.

가정

  • CSV, XML또는 JSON 소스 파일은 Amazon S3에 이미 로드되어 있으며 AWS Glue 및 Amazon Redshift가 구성된 계정에서 액세스할 수 있습니다.

  • Amazon Redshift 설명서에 설명된 대로 파일 로드, 파일 분할, 압축 및 매니페스트 사용에 대한 모범 사례를 따릅니다.

  • 소스 파일 구조는 변경되지 않습니다.

  • 소스 시스템은 Amazon S3에 정의된 폴더 구조를 따라 Amazon S3에 데이터를 수집할 수 있습니다.

  • Amazon Redshift 클러스터는 단일 가용 영역에 걸쳐 있습니다. (AWSLambda, AWS Glue 및 Amazon Athena는 서버가 없기 때문에 이 아키텍처가 적합합니다.) 고가용성을 위해 클러스터 스냅샷은 일정한 빈도로 촬영됩니다.

제한 사항

아키텍처

소스 기술 스택  

  • CSV, XML또는 JSON 파일이 있는 S3 버킷

대상 기술 스택

  • S3 데이터 레이크(파티셔닝된 Parquet 파일 스토리지 포함)

  • Amazon Redshift

대상 아키텍처 

AWS Glue를 사용하여 Amazon S3에서 Amazon Redshift로 증분 변경 사항을 로드하기 위한 아키텍처입니다.

데이터 흐름

AWS Glue를 사용하여 Amazon S3에서 Amazon Redshift로 증분 변경 사항을 로드하기 위한 데이터 흐름입니다.

도구

  • Amazon S3 - Amazon Simple Storage Service(S3)는 확장성이 뛰어난 객체 스토리지 서비스입니다. Amazon S3는 웹 사이트, 모바일 애플리케이션, 백업, 데이터 레이크 등 다양한 스토리지 솔루션에 사용할 수 있습니다.

  • AWS Lambda – AWS Lambda를 사용하면 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. AWS Lambda는 이벤트 기반 서비스입니다. 다른 AWS 서비스에서 자동으로 시작하도록 코드를 설정할 수 있습니다.

  • Amazon Redshift - Amazon Redshift는 클라우드의 완전 관리형 페타바이트 규모 데이터 웨어하우스 서비스입니다. Amazon Redshift를 사용하면 표준 를 사용하여 데이터 웨어하우스와 데이터 레이크에서 페타바이트의 구조화 및 반구조화 데이터를 쿼리할 수 있습니다SQL.

  • AWS Glue – AWS Glue는 분석을 위해 데이터를 더 쉽게 준비하고 로드할 수 있는 완전 관리형 ETL 서비스입니다. AWS Glue는 데이터를 검색하고 연결된 메타데이터(예: 테이블 정의 및 스키마)를 AWS Glue 데이터 카탈로그에 저장합니다. 카탈로그화된 데이터는 즉시 검색할 수 있으며 쿼리할 수 있고 에서 사용할 수 있습니다ETL.

  • AWS Secrets Manager – AWS Secrets Manager는 애플리케이션 또는 서비스 액세스에 필요한 보안 암호의 보호 및 중앙 관리를 용이하게 합니다. 이 서비스는 데이터베이스 보안 인증 정보, API 키 및 기타 보안 암호를 저장하므로 민감한 정보를 일반 텍스트 형식으로 하드코딩할 필요가 없습니다. Secrets Manager는 또한 보안 및 규정 준수 요구 사항을 충족하기 위해 키 교체를 제공합니다. Amazon Redshift, Amazon Relational Database Service(AmazonRDS) 및 Amazon DocumentDB 에 대한 통합이 내장되어 있습니다. Secrets Manager 콘솔, 명령줄 인터페이스(CLI) 또는 Secrets Manager 및 를 사용하여 보안 암호를 저장API하고 중앙에서 관리할 수 있습니다SDKs.

  • Amazon Athena - Amazon Athena는 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화형 쿼리 서비스입니다. Athena는 서버리스이며 AWS Glue와 통합되어 있으므로 AWSGlue를 사용하여 카탈로그화된 데이터를 직접 쿼리할 수 있습니다. Athena는 탄력적으로 확장되어 대화형 쿼리 성능을 제공합니다.

에픽

작업설명필요한 기술

소스 시스템의 데이터 구조 및 속성을 분석합니다.

Amazon S3 데이터 레이크에 포함되는 데이터 소스에 대해 이 작업을 수행합니다.

데이터 엔지니어

파티션 및 액세스 전략을 정의합니다.

이 전략은 데이터 캡처 빈도, 델타 처리 및 소비 요구 사항을 기반으로 해야 합니다. S3 버킷은 일반에 공개되지 않도록 하고 액세스는 특정 서비스 역할 기반 정책으로만 제어해야 합니다. 자세한 내용은 Amazon S3 설명서를 참조하십시오.

데이터 엔지니어

각 데이터 소스 유형에 대해 별도의 S3 버킷을 생성하고 처리된 (Parquet) 데이터에 대해 소스별로 별도의 S3 버킷을 생성합니다.

각 소스에 대해 별도의 버킷을 생성한 다음, 소스 시스템의 데이터 수집 빈도에 따라 폴더 구조를 생성합니다. 예: s3://source-system-name/date/hour. 처리된 (Parquet 형식으로 변환된) 파일의 경우 비슷한 구조를 생성합니다. 예: s3://source-processed-bucket/date/hour. S3 버킷 생성에 대한 자세한 내용은 Amazon S3 설명서를 참조하세요.

데이터 엔지니어
작업설명필요한 기술

적절한 파라미터 그룹과 유지 관리 및 백업 전략을 사용하여 Amazon Redshift 클러스터를 시작합니다.

Amazon Redshift 클러스터를 생성할 때는 Secrets Manager 데이터베이스 암호를 관리자 보안 인증 정보로 사용하세요. Amazon Redshift 클러스터를 생성하고 크기를 조정하는 방법에 대한 자세한 내용은 Amazon Redshift 설명서클라우드 데이터 웨어하우스 크기 조정 백서를 참조하세요.

데이터 엔지니어

IAM 서비스 역할을 생성하고 Amazon Redshift 클러스터에 연결합니다.

AWS Identity and Access Management(IAM) 서비스 역할은 Secrets Manager 및 소스 S3 버킷에 대한 액세스를 보장합니다. 자세한 내용은 권한 부여 및 역할 추가에 대한 AWS 설명서를 참조하세요. https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-add-role.html

데이터 엔지니어

데이터베이스 스키마를 생성합니다.

Amazon Redshift 테이블 설계 모범 사례 사용 사례에 따라 적절한 정렬 및 배포 키와 가능한 최상의 압축 인코딩을 선택합니다. 모범 사례는 AWS 설명서를 참조하세요.

데이터 엔지니어

워크로드 관리 구성

요구 사항에 따라 워크로드 관리(WLM) 대기열, 짧은 쿼리 가속화(SQA) 또는 동시성 조정을 구성합니다. 자세한 내용은 Amazon Redshift 설명서의 워크로드 관리 구현을 참고하세요.

데이터 엔지니어
작업설명필요한 기술

새 암호를 생성하여 Amazon Redshift 로그인 보안 인증 정보을 Secrets Manager에 저장합니다.

이 암호는 개별 데이터베이스 서비스 사용자뿐 아니라 관리자 사용자의 보안 인증 정보를 저장합니다. 자세한 지침은 Secrets Manager 설명서를 참조하세요. Amazon Redshift 클러스터를 암호 유형으로 선택합니다. 또한 암호 교체 페이지에서 교체를 활성화하세요. 그러면 Amazon Redshift 클러스터에 적절한 사용자가 생성되고 정의된 간격에 따라 키 암호가 교체됩니다.

데이터 엔지니어

Secrets Manager 액세스를 제한하는 IAM 정책을 생성합니다.

Secrets Manager 액세스를 Amazon Redshift 관리자 및 AWS Glue로만 제한합니다.

데이터 엔지니어
작업설명필요한 기술

AWS Glue Data Catalog에서 Amazon Redshift에 대한 연결을 추가합니다.

지침은 AWS Glue 설명서 를 참조하세요.

데이터 엔지니어

Secrets Manager, Amazon Redshift 및 S3 버킷에 액세스하기 위해 AWS Glue에 대한 IAM 서비스 역할을 생성하고 연결합니다.

자세한 내용은 AWS Glue 설명서 를 참조하세요.

데이터 엔지니어

소스의 AWS Glue 데이터 카탈로그를 정의합니다.

이 단계에서는 AWS Glue 데이터 카탈로그에서 데이터베이스 및 필수 테이블을 생성합니다. 크롤러를 사용하여 AWS Glue 데이터베이스의 테이블을 카탈로그화하거나 Amazon Athena 외부 테이블로 정의할 수 있습니다. AWS Glue 데이터 카탈로그를 통해 Athena에 정의된 외부 테이블에 액세스할 수도 있습니다. Data Catalog 정의 및 Athena에서 외부 테이블 생성에 대한 자세한 내용은 AWS 설명서를 참조하세요.

데이터 엔지니어

소스 데이터를 처리하기 위한 AWS Glue 작업을 생성합니다.

Glue 작업은 Python AWS 쉘이거나 소스 데이터 파일을 표준화, 중복 제거 및 정리 PySpark 하는 작업일 수 있습니다. 성능을 최적화하고 전체 S3 소스 버킷을 쿼리할 필요가 없도록 S3 버킷을 날짜별로 분할하고 연도, 월, 일 및 시간으로 구분하여 AWS Glue 작업에 대한 푸시다운 예측으로 분할합니다. 자세한 내용은 AWS Glue 설명서 를 참조하세요. 처리 및 변환된 데이터를 처리된 S3 버킷 파티션에 Parquet 형식으로 로드합니다. Athena에서 파켓 파일을 쿼리할 수 있습니다.

데이터 엔지니어

AWS Glue 작업을 생성하여 Amazon Redshift에 데이터를 로드합니다.

Glue 작업은 Python AWS 쉘이거나 데이터를 업서스팅한 다음 완전히 새로 고침하여 데이터를 로드 PySpark 할 수 있습니다. 자세한 내용은 AWS Glue 설명서추가 정보 섹션을 참조하세요.

데이터 엔지니어

(선택 사항) 필요에 따라 트리거를 사용하여 AWS Glue 작업을 예약합니다.

증분 데이터 로드는 주로 AWS Lambda 함수가 AWS Glue 작업을 호출하도록 하는 Amazon S3 이벤트에 의해 구동됩니다. 이벤트 기반 예약 대신 시간 기반 를 요구하는 모든 데이터 로드에 대해 AWS Glue 트리거 기반 예약을 사용합니다.

데이터 엔지니어
작업설명필요한 기술

AWS Lambda가 S3 버킷 및 AWS Glue 작업에 액세스할 수 있는 IAM 서비스 연결 역할을 생성하고 연결합니다.

Amazon S3 객체 및 버킷을 읽기 위한 정책과 Glue 작업을 시작하기 위해 AWS AWSGlue에 액세스하는 정책을 사용하여 AWS LambdaAPI에 대한 IAM 서비스 연결 역할을 생성합니다. 자세한 정보는 지식 센터를 참조하세요.

데이터 엔지니어

Lambda 함수를 생성하여 정의된 Amazon S3 이벤트를 기반으로 AWS Glue 작업을 실행합니다.

Amazon S3 매니페스트 파일을 생성하여 Lambda 함수를 시작해야 합니다. Lambda 함수는 Amazon S3 폴더 위치(예: source_bucket/year/month/date/hour)를 AWS Glue 작업에 파라미터로 전달해야 합니다. AWS Glue 작업은 이 파라미터를 푸시다운 예측으로 사용하여 파일 액세스 및 작업 처리 성능을 최적화합니다. 자세한 내용은 AWS Glue 설명서 를 참조하세요.

데이터 엔지니어

Amazon S3 PUT 객체 이벤트를 생성하여 객체 생성을 감지하고 해당 Lambda 함수를 호출합니다.

Amazon S3 PUT 객체 이벤트는 매니페스트 파일을 생성해야만 시작해야 합니다. 매니페스트 파일은 Lambda 함수와 AWS Glue 작업 동시성을 제어하고, S3 소스 버킷의 특정 파티션에 도착하는 개별 파일을 처리하는 대신 로드를 배치로 처리합니다. 자세한 내용은 Lambda 설명서를 참조하세요.

데이터 엔지니어

관련 리소스

추가 정보

완전히 새로고침하기 위한 세부 접근 방식

업서트: 비즈니스 사용 사례에 따라 기록의 집계가 필요한 데이터 세트를 위한 것입니다. 비즈니스에 필요한 사항에 따라 새 데이터 업데이트 및 삽입 (Amazon Redshift 설명서)에 설명된 접근 방식 중 하나를 따르십시오.

전체 새로 고침: 기록 집계가 필요하지 않은 소규모 데이터 세트를 위한 것입니다. 다음 접근법 중 하나를 따르세요.

  1. Amazon Redshift 테이블을 자릅니다.

  2. 스테이징 영역에서 현재 파티션을 로드합니다.

또는:

  1. 현재 파티션 데이터를 사용하여 임시 테이블을 생성합니다.

  2. 대상 Amazon Redshift의 대상 테이블을 삭제합니다.

  3. 임시 테이블의 이름을 대상 테이블로 변경합니다.