

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon MWAA에서 dbt 사용
<a name="samples-dbt"></a>

이 주제에서는 Amazon MWAA으로 dbt 및 Postgres를 사용하는 방법을 보여줍니다. 다음 단계에서는 필수 종속성을 `requirements.txt`에 추가하고 샘플 dbt 프로젝트를 환경의 Amazon S3 버킷에 업로드합니다. 그런 다음 샘플 DAG를 사용하여 Amazon MWAA가 종속성을 설치했는지 확인하고 마지막으로 `BashOperator`를 사용하여 dbt 프로젝트를 실행합니다.

**Topics**
+ [버전](#samples-dbt-version)
+ [사전 조건](#samples-dbt-prereqs)
+ [종속성](#samples-dbt-dependencies)
+ [Amazon S3에 dbt 프로젝트를 업로드합니다.](#samples-dbt-upload-project)
+ [DAG를 사용하여 dbt 종속성 설치를 확인합니다.](#samples-dbt-test-dependencies)
+ [DAG를 사용하여 dbt 프로젝트를 실행합니다.](#samples-dbt-run-project)

## 버전
<a name="samples-dbt-version"></a>

이 페이지의 코드 예제는 [Python 3.10](https://peps.python.org/pep-0619/)의 **Apache Airflow v2** 및 [Python 3.11](https://peps.python.org/pep-0664/)의 **Apache Airflow v3**에서 사용할 수 있습니다.

## 사전 조건
<a name="samples-dbt-prereqs"></a>

다음 단계를 완료하려면 먼저 다음을 수행해야 합니다.
+ Apache Airflow v2.2.2를 사용하는 [Amazon MWAA 환경](get-started.md). 이 샘플은 v2.2.2로 작성 및 테스트되었습니다. 다른 Apache Airflow 버전과 함께 사용하려면 샘플을 수정해야 할 수 있습니다.
+ 샘플 dbt 프로젝트. Amazon MWAA에서 dbt 사용을 시작하려면 포크를 생성하고 dbt-labs GitHub 리포지토리에서 [dbt 스타터 프로젝트](https://github.com/dbt-labs/dbt-starter-project)를 복제하면 됩니다.

## 종속성
<a name="samples-dbt-dependencies"></a>

Amazon MWAA에서 dbt를 사용하려면 환경에 다음 시작 스크립트를 추가합니다. 자세한 내용은 [Amazon MWAA에서 시작 스크립트 사용](using-startup-script.md)을 참조하세요.

```
#!/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 python3-virtualenv
  cd 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-redshift==1.6.1 dbt-postgres==1.6.1
			
  echo "------------------------------"
  echo "Venv libraries..."
  echo "------------------------------"
			
  pip3 list
  dbt --version
			
  echo "------------------------------"
  echo "Deactivating venv..."
  echo "------------------------------"
			
  deactivate
```

다음 섹션에서는 dbt 프로젝트 디렉터리를 Amazon S3에 업로드하고 Amazon MWAA가 필수 dbt 종속성을 성공적으로 설치했는지 여부를 검증하는 DAG를 실행합니다.

## Amazon S3에 dbt 프로젝트를 업로드합니다.
<a name="samples-dbt-upload-project"></a>

Amazon MWAA 환경에서 dbt 프로젝트를 사용할 수 있으려면 전체 프로젝트 디렉터리를 환경 `dags` 폴더에 업로드하면 됩니다. 환경이 업데이트되면 Amazon MWAA는 dbt 디렉터리를 로컬 `usr/local/airflow/dags/` 폴더에 다운로드합니다.

**Amazon S3에 dbt 프로젝트를 업로드하려면**

1. dbt 스타터 프로젝트를 복제한 디렉터리로 이동합니다.

1. 다음 Amazon S3 AWS CLI 명령을 실행하여 `--recursive` 파라미터를 사용하여 프로젝트의 콘텐츠를 환경의 `dags` 폴더에 재귀적으로 복사합니다. 이 명령은 모든 dbt 프로젝트에 사용할 수 있는 `dbt`라고 하는 하위 디렉터리를 생성합니다. 하위 디렉터리가 이미 있는 경우 프로젝트 파일은 기존 디렉터리에 복사되며 새 디렉터리는 생성되지 않습니다. 또한 이 명령은 이 특정 스타터 프로젝트의 `dbt` 디렉터리 내에 하위 디렉터리를 생성합니다.

   ```
   aws s3 cp {{dbt-starter-project}} s3://{{amzn-s3-demo-bucket}}/dags/dbt/{{dbt-starter-project}} --recursive
   ```

   프로젝트 하위 디렉터리에 다른 이름을 사용하여 상위 `dbt` 디렉터리 내에 여러 dbt 프로젝트를 구성할 수 있습니다.

## DAG를 사용하여 dbt 종속성 설치를 확인합니다.
<a name="samples-dbt-test-dependencies"></a>

다음 DAG는 `BashOperator` 및 bash 명령을 사용하여 Amazon MWAA가 `requirements.txt`에 지정된 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 및 해당 종속성이 설치되었는지 확인하려면 다음을 수행합니다.

1. Amazon MWAA 콘솔로 이동한 다음 사용 가능한 환경 목록에서 **Open Airflow UI**를 선택합니다.

1. Apache Airflow UI의 목록에서 `dbt-installation-test` DAG를 찾은 다음 `Last Run` 열에서 날짜를 선택하여 마지막으로 성공한 작업을 엽니다.

1. **그래프 보기**를 사용하여 `bash_command` 작업을 선택하여 작업 인스턴스 세부 정보를 엽니다.

1. **로그**를 선택하여 작업 로그를 연 다음, 로그에 `requirements.txt` 지정된 dbt 버전이 성공적으로 나열되는지 확인합니다.

## DAG를 사용하여 dbt 프로젝트를 실행합니다.
<a name="samples-dbt-run-project"></a>

다음 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/mwaa_dbt_test_project;\
			/usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt run --project-dir /tmp/dbt/mwaa_dbt_test_project --profiles-dir ..;\
			cat /tmp/dbt_logs/dbt.log;\
			rm -rf /tmp/dbt/mwaa_dbt_test_project"
			)
```