AWS 클라우드에서 인프라를 코드로 사용하여 서버리스 데이터 레이크 배포와 관리 - 권장 가이드

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

AWS 클라우드에서 인프라를 코드로 사용하여 서버리스 데이터 레이크 배포와 관리

작성자: Kirankumar Chandrashekar(AWS) 및 Abdel Jaidi

환경: 프로덕션

기술: 데이터 레이크, 분석, 서버리스, DevOps

워크로드: 기타 모든 워크로드

AWS 서비스: 아마존 S3, 아마존 SQS, AWS, AWS, AWS Glue, 아마존 CloudWatch, AWS Lambda, AWS Step Functions, 아마존 DynamoDB CloudFormation

요약

이 패턴은 서버리스 컴퓨팅코드형 인프라(IaC)를 사용하여 Amazon Web Services(AWS) 클라우드에서 데이터 레이크를 구현하고 관리하는 방법을 설명합니다. 이 패턴은 AWS에서 개발한 서버리스 데이터 레이크 프레임워크(SDLF) 워크숍을 기반으로 합니다.

SDLF는 AWS 클라우드의 엔터프라이즈 데이터 레이크 전송을 가속화하고 프로덕션에 더 빠르게 배포하는 데 도움이 되는 재사용 가능한 리소스 컬렉션입니다. 모범 사례에 따라 데이터 레이크의 기본 구조를 구현하는 데 사용됩니다.

SDLF는 AWS, AWS, CodePipeline AWS 등의 AWS 서비스를 사용하여 코드 및 인프라 배포 전반에 걸쳐 지속적 통합/지속적 배포 (CI/CD) 프로세스를 구현합니다. CodeBuild CodeCommit

이 패턴은 여러 서버리스 서비스를 사용하여 데이터 레이크 관리를 단순화합니다. 여기에는 스토리지용 아마존 심플 스토리지 서비스 (Amazon S3) 와 아마존 다이나모DB, 컴퓨팅용 AWS Lambda와 AWS Glue, 오케스트레이션을 위한 아마존 이벤트, 아마존 심플 큐 서비스 (Amazon SQS), CloudWatch AWS Step Functions가 포함됩니다.

CloudFormation AWS와 AWS 코드 서비스는 IaC 계층 역할을 하여 간편한 운영 및 관리와 함께 재현 가능하고 빠른 배포를 제공합니다.

사전 조건 및 제한 사항

사전 조건 

아키텍처

아키텍처 다이어그램은 다음 단계를 포함하는 이벤트 중심 프로세스를 보여줍니다. 

AWS 클라우드에서 데이터 레이크를 구현하고 관리합니다.
  1. 파일이 원시 데이터 S3 버킷에 추가된 후에 Amazon S3 이벤트 알림이 SQS 대기열에 배치됩니다. 각 알림은 S3 버킷 이름, 객체 키 또는 타임스탬프와 같은 메타데이터를 포함하는 JSON 파일로서 전송됩니다.

  2. 이 알림은 메타데이터를 기반으로 올바른 추출, 전환, 적재(ETL) 프로세스로 이벤트를 라우팅하는 Lambda 함수에서 사용됩니다. Lambda 함수는 Amazon DynamoDB 테이블에 저장된 상황별 구성을 사용할 수도 있습니다. 이 단계를 통해 데이터 레이크의 여러 애플리케이션을 분리하고 확장할 수 있습니다.

  3. 이벤트는 ETL 프로세스의 첫 번째 Lambda 함수로 라우팅되며, 이 함수는 원시 데이터 영역의 데이터를 데이터 레이크의 스테이징 영역으로 변환하고 이동합니다. 첫 번째 단계는 종합 카탈로그를 업데이트하는 것입니다. 이는 데이터 레이크의 모든 파일 메타데이터를 포함하는 DynamoDB 테이블입니다. 이 테이블의 각 행에는 Amazon S3에 저장된 단일 객체에 대한 운영 메타데이터가 들어 있습니다. Lambda 함수가 동기식으로 호출되어 S3 객체에서 계산에 따른 리소스 비용이 높은 작업인 광변환(예: 파일을 한 형식에서 다른 형식으로 변환하는 작업)을 수행합니다. 스테이징 S3 버킷에 새 객체가 추가되었으므로 종합 카탈로그가 업데이트되고 메시지가 ETL에서 다음 단계를 기다리면서 SQS 대기열로 전송됩니다.

  4. CloudWatch 이벤트 규칙은 5분마다 Lambda 함수를 트리거합니다. 이 함수는 메시지가 이전 ETL 단계에서 SQS 대기열로 전송되었는지 확인합니다. 메시지가 전송된 경우 Lambda 함수는 ETL 프로세스의 Step Functions에서 두 번째 함수를 시작합니다.

  5. 그런 다음 배치 파일에 대규모 변환이 적용됩니다. 이러한 대규모 변환은 AWS Glue 작업에 대한 동기 호출, AWS Fargate 작업, Amazon EMR 단계 또는 Amazon 노트북과 같이 컴퓨팅 비용이 많이 드는 작업입니다. SageMaker 테이블 메타데이터는 AWS Glue 카탈로그를 업데이트하는 AWS Glue 크롤러를 사용하여 출력 파일에서 추출됩니다. 파일 메타데이터는 DynamoDB의 종합 카탈로그 테이블에도 추가됩니다. 마지막으로 Deequ를 활용하는 데이터 품질 단계도 실행됩니다.

