도쿄사는 외노자

dbt with AWS Codebuild 본문

Tech/AWS for Data Engineering

dbt with AWS Codebuild

Enrai 2024. 12. 18. 11:27

:::note info
수년전 회사 블로그에 적었던 내용을 적당히 클렌징 및 한국어로 번역해서 올림
:::

개요

AWS Codebuild 를 이용하여, Git 상의 dbt project 를 스케줄 실행하는 방법을 간단히 검증

상세

아래의 순서로 실시

  1. AWS CodeBuild 로 빌드 프로젝트를 만들어, buildspec.yml 파일 작성
  2. AWS EventBridge 로 빌드 스케줄 설정

AWS CodeBuild 로 빌드 프로젝트를 만들어, buildspec.yml 파일 작성

작업 순서

AWS CodeBuild 에서 빌드 프로젝트 작성

OAuth 로 Github 연결

Github 에 연결이 되면, 아래와 같이 리포지토리 설정이 가능

AWS CodeBuildでBitBucketの特定ブランチからソースを読み込む方法

계속해서 설정

buildspec 을 둘 장소를 지정하기

buildspec.yml 의 내용은 아래와 같이 설정한다

version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.9
  pre_build:
    commands:
      - aws --version
      - echo 'region - ' - $AWS_DEFAULT_REGION
      - echo 'repository - ' $REPOSITORY_URI
  build:
    commands:
      - pip install dbt-core dbt-athena-community
      - cd ./Dev/dbt_schedule_sample
      - dbt run --profiles-dir .

이걸로 OK

자동으로 만들어진 IAM 롤에 대해선 아래의 권한 부여를 실시

  • Lake Formation
  • Athena

결과

Athena 확인

Try & Error

런타임 문제

Python Version 이 3.9 였던 모양으로, buildspec.yml 에서 runtime-versions 를 지정하여 해결

경로 문제

dbt project가 아니라는 소리를 들음
디렉토리 변경이 필요했기에, buildspec.yml 에서 cd ./Dev/dbt_schedule_sample 로 폴더 이동을 하여 해결

profiles.yml 을 찾을 수 없음

profiles.yml 을 찾을 수 없었다
buildspec.yml 에서 --profiles-dir 을 사용하여, dbt project 내의 profiles.yml 의 장소를 지정하여 해결

AWS EventBridge 로 빌드 스케줄 설정

작업 순서

CodeBuild 에서의 dbt 실행이 검증되었으므로, 매일 갱신되는 원 데이터에 맞추어 dbt 도 일 단위 스케줄을 설정
EventBridge 에서 스케줄을 작성

원 데이터를 취득하는 Lambda 가 매일 0시에 기동하므로, 이쪽은 여유를 두고 2시로 설정

타겟 설정에서 CodeBuild 를 지정

결과

다음날 확인해 보니 제대로 기동하였음

결론

헤맸던 부분

  • profiles.yml 의 설정 부분에서 꽤 고통스러웠음. 다들 보통은 Docker 를 사용하고 있어서 참조할 곳도 없고...

좋았던 점

  • dbt 와 AWS 만 있으면 간단히 ETL 작업 가능
  • CodeBuild 의 기동 타이밍을 지정할 수 있으므로 유용하게 사용 가능할 듯
  • 이번엔 스케줄 지정이 목적이었기에 이런 느낌이었지만, 실전에서 사용할 때엔 아래와 같이 Step Function에서 돌리는 등으로도 사용 가능