일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프라하
- 뮌헨
- react.js
- 三井住友カード
- 방콕
- 페이페이
- 카마츠루
- Selenium
- 체코
- javascript
- 熱海
- pyenv
- 메르페이
- PostgreSQL
- node.js
- documentdb
- CSV
- duckdb
- JenkinsFile
- Python
- 미츠이 스미토모
- 釜つる
- 태국
- 아타미
- typescript
- terraform
- codebuild
- local
- PayPay
- vba
- Today
- Total
도쿄사는 외노자
dbt with AWS Codebuild 본문
:::note info
수년전 회사 블로그에 적었던 내용을 적당히 클렌징 및 한국어로 번역해서 올림
:::
개요
AWS Codebuild 를 이용하여, Git 상의 dbt project 를 스케줄 실행하는 방법을 간단히 검증
상세
아래의 순서로 실시
- AWS CodeBuild 로 빌드 프로젝트를 만들어, buildspec.yml 파일 작성
- 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
에서 돌리는 등으로도 사용 가능
'Tech > AWS for Data Engineering' 카테고리의 다른 글
DynamoDB Local (0) | 2024.07.06 |
---|---|
Eventbridge Scheduler를 이용한 Teams 자동 통지 (0) | 2024.01.22 |
AWS Glue Job에서 Tableau에 Hyper파일 Publish하기 (1) | 2023.04.20 |
Glue Crawler로 쌍따옴표가 포함된 CSV파일 읽기 (2) | 2023.02.14 |
Terraform으로 CloudTraild의 Cloudwatch 만들 때 조심할 것 (0) | 2022.12.14 |