ELT 파이프라인(dbt)을 Step Function 및 ECS로 만들어 보십시오.

4163 단어 AWSdbttech

나는 데이터 파이프라인을 서버에 제어하고 싶다


ELT 및 dbt 정보


데이터 활용 디스크의 역할 중 하나는 데이터를 수집하여 데이터 슈퍼마켓에 가공하는 것이다.이전에는 저장장치 가격이 높아 협력 단계에서 가공하면 저장 원가를 억제할 수 있는 ETL이 주류였으나 최근 몇 년 사이 아키텍처 진화에 따라 연합할 때 가공이 거의 없어 협업해 가공하는 ELT가 주목받았다.
이런 데이터 공학의 세계관이 커지는 가운데 ELT를 맡은 OSS dbt(data build tool)에 주목한다.
https://dev.classmethod.jp/articles/dbt-tutorial/

ELT이므로 서버 비활성화의 의미가 있음


ELT는 SQL에 데이터 변환을 구현하는 파이프라인이 장점이어서 스노우플랙과 같은 클라우드 DWH 출력(또 다른 Extract/Load가 간단해지는 등 다양한 장점도 있다)을 사용할 수 있다.
즉, ELT의 데이터 파이프라인은 작은 컴퓨팅 리소스로 구성될 수 있습니다.
한 걸음 더 나아가면 ELT 라인의 컴퓨터 자원에서 컨테이너를 활용하면 현대의 서버 구조가 될 수 있다.
구체적으로 dbt를 컨테이너화하고 ECS Fargate로 이동하고 Step Function으로 워크플로우를 관리하면 Serbules로 ELT 데이터 파이프라인을 충분히 구축할 수 있다.
(응, 원래dbt cloud를 쓰면 안 돼? 난 당분간 그렇게 생각하지 않아)
손을 묶을 수 있도록 책을 같이 만들자고 앞으로 체계적으로 정리하고 싶다.이번에는 그 구상을 노트로 남겨 두었다.

구성도


구성도는 이런 느낌.
Docker의 컨테이너를 구축하고 ECR로 밀어붙이는 동시에dbt점으로서의문서put를S3에,Cloudfront+Lambda@Edge를 참고하십시오.

CI/CD 환경


공통 관계의dbt 항목, Docker file 및buildspecyml 설정을 CodeCommiit에서 관리합니다.
  • dbt 프로젝트
  • Dockerfile
  • buildspec.yml
  • dbt 프로젝트 개발


    dbt 프로젝트는dbt의 모델과 설정 파일을 설정합니다.기본적으로 개발 환경에서 다음과 같이 개발된 이미지입니다.
  • git clone 클론 창고 통과
  • dbt init로 프로젝트 생성
  • profiles.프로젝트 경로에 yml 설정
  • ECS에서 실행될 때 SSM Parameter Store(Secret Manager도 OK)에서 인증 정보를 받는 등 사전 처리 및 하우징 스크립트를 설정하는 데 사용되는 폴더 및 스크립트
  • push-CodeCommiit
  • Docker file 정보


    Docker file에서 지정한 기본 이미지를 안정적으로 만들기 위해dbt가 설치된 이미지를 미리 준비하십시오.
    공동으로 관리하는dbt 프로젝트를 최신 용기에 복사합니다.

    buildspec.yml 정보


    나는 구축 과정에서 두 가지 일을 하고 싶다.
  • Docker 컨테이너 구축 및 PUSH-ECR
  • 최신dbt 프로젝트를 문서화하고 S3에서 PUT(단, CodeBuild에서 진행하면 VPC 등을 사용하는 데 어려움이 있기 때문에 Step Function을 통해 dbt 용기를 ECS로 호출하는 작업)
  • 저는 샘플을 바탕으로 이런 인상을 주고 싶어요.
    https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-docker.html
    version: 0.2
    
    phases:
      pre_build:
        commands:
          - echo Logging in to Amazon ECR...
          - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
      build:
        commands:
          - echo Build started on `date`
          - echo Building the Docker image...          
          - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
          - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG      
      post_build:
        commands:
          - echo Build completed on `date`
          - echo Pushing the Docker image...
          - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
          - echo generating dbt document started on `date`
          - aws start-execution --state-machine-arn <value>
    
    CodePipeline 파이핑을 통해 파이프링됩니다.

    ECS 및 Step Function


    ECS는 Terraform과 함께 코드 관리를 구상했다.
    솔직히 Step Function은 어려운 부분인데, GUI 기반으로 개발된 Stop Function Workflow Studio의 기능이 충실하고 기능 추가도 활발하기 때문에 이걸 이용하는 게 좋을 것 같다(반대로 사용하지 않으면 아쉽다).
    https://dev.classmethod.jp/articles/stepfunctions-workflow-designer/

    문서를 맡기다


    S3의 웹사이트 레지스터링 기능에서 사용할 수 있지만 데이터 카탈로그는 일반에 공개되지 않기 때문에 인증을 해야 한다.이전에 정리했던 클라우드 프론트 +Lambda@Edge조합 + 코그니토 방법을 사용하고 싶습니다.
    https://jimatomo.hatenablog.com/entry/2021/08/01/012757

    기타


    파라메터 스토어 설정도 테라폼을 활용하려고 한다.
    RDS PostgreSQL을 다른 베이스 개체 데이터베이스로 사용하고자 합니다.
    테라form으로 VPC와 RDS 같은 자원을 만들고 싶습니다.
    이상은 구상한 노트입니다.

    좋은 웹페이지 즐겨찾기