Amazon Web Services 한국 블로그

Amazon Data Firehose, Apache Iceberg 테이블로 DB 변경 사항 복제 기능 제공 (미리보기)

오늘은 PostgreSQL, MySQL과 같은 데이터베이스의 변경 사항을 캡처하고 Amazon Simple Storage Service(Amazon S3) 기반 Apache Iceberg 테이블에 업데이트를 복제하는 Amazon Data Firehose의 새로운 기능이 미리보기로 출시되었습니다.

Apache Iceberg는 빅 데이터 분석을 수행하기 위한 고성능 오픈 소스 테이블 형식입니다. Apache Iceberg는 SQL 테이블의 신뢰성 및 단순성을 S3 데이터 레이크에 제공하고 Apache Spark, Apache Flink, Trino, Apache Hive, Apache Impala와 같은 오픈 소스 분석 엔진이 동일한 데이터를 동시에 사용할 수 있도록 합니다.

이 새로운 기능은 데이터베이스 애플리케이션의 트랜잭션 성능에 영향을 주지 않으면서 데이터베이스 업데이트를 스트리밍할 수 있는 단순한 엔드 투 엔드 솔루션을 제공합니다. Data Firehose 스트림이 데이터베이스의 변경 데이터 캡처(CDC) 업데이트를 전송하도록 몇 분 만에 설정할 수 있습니다. 이제 다양한 데이터베이스의 데이터를 Amazon S3 기반 Iceberg 테이블로 간편하게 복제하고 대규모 분석 및 기계 학습(ML) 애플리케이션에 최신 데이터를 사용할 수 있습니다.

일반적인 Amazon Web Services(AWS) 엔터프라이즈 고객은 트랜잭션 애플리케이션을 위해 수백 개의 데이터베이스를 사용합니다. 최신 데이터에 대해 대규모 분석 및 ML을 수행하기 위해 예를 들어 테이블의 레코드가 삽입, 수정 또는 삭제되는 시점에 데이터베이스의 변경 사항을 캡처하고 업데이트를 Apache Iceberg와 같은 오픈 소스 테이블 형식으로 해당 데이터 웨어하우스 또는 Amazon S3 데이터 레이크에 전달하기를 원합니다.

이를 위해 많은 고객이 데이터베이스에서 정기적으로 읽기 위한 추출, 전환, 적재(ETL) 작업을 개발합니다. 그러나 ETL 리더는 데이터베이스 트랜잭션 성능에 영향을 미치므로 배치 작업은 데이터를 분석에 사용할 수 있을 때까지 몇 시간 지연될 수 있습니다. 데이터베이스 트랜잭션 성능에 미치는 영향을 줄이기 위해 고객은 데이터베이스의 변경 사항을 스트리밍할 수 있는 기능을 원합니다. 이 스트림을 변경 데이터 캡처(CDC) 스트림이라고 합니다.

저는 Debezium과 같은 오픈 소스 분산 시스템을 인기 있는 데이터베이스에 대한 커넥터, Apache Kafka Connect 클러스터, Kafka Connect Sink와 함께 사용하여 이벤트를 읽고 대상으로 전달하는 여러 고객을 만나보았습니다. 이러한 시스템의 초기 구성 및 테스트에는 여러 오픈 소스 구성 요소의 설치 및 구성이 포함됩니다. 이러한 작업은 며칠 또는 몇 주가 걸릴 수 있습니다. 설정 후 엔지니어는 클러스터를 모니터링 및 관리하고 오픈 소스 업데이트를 검증 및 적용해야 하므로 운영 오버헤드가 가중됩니다.

