제퍼넷 로고

AWS SDK 통합과 함께 Amazon Redshift Data API 및 AWS Step Functions를 사용하는 ETL 오케스트레이션

시간

ETL(추출, 변환 및 로드) 서버리스 오케스트레이션 아키텍처 애플리케이션은 많은 고객에게 인기를 얻고 있습니다. 이러한 애플리케이션은 더 큰 확장성과 단순성을 제공하여 ETL 파이프라인을 더 쉽게 유지 관리하고 단순화할 수 있습니다. 이 아키텍처의 주요 이점은 다음을 사용하여 기존 ETL 파이프라인을 단순화한다는 것입니다. AWS 단계 함수 그리고 직접 전화 아마존 레드시프트 데이터 API 상태 머신에서. 결과적으로 ETL 파이프라인의 복잡성이 줄어듭니다.

데이터 엔지니어 또는 애플리케이션 개발자는 다음과 상호 작용할 수 있습니다. 아마존 레드 시프트 지속적인 연결을 관리할 필요 없이 간단한 API 끝점으로 데이터를 로드하거나 쿼리합니다. Amazon Redshift Data API를 사용하면 JDBC 또는 ODBC 연결을 구성하지 않고도 Amazon Redshift와 상호 작용할 수 있습니다. 이 기능을 사용하면 서버리스 데이터 처리 워크플로를 오케스트레이션하고, 이벤트 기반 웹 애플리케이션을 설계하고, ETL 파이프라인을 비동기식으로 실행하여 Amazon Redshift에서 데이터를 수집 및 처리할 수 있으며, Step Functions를 사용하여 전체 ETL 또는 ELT 워크플로를 오케스트레이션할 수 있습니다.

이 게시물에서는 Step Functions 및 Amazon Redshift Data API를 사용하여 ETL 또는 ELT 워크플로의 여러 단계를 조정하고 데이터를 Amazon Redshift 데이터 웨어하우스로 처리하는 방법을 설명합니다.

AWS 람다 유연하고 확장 가능한 컴퓨팅 이점으로 인해 일반적으로 Step Functions와 함께 사용됩니다. ETL 워크플로에는 여러 단계가 있으며 복잡성은 각 단계 내에서 다를 수 있습니다. 그러나 다음과 같은 대체 접근 방식이 있습니다. AWS SDK 서비스 통합, Step Functions의 기능입니다. 이러한 통합을 통해 상태 시스템에서 직접 200개가 넘는 AWS 서비스의 API 작업을 호출할 수 있습니다. 이 접근 방식은 더 이상 함수 코드를 유지 관리하고 테스트할 필요가 없기 때문에 Lambda를 사용하는 것에 비해 상대적으로 복잡성이 낮은 단계에 가장 적합합니다. Lambda 함수의 최대 제한 시간은 15분입니다. 더 오래 실행되는 프로세스를 기다려야 하는 경우 Step Functions 표준 워크플로는 최대 1년의 런타임을 허용합니다.

Lambda를 사용하지 않고 단일 프로세스를 포함하는 단계를 Step Functions와 AWS SDK 서비스 통합 간의 직접 통합으로 교체할 수 있습니다. 예를 들어 단계가 Amazon Redshift에서 SQL 문을 실행하는 Lambda 함수를 호출하는 데만 사용되는 경우 Amazon Redshift Data API의 SDK API 작업에 직접 통합하여 Lambda 함수를 제거할 수 있습니다. 여러 작업이 있는 Lambda 함수를 여러 단계로 분리할 수도 있습니다. 이 구현은 이 게시물의 뒷부분에서 사용할 수 있습니다.

GitHub 리포지토리에서 예제 사용 사례를 만들었습니다. Amazon Redshift Data API 및 AWS Step Functions를 사용한 ETL 오케스트레이션 제공하는 AWS 클라우드 포메이션 설정, SQL 스크립트 및 상태 시스템 정의를 위한 템플릿입니다. 상태 머신은 귀하의 계정에 저장된 SQL 스크립트를 직접 읽습니다. 아마존 단순 스토리지 서비스 (Amazon S3) 버킷은 Amazon Redshift 클러스터에서 실행하고 ETL 워크플로를 수행합니다. 이 사용 사례에서는 Lambda를 사용하지 않습니다.

솔루션 개요