기술 스택

  • 아마존 CloudWatch 이벤트

  • AWS CloudFormation

  • AWS CodePipeline

  • AWS CodeBuild

  • AWS CodeCommit

  • Amazon DynamoDB

  • Glue

  • Lambda

  • Amazon S3

  • Amazon SQS

  • Step Functions

도구

  • Amazon CloudWatch CloudWatch Events — Events는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다.

  • AWS CloudFormation — 예측 가능하고 반복적으로 AWS 인프라 배포를 생성하고 프로비저닝할 수 있도록 CloudFormation 지원합니다.

  • AWS CodeBuild — 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포 준비가 완료된 아티팩트를 생성하는 완전관리형 빌드 CodeBuild 서비스입니다.

  • AWS CodeCommit — CodeCommit AWS에서 호스팅하는 버전 제어 서비스로, 자산 (예: 소스 코드 및 바이너리 파일) 을 비공개로 저장하고 관리하는 데 사용할 수 있습니다.

  • AWS CodePipeline — 소프트웨어 변경 사항을 지속적으로 릴리스하는 데 필요한 단계를 모델링, 시각화 및 자동화하는 데 사용할 수 있는 지속적 전송 CodePipeline 서비스입니다.

  • Amazon DynamoDB - DynamoDB는 완전 관리형 NoSQL 데이터베이스 서비스로, 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다. 

  • Glue - Glue는 고객이 분석할 데이터를 쉽게 준비하고 로드할 수 있는 완전관리형 ETL 서비스입니다.

  • Lambda - Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있습니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 

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

  • Step Functions — Step Functions는 Lambda 함수 및 여러 AWS 서비스를 비즈니스 크리티컬 애플리케이션으로 쉽게 시퀀싱할 수 있게 해주는 서버리스 함수 오케스트레이터입니다.

  • Amazon SQS – Amazon Simple Queue Service(Amazon SQS)는 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 분리하고 확장하는 메시지 대기열 서비스입니다.

  • Deequ — Deequ는 대규모 데이터 세트에 대한 데이터 품질 지표를 계산하고, 데이터 품질 제약 조건을 정의 및 확인하며, 데이터 배포의 변경 사항을 지속적으로 파악할 수 있도록 지원하는 도구입니다.

코드 리포지토리

SDLF의 소스 코드와 리소스는 AWS Labs GitHub 리포지토리에서 제공됩니다.

에픽

작업설명필요한 기술

CI/CD 파이프라인을 설정하여 데이터 레이크의 IaC를 관리합니다.

AWS Management Console에 로그인하고 SDLF 워크숍의 초기 설정 섹션에 나와 있는 절차를 따릅니다. 그러면 데이터 레이크에 IaC를 프로비저닝하고 관리하는 CodeCommit 리포지토리, CodeBuild 환경, CodePipeline 파이프라인과 같은 초기 CI/CD 리소스가 생성됩니다.

DevOps 엔지니어
작업설명필요한 기술

로컬 시스템의 CodeCommit 리포지토리를 복제합니다.

SDLF 워크숍의 기반 배포 섹션에 나와 있는 절차를 따릅니다. 이렇게 하면 IaC를 호스팅하는 Git 리포지토리를 로컬 환경에 복제할 수 있습니다. 

자세한 내용은 설명서에서 CodeCommit 리포지토리에 연결을 참조하십시오. CodeCommit

DevOps 엔지니어

CloudFormation 템플릿 수정.

로컬 워크스테이션과 코드 편집기를 사용하여 사용 사례 또는 요구 사항에 따라 CloudFormation 템플릿을 수정하십시오. 로컬로 복제된 Git 리포지토리에 커밋합니다. 

자세한 내용은 AWS CloudFormation 설명서의 AWS CloudFormation 템플릿 사용을 참조하십시오.

DevOps 엔지니어

변경 내용을 CodeCommit 저장소에 푸시합니다.

이제 인프라 코드가 버전 제어 하에 있으며 코드 베이스의 수정이 추적됩니다. 변경 내용을 CodeCommit 리포지토리에 푸시하면 인프라에 CodePipeline 자동으로 적용되어 전달됩니다 CodeBuild. 

중요: 에서 CodeBuild AWS SAM CLI를 사용하는 경우 sam packagesam deploy 명령을 실행하십시오. CLI를 사용하는 경우 aws cloudformation packageaws cloudformation deploy 명령을 실행합니다.

DevOps 엔지니어

관련 리소스

CI/CD 파이프라인을 설정하여 IaC를 프로비저닝

IaC 버전 제어 

기타 리소스