Amazon Data Firehose는 이 새로운 데이터 스트리밍 기능을 통해 데이터베이스의 CDC 스트림을 수집하여 Amazon S3의 Apache Iceberg 테이블로 지속적으로 복제하는 기능을 추가합니다. 소스와 대상을 지정하여 Data Firehose 스트림을 설정합니다. Data Firehose는 초기 데이터 스냅샷을 캡처한 후 선택한 데이터베이스 테이블에 대한 모든 후속 변경 사항을 데이터 스트림으로 캡처하고 지속적으로 복제합니다. CDC 스트림을 수집할 때 데이터베이스 트랜잭션 성능에 미치는 영향을 줄이기 위해 Data Firehose는 데이터베이스 복제 로그를 사용합니다. 데이터베이스 업데이트 볼륨이 증가 또는 감소하면 Data Firehose는 자동으로 데이터를 분할하고 대상으로 전송될 때까지 레코드를 유지합니다. 사용자는 용량을 프로비저닝하거나 클러스터를 관리하고 미세 조정할 필요가 없습니다. 데이터 자체 외에도 Data Firehose는 초기 Data Firehose 스트림 생성의 일부로 데이터베이스 테이블과 동일한 스키마를 사용하여 Apache Iceberg 테이블을 자동으로 생성하고 소스 스키마 변경에 따라 대상 스키마를 자동으로 발전시킬 수 있습니다(예: 새 열 추가).

Data Firehose는 완전관리형 서비스이므로 오픈 소스 구성 요소에 의존하거나 소프트웨어 업데이트를 적용할 필요가 없고 운영 오버헤드가 발생하지 않습니다.

Amazon Data Firehose를 사용하여 Amazon S3 기반 Apache Iceberg 테이블에 데이터베이스 변경 사항을 지속적으로 복제하면 대규모 분석 및 ML 애플리케이션을 실행할 수 있는 데이터 레이크 또는 데이터 웨어하우스로 CDC 스트림을 전송하기 위한 단순하고 확장 가능한 엔드 투 엔드 관리형 솔루션이 제공됩니다.

새 파이프라인을 구성하는 방법 살펴보기
새 CDC 파이프라인을 만드는 방법을 보여드리기 위해 AWS Management Console을 사용하여 Data Firehose 스트림을 설정했습니다. 평소와 같이 AWS Command Line Interface(AWS CLI), AWS SDK, AWS CloudFormation 또는 Terraform을 사용할 수도 있습니다.

이 데모에서는 Amazon Relational Database Service(Amazon RDS) 기반의 MySQL 데이터베이스를 소스로 선택했습니다. Data Firehose는 Amazon Elastic Compute Cloud(Amazon EC2)의 자체 관리형 데이터베이스에서도 작동합니다. 데이터베이스가 배포되는 가상 프라이빗 클라우드(VPC)와 RDS API 간에 트래픽이 인터넷에 노출되지 않는 연결을 설정하기 위해 AWS PrivateLink VPC 서비스 엔드포인트를 생성합니다. Amazon RDS 설명서의 지침에 따라 RDS API용 VPC 서비스 엔드포인트를 생성하는 방법을 배울 수 있습니다.

또한 저는 Iceberg 테이블을 호스팅할 S3 버킷이 있고 올바른 권한으로 설정된 AWS Identity and Access Management (IAM) 역할이 있습니다. Data Firehose 설명서에서 사전 요구 사항 목록을 참조할 수 있습니다.

시작하기 위해 콘솔을 열고 Amazon Data Firehose 섹션으로 이동합니다. 스트림이 이미 생성된 것을 볼 수 있습니다. 새 스트림을 생성하기 위해 Create Firehose stream을 선택합니다.

Firehose 스트림 생성

SourceDestination을 선택합니다. 이 예에서는 MySQL database와 Apache Iceberg Tables입니다. 스트림의 Firehose stream name도 입력합니다.

Firehose 스트림 생성 - 화면 1

Database endpoint의 정규화된 DNS 이름과 Database VPC endpoint service name을 입력합니다. Enable SSL가 선택되어 있는지 확인하고 Secret name 아래에서 데이터베이스 사용자 이름 및 암호가 안전하게 저장되어 있는 AWS Secrets Manager 비밀의 이름을 선택합니다.

Firehose 스트림 생성 - 화면 2

다음으로 명시적 이름 또는 정규식으로 데이터베이스, 테이블 및 열을 지정하여 특정 데이터를 캡처하도록 Data Firehose를 구성합니다.

워터마크 테이블을 생성해야 합니다. 이 맥락에서 워터마크는 Data Firehose가 데이터베이스 테이블의 증분 스냅샷의 진행 상황을 추적하는 데 사용하는 마커입니다. 이를 통해 Data Firehose는 테이블에서 이미 캡처된 부분과 아직 처리해야 할 부분을 식별할 수 있습니다. 워터마크 테이블을 수동으로 생성할 수도 있고 Data Firehose에서 자동으로 생성하도록 할 수도 있습니다. 자동으로 생성하는 경우 Data Firehose에 전달된 데이터베이스 자격 증명은 소스 데이터베이스에서 테이블을 생성할 수 있는 권한이 있어야 합니다.