이 시나리오에서는 기존 ETL 파이프라인 Lambda를 사용하여 Data API를 호출합니다. AWS SDK 서비스와 Step Functions의 통합을 통해 상태 머신에서 데이터 API를 직접 호출할 수 있으므로 ETL 파이프라인 실행의 복잡성이 줄어듭니다.

전체 워크플로는 다음 단계를 수행합니다.

  1. 필요한 데이터베이스 개체를 설정하고 처리할 샘플 데이터 집합을 생성합니다.
  2. SCD1 및 SCD2 차원 로드를 각각 수행하는 두 개의 차원 작업을 실행합니다.
  3. 두 작업이 모두 성공적으로 실행되면 팩트 테이블에 대한 로드 작업이 실행됩니다.
  4. 상태 시스템은 판매 데이터가 성공적으로 로드되었는지 확인하기 위해 유효성 검사를 수행합니다.

다음 아키텍처 다이어그램은 종단 간 솔루션을 강조 표시합니다.

우리는 Step Functions 콘솔을 통해 상태 머신을 실행하지만 다음과 같은 여러 가지 방법으로 이 솔루션을 실행할 수 있습니다.

제공된 솔루션을 사용하여 솔루션을 배포할 수 있습니다. CloudFormation 템플릿, 다음 리소스를 생성합니다.

  • Amazon Redshift 클러스터의 데이터베이스 객체:
    • 네 가지 저장 프로시저:
      • sp_setup_sales_data_pipeline() – 테이블을 생성하고 샘플 데이터로 채웁니다.
      • sp_load_dim_customer_address() – 다음에서 SCD1 프로세스를 실행합니다. customer_address 기록
      • sp_load_dim_item() – 다음에서 SCD2 프로세스를 실행합니다. item 기록
      • sp_load_fact_sales(p_run_date 날짜) – 지정된 날짜의 모든 매장에서 판매 처리
    • Amazon Redshift 테이블 XNUMX개:
      • customer
      • customer_address
      • date_dim
      • item
      • store_sales
  • 최대 XNUMXW 출력을 제공하는 AWS 자격 증명 및 액세스 관리 (나는) 역할 StateMachineExecutionRole Step Functions에서 다음 권한을 허용하려면:
    • 다음을 통해 Amazon Redshift 클러스터에 페더레이션 getClusterCredentials 암호 자격 증명을 피하는 권한
    • 데이터 API 호출을 통해 Amazon Redshift 클러스터에서 쿼리 실행
    • Amazon S3에서 객체 나열 및 검색
  • Step Functions 상태 머신 RedshiftETLStepFunction, 샘플 판매 데이터 파이프라인의 ETL 워크플로를 실행하는 데 사용되는 단계가 포함되어 있습니다.

사전 조건

솔루션 배포를 위한 전제 조건으로 Amazon Redshift 클러스터를 설정하고 IAM 역할과 연결해야 합니다. 자세한 내용은 Amazo 승인
n 귀하를 대신하여 다른 AWS 서비스에 액세스하기 위한 Redshift
. AWS 계정에 클러스터가 프로비저닝되지 않은 경우 다음을 참조하십시오. Amazon Redshift 시작하기 설정하는 방법에 대한 설명입니다.

Amazon Redshift 클러스터를 사용할 수 있으면 다음 단계를 수행하십시오.

  1. 다운로드하여 저장하십시오. CloudFormation 템플릿 컴퓨터의 로컬 폴더에
  2. 다음 SQL 스크립트를 다운로드하여 컴퓨터의 로컬 폴더에 저장합니다.
    1. sp_statements.sql – DDL 및 DML 작업을 포함한 저장 프로시저를 포함합니다.
    2. verify_sql_statement.sql – 실행할 수 있는 두 가지 유효성 검사 쿼리가 포함되어 있습니다.
  3. SQL 스크립트를 S3 버킷에 업로드합니다. 버킷 이름은 문서에 지정된 지정된 S3 버킷입니다. ETLScriptS3Path 입력 매개변수.
  4. AWS CloudFormation 콘솔에서 새 리소스로 스택 생성 그리고 이전 단계에서 다운로드한 템플릿 파일을 업로드합니다(etl-orchestration-with-stepfunctions-and-redshift-data-api.yaml).
  5. 필수 매개변수를 입력하고 선택하십시오. 다음 보기.
  6. 왼쪽 메뉴에서 다음 보기 당신이 얻을 때까지 검토 페이지를 클릭하고 승인 확인란을 선택합니다.
  7. 왼쪽 메뉴에서 스택 생성.
  8. 스택이 성공적으로 배포될 때까지 기다립니다.

