기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon MWAA에서 dbt 사용
Amazon MWAA를 사용하면 dbt(데이터 빌드 도구) 및 PostgreSQL을 사용하여 데이터 변환 워크플로를 구축하고 실행할 수 있습니다. 다음 단계에서 시작 스크립트를 사용하여 필요한 종속성을 추가하고 샘플 dbt 프로젝트를 환경의 Amazon S3 버킷에 업로드합니다. 그런 다음 샘플 DAG를 사용하여 Amazon MWAA가 종속성을 설치했는지 확인합니다. 마지막으로 BashOperator를 사용하여 dbt 프로젝트를 실행합니다.
주제
버전
이 페이지의 코드 예제를 Python 웹 사이트의 Python 3.12의 Apache Airflow v2와 Python 웹 사이트의 Python 3.12의 Apache Airflow v3와 함께 사용할 수 있습니다. https://peps.python.org/pep-0693/
사전 조건
다음 단계를 완료하려면 먼저 다음이 필요합니다.
-
Apache Airflow v2.11.2를 사용하는 Amazon MWAA 환경. 이 샘플은 v2.11.2로 작성 및 테스트되었습니다. 다른 Apache Airflow 버전과 함께 사용하려면 샘플을 수정해야 할 수 있습니다.
-
샘플 dbt 프로젝트. Amazon MWAA에서 dbt 사용을 시작하려면 포크를 생성하고 dbt-labs GitHub 리포지토리에서 dbt 스타터 프로젝트
를 복제하면 됩니다.
종속성
Amazon MWAA에서 dbt를 사용하려면 환경에 다음 시작 스크립트를 추가합니다. 자세한 내용은 Amazon MWAA에서 시작 스크립트 사용을 참조하세요.
#!/bin/bash if [[ "${MWAA_AIRFLOW_COMPONENT}" != "worker" ]] then exit 0 fi echo "------------------------------" echo "Installing virtual Python env" echo "------------------------------" pip3 install --upgrade pip echo "Current Python version:" python3 --version echo "..." sudo pip3 install --user virtualenv sudo mkdir -p /usr/local/airflow/python3-virtualenv cd /usr/local/airflow/python3-virtualenv sudo python3 -m venv dbt-env sudo chmod -R 777 * echo "------------------------------" echo "Activating venv in $DBT_ENV_PATH" echo "------------------------------" source dbt-env/bin/activate pip3 list echo "------------------------------" echo "Installing libraries..." echo "------------------------------" # do not use sudo, as it will install outside the venv pip3 install dbt-core==1.9.4 dbt-redshift==1.9.1 dbt-postgres==1.9.0 echo "------------------------------" echo "Venv libraries..." echo "------------------------------" pip3 list dbt --version echo "------------------------------" echo "Deactivating venv..." echo "------------------------------" deactivate
DBT_ENV_PATH 변수 설정
시작 스크립트$DBT_ENV_PATH에서를 설정하거나 Amazon MWAA 환경에서 Airflow 구성으로 설정할 수 있습니다.
다음 섹션에서는 dbt 프로젝트 디렉터리를 Amazon S3에 업로드하고 Amazon MWAA가 필요한 dbt 종속성을 성공적으로 설치했는지 확인하는 DAG를 실행합니다.
Amazon S3에 dbt 프로젝트를 업로드합니다.
Amazon MWAA 환경에서 dbt 프로젝트를 사용할 수 있으려면 전체 프로젝트 디렉터리를 환경 dags 폴더에 업로드하면 됩니다. 환경이 업데이트되면 Amazon MWAA는 dbt 디렉터리를 로컬 usr/local/airflow/dags/ 폴더에 다운로드합니다.
Amazon S3에 dbt 프로젝트를 업로드하려면
-
dbt 스타터 프로젝트를 복제한 디렉터리로 이동합니다.
-
다음 Amazon S3 AWS CLI 명령을 실행하여
--recursive파라미터를 사용하여 프로젝트의 콘텐츠를 환경의dags폴더에 재귀적으로 복사합니다. 이 명령은 모든 dbt 프로젝트에 사용할 수 있는dbt라고 하는 하위 디렉터리를 생성합니다. 하위 디렉터리가 이미 있는 경우 프로젝트 파일은 기존 디렉터리에 복사되며 새 디렉터리는 생성되지 않습니다. 또한 이 명령은 이 특정 스타터 프로젝트의dbt디렉터리 내에 하위 디렉터리를 생성합니다.aws s3 cpdbt-starter-projects3://amzn-s3-demo-bucket/dags/dbt/dbt-starter-project--recursive프로젝트 하위 디렉터리에 다른 이름을 사용하여 상위
dbt디렉터리 내에 여러 dbt 프로젝트를 구성할 수 있습니다.
DAG를 사용하여 dbt 종속성 설치를 확인합니다.
다음 DAG는 BashOperator 및 bash 명령을 사용하여 Amazon MWAA가 시작 스크립트에 지정된 dbt 종속성을 성공적으로 설치했는지 확인합니다.
from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago with DAG(dag_id="dbt-installation-test", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="/usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt --version" )
작업 로그에 액세스하고 dbt 및 해당 종속성이 설치되었는지 확인하려면 다음을 수행합니다.
-
Amazon MWAA 콘솔로 이동한 다음 사용 가능한 환경 목록에서 Open Airflow UI를 선택합니다.
-
Apache Airflow UI의 목록에서
dbt-installation-testDAG를 찾은 다음Last Run열에서 날짜를 선택하여 마지막으로 성공한 작업을 엽니다. -
그래프 보기를 사용하여
bash_command작업을 선택하여 작업 인스턴스 세부 정보를 엽니다. -
로그를 선택하여 작업 로그를 연 다음 로그가 시작 스크립트에 지정된 dbt 버전을 성공적으로 나열하는지 확인합니다.
dbt profile.yml 생성 및 업로드
대상 데이터베이스에 연결하려면 dbt에 profiles.yml 파일이 필요합니다. 다음 섹션의 DAG는를 전달--profiles-dir /tmp/dbt하므로 dbt는 /tmp/dbt 디렉터리 내에서 profiles.yml 직접를 찾습니다. Amazon S3에 업로드한 dbt 폴더입니다.
의 프로파일 이름은 스타터 프로젝트의에 정의된 profile: 값과 일치해야 profiles.yml 합니다dbt_project.yml. dbt 스타터 프로젝트는를 사용합니다default.
profile.yml을 생성하고 업로드하려면
-
스타터 프로젝트를 복제한 디렉터리에서
profiles.yml데이터베이스 연결 세부 정보로 라는 파일을 생성합니다.default: target: dev outputs: dev: type: postgres host:your-db-endpoint.region.rds.amazonaws.com port: 5432 user:your_db_userpassword:your_db_passworddbname:your_databaseschema:your_schemathreads: 4 -
파일을 환경의 DAG 폴더의
dbt하위 디렉터리에 업로드합니다. DAGsaws s3 cp profiles.yml s3://amzn-s3-demo-bucket/dags/dbt/profiles.yml
데이터베이스 자격 증명 보호
일반 텍스트 자격 증명이 저장되지 않도록 하려면 dbt env_var() 함수를 사용하여 보안 암호를 참조합니다. Amazon MWAA 환경 변수 또는 AWS Secrets Manager예를 들어를 통해 값을 제공합니다password: "{{ env_var('DBT_PASSWORD') }}". 또한 Amazon MWAA VPC 보안 그룹이 작업자가 구성된 포트에서 데이터베이스에 연결할 수 있도록 허용하는지 확인합니다.
DAG를 사용하여 dbt 프로젝트를 실행합니다.
다음 DAG는 BashOperator를 사용하여 Amazon S3에 업로드한 dbt 프로젝트를 로컬 usr/local/airflow/dags/ 디렉터리에서 쓰기 액세스 가능한 /tmp 디렉터리로 복사한 다음 dbt 프로젝트를 실행합니다. bash 명령은 제목이 dbt-starter-project인 스타터 dbt 프로젝트를 가정합니다. 프로젝트 디렉터리 이름에 따라 디렉터리 이름을 수정합니다.
from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago import os DAG_ID = os.path.basename(__file__).replace(".py", "") # assumes all files are in a subfolder of DAGs called dbt with DAG(dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="source /usr/local/airflow/python3-virtualenv/dbt-env/bin/activate;\ cp -R /usr/local/airflow/dags/dbt /tmp;\ echo 'listing project files:';\ ls -R /tmp;\ cd /tmp/dbt/dbt-starter-project;\ /usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt run --project-dir /tmp/dbt/dbt-starter-project --profiles-dir /tmp/dbt;\ cat /tmp/dbt/dbt-starter-project/logs/dbt.log;\ rm -rf /tmp/dbt/dbt-starter-project" )