Firehose 스트림 생성 - 화면 3

다음으로, 사용할 S3 버킷 리전 및 이름을 구성합니다. Data Firehose는 아직 존재하지 않는 Iceberg 테이블을 자동으로 생성할 수 있습니다. 마찬가지로 데이터베이스 스키마의 변경을 감지하면 Iceberg 테이블 스키마를 업데이트할 수 있습니다.

Firehose 스트림 생성 - 화면 4

마지막 단계로, Amazon CloudWatch 오류 로깅을 활성화하여 스트림 진행 상황 및 최종 오류에 대한 피드백을 받는 것이 중요합니다. CloudWatch 로그 그룹에 짧은 보존 기간을 구성하여 로그 스토리지 비용을 줄일 수 있습니다.

구성을 검토한 후 Create Firehose stream을 선택합니다.

Firehose 스트림 생성 - 화면 5

스트림이 생성되면 데이터 복제가 시작됩니다. 스트림의 상태를 모니터링하고 최종 오류가 있는지 확인할 수 있습니다.

Firehose 스트림 생성 - 화면 6

이제 스트림을 테스트할 차례입니다.

데이터베이스 연결을 열고 테이블에 새 줄을 삽입합니다.

Firehose - MySQL

그런 다음 대상으로 구성된 S3 버킷으로 이동하여 테이블의 데이터를 저장할 파일이 생성된 것을 확인했습니다.

S3 버킷에서 parquet 파일 보기

파일을 다운로드하고 parq 명령으로 내용을 검사합니다(pip install parquet-cli를 사용하여 해당 명령을 설치할 수 있음).

Parquet 파일 내용

물론 Parquet 파일을 다운로드 및 검사하는 단계는 데모를 위해서만 하는 것입니다. 실제에서는 AWS GlueAmazon Athena를 사용하여 데이터 카탈로그를 관리하고 데이터에 대한 SQL 쿼리를 실행할 것입니다.

알아야 할 사항
다음은 몇 가지 알아야 할 추가 정보입니다.

이 새로운 기능은 Amazon EC2 기반의 셀프 매니지드 PostgreSQL 및 MySQL 데이터베이스와 Amazon RDS 기반의 다음 데이터베이스를 지원합니다.

팀은 평가판 기간과 정식 출시 이후에도 계속해서 추가 데이터베이스에 대한 지원을 추가할 예정입니다. 이미 SQL Server, Oracle 및 MongoDB 데이터베이스를 지원하기 위해 작업 중입니다.

Data Firehose는 AWS PrivateLink를 사용하여 Amazon Virtual Private Cloud(Amazon VPC)의 데이터베이스에 연결합니다.

Amazon Data Firehose 전송 스트림을 설정할 때 특정 테이블 및 열을 지정하거나 와일드카드를 사용하여 테이블 및 열의 클래스를 지정할 수 있습니다. 와일드카드를 사용하면 Data Firehose 스트림이 생성된 후 데이터베이스에 새 테이블 및 열이 추가되고 와일드카드와 일치하면 Data Firehose가 대상에 해당 테이블 및 열을 자동으로 생성합니다.

요금 및 가용성
이 새로운 데이터 스트리밍 기능은 현재 중국 리전, AWS GovCloud(미국) 리전 및 아시아 태평양(말레이시아) 리전을 제외한 모든 AWS 리전에서 사용할 수 있습니다. 이 새로운 기능을 평가하고 피드백을 제공해 주시기 바랍니다. 평가판 시작 시 요금은 부과되지 않습니다. 향후에는 실제 사용량(예: 읽은 바이트 및 전송한 바이트 수)을 기준으로 요금이 부과될 예정입니다. 약정 또는 선행 투자는 없습니다. 자세한 내용은 요금 페이지를 참조하세요.

이제 Amazon S3 기반 Apache Iceberg 테이블로의 첫 번째 연속 데이터베이스 복제를 구성하고 http://aws.amazon.com/firehose를 방문하세요.

— seb