스택이 완료되면 다음 스크린샷과 같이 출력을 볼 수 있습니다.

ETL 오케스트레이션 실행

CloudFormation 템플릿을 배포한 후 스택 세부 정보 페이지로 이동합니다. 에 자료 탭에서 링크를 선택하십시오. RedshiftETLStepFunction Step Functions 콘솔로 리디렉션됩니다.

최대 XNUMXW 출력을 제공하는 RedshiftETLStepFunction 상태 머신은 다음 워크플로에 설명된 대로 자동으로 실행됩니다.

  1. read_sp_statement 및 run_sp_deploy_redshift – 다음 작업을 수행합니다.
    1. 검색 sp_statements.sql Amazon S3에서 저장 프로시저를 가져옵니다.
    2. 저장 프로시저를 batch-execute-statement Amazon Redshift 클러스터에서 실행할 API.
    3. 상태 머신에 SQL 문의 식별자를 다시 보냅니다.
  2. wait_on_sp_deploy_redshift – 최소 5초 동안 기다립니다.
  3. run_sp_deploy_redshift_status_check – 데이터 API를 호출합니다. describeStatement API 호출의 상태를 가져옵니다.
  4. is_run_sp_deploy_complete – 상태에 따라 ETL 워크플로의 다음 단계를 라우팅합니다.
    1. 끝마친 – 저장 프로시저는 Amazon Redshift 클러스터에서 생성됩니다.
    2. 실패 – 다음으로 이동 sales_data_pipeline_failure 단계 및 실패 ETL 워크플로.
    3. 기타 모든 상태 – 로 돌아가기 wait_on_sp_deploy_redshift SQL 문이 완료될 때까지 기다리는 단계입니다.
  5. setup_sales_data_pipeline – 다음 단계를 수행합니다.
    1. 시작합니다 setup Amazon Redshift 클러스터에서 이전에 생성된 저장 프로시저.
    2. 상태 머신에 SQL 문의 식별자를 다시 보냅니다.
  6. wait_on_setup_sales_data_pipeline – 최소 5초 동안 기다립니다.
  7. setup_sales_data_pipeline_status_check – 데이터 API를 호출합니다. describeStatement API 호출의 상태를 가져옵니다.
  8. is_setup_sales_data_pipeline_complete – 상태에 따라 ETL 워크플로의 다음 단계를 라우팅합니다.
    1. 끝마친 – 두 개의 차원 테이블 생성(customer_addressitem) 및 하나의 팩트 테이블(판매).
    2. 실패 – 다음으로 이동 sales_data_pipeline_failure 단계 및 실패 ETL 워크플로.
    3. 기타 모든 상태 – 로 돌아가기 wait_on_setup_sales_data_pipeline SQL 문이 완료될 때까지 기다리는 단계입니다.
  9. run_sales_data_pipeline - LoadItemTableLoadCustomerAddressTable Step Functions가 동시에 실행하는 두 개의 병렬 워크플로입니다. 워크플로는 이전에 만든 저장 프로시저를 실행합니다. 저장 프로시저는 데이터를 itemcustomer_address 테이블. 병렬 세션의 다른 모든 단계는 앞에서 설명한 것과 동일한 개념을 따릅니다. 두 병렬 워크플로가 모두 완료되면 run_load_fact_sales 실행됩니다.
  10. run_load_fact_sales – 에 데이터를 삽입합니다. store_sales 초기 저장 프로시저에서 생성된 테이블입니다.
  11. 검증 – 모든 ETL 단계가 완료되면 상태 머신이 Amazon S3(validate_sql_statement.sql) 다음을 사용하여 두 개의 SQL 문을 실행합니다. batch_execute_statement 방법.

ETL 워크플로의 구현은 멱등적입니다. 실패하면 정리 없이 작업을 다시 시도할 수 있습니다. 예를 들어, stg_store_sales 매번 테이블을 삭제한 다음 대상 테이블을 삭제합니다. store_sales 매번 특정 새로 고침 날짜에 대한 데이터와 함께.

다음 다이어그램은 상태 시스템 워크플로를 보여줍니다.

이 예에서는 작업 상태 리소스를 사용합니다. arn:aws:states:::aws-sdk:redshiftdata:[apiAction] 해당 데이터 API 작업을 호출합니다. 다음 표는 요약 데이터 API 작업 및 해당 AWS SDK 통합 API 작업.

AWS SDK 통합을 사용하려면 서비스 이름과 API 호출을 지정하고 선택적으로 서비스 통합 패턴. AWS SDK 작업은 항상 낙타 대소문자이고 파라미터 이름은 Pascal 대소문자입니다. 예를 들어 Step Functions 작업을 사용할 수 있습니다. batchExecuteStatement 데이터 API에서 단일 트랜잭션의 일부로 일괄적으로 여러 SQL 문을 실행합니다. SQL 문은 SELECT, DML, DDL, COPY 및 UNLOAD일 수 있습니다.

ETL 오케스트레이션 검증

전체 ETL 워크플로를 실행하는 데 약 1분이 걸립니다. 다음 스크린샷은 ETL 워크플로가 성공적으로 완료되었음을 보여줍니다.

전체 판매 데이터 파이프라인이 완료되면 다음 스크린샷과 같이 전체 실행 이벤트 기록을 살펴볼 수 있습니다.

ETL 오케스트레이션 예약

판매 데이터 파이프라인을 검증한 후 데이터 파이프라인을 매일 일정에 따라 실행하도록 선택할 수 있습니다. 당신은 이것을 할 수 있습니다 아마존 이벤트 브리지.

  1. EventBridge 콘솔에서 RedshiftETLStepFunction 매일 상태 머신.
  2. 를 호출하려면 RedshiftETLStepFunction 일정에 따라 상태 머신, 선택 스케쥴 판매 데이터 파이프라인을 실행하는 데 필요한 적절한 빈도를 정의합니다.
  3. 대상 상태 머신을 다음과 같이 지정합니다. RedshiftETLStepFunction 선택하고 만들기.

규칙 세부정보 페이지에서 일정을 확인할 수 있습니다.

정리

AWS 계정에 불필요한 비용이 들지 않도록 CloudFormation 템플릿에서 생성한 리소스를 정리하십시오. AWS CloudFormation 콘솔에서 스택을 선택하고 다음을 선택하여 CloudFormation 스택을 삭제할 수 있습니다. .. 이 작업은 프로비저닝한 모든 리소스를 삭제합니다. 템플릿 제공 리소스를 수동으로 업데이트한 경우 정리하는 동안 몇 가지 문제가 발생할 수 있습니다. 이것들을 독립적으로 정리해야 합니다.

제한 사항

Data API 및 Step Functions AWS SDK 통합은 최소한의 개발자 오버헤드 내에서 고도로 분산된 ETL 애플리케이션을 구축할 수 있는 강력한 메커니즘을 제공합니다. Data API 및 Step Functions를 사용할 때 다음 제한 사항을 고려하십시오.

결론

이 게시물에서는 AWS SDK 통합과 함께 Amazon Redshift Data API 및 Step Functions를 사용하여 ETL 오케스트레이션을 구축하는 방법을 시연했습니다.

데이터 API에 대해 자세히 알아보려면 다음을 참조하세요. Amazon Redshift Data API를 사용하여 Amazon Redshift 클러스터와 상호 작용Amazon Redshift 데이터 API 사용.


저자에 관하여

제이슨 페드레자 13년 이상의 데이터 웨어하우징 경험을 보유한 AWS의 분석 전문가 솔루션 설계자입니다. AWS에 합류하기 전에는 Amazon.com에서 데이터 웨어하우스 솔루션을 구축했습니다. 그는 Amazon Redshift를 전문으로 하며 고객이 확장 가능한 분석 솔루션을 구축하도록 지원합니다.

비핀 판디 AWS의 데이터 아키텍트입니다. 그는 고객을 위한 데이터 레이크 및 분석 플랫폼 구축을 좋아합니다. 그는 클라우드 솔루션을 사용하여 고객 문제를 자동화하고 단순화하는 데 열정적입니다.

데이비드 장 고객이 여러 산업 분야에서 강력하고 확장 가능한 데이터 기반 솔루션을 설계하도록 돕는 AWS 솔루션 아키텍트입니다. 소프트웨어 개발 경력이 있는 David는 AWS 오픈 소스 ini의 적극적인 리더이자 기여자입니다.
티아티브. 그는 실제 비즈니스 문제를 해결하는 데 열정적이며 고객의 관점에서 일하기 위해 지속적으로 노력합니다. 언제든지 그와 연결하세요. 링크드인.

spot_img

최신 인텔리전스

spot_img