Airflow ETL 환경 구축

2025. 10. 8. 11:58카테고리 없음

* uv 기반 가상환경 사용

도커 환경 (MySQL)

docker run -d \
  --name airflow-mysql \
  -e MYSQL_ROOT_PASSWORD=0000 \
  -e MYSQL_DATABASE=airflow_db \
  -e MYSQL_USER=airflow \
  -e MYSQL_PASSWORD=airflow_pass \
  -p 3306:3306 \
  mysql:8.0

MySQL 예제 쿼리 및 데이터 입력

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    country VARCHAR(50)
);

INSERT INTO users (user_id, name, age, country) VALUES
  (1, 'Alice', 25, 'US'),
  (2, 'Bob', 32, 'KR'),
  (3, 'Charlie', 29, 'JP'),
  (4, 'David', 40, 'US'),
  (5, 'Eunji', 27, 'KR');

위 docker run 명령어로 MySQL 8.0 컨테이너를 생성하고, 예제 쿼리로 users 테이블과 샘플 데이터를 구성했습니다.


ETL_Project


[ETL_tutorial GitHub 바로가기]
(https://github.com/Jindongleee/ETL_tutorial#etl_project)

Extract(운영DB, 데이터포털, SNS) → Transform(Pandas, Spark ML, Spark, Hadoop) → Load(S3, AWS Redshift, GCP BigQuery, HBase) 사용예정


airflow 보안 이슈 .env 사용

cd [project 위치]
export $(cat .env | xargs)   # airflow.cfg 파일 lite 버전 덮어씌우기 위함
airflow db migrate
airflow api-server --port
airflow triggler
airflow dag-processor

  • 반드시 가상환경과 파일이 ~/airflow/dags 에 존재해야 함(감시 위치)
  • 위 명령어 안쓰고 airflow standalone 일단 사용 예정

Flow

-- Airflow --
Mysql dump → transform (pandas) → load to s3 → copy s3 to redshift

Airflow Connection 설정

Mysql_default
(docker create → mysql, MacOS/Ubuntu → default IPv6 따라서 localhost가 아닌 IPv4 127.0~로 설정)

  • host: 127.0.0.1
  • port: 3306
  • db: ariflow_db

AWS_S3_default, IAM (AmazonS3FullAccess 생성)

  • AWS Access Key ID = IAM Access Key
  • AWS Secret Access Key = IAM Secret Key
  • 추가 필드 JSON:
  • { "region_name": "ap-northeast-2" }

redshift_default, IAM role 생성\\ (AmazonS3ReadOnlyAccess, 퍼블릭 모드로 전환 필요)

  • host: redshift 작업그룹 엔드포인트
  • User: 네임스페이스 user
  • pwd: 네임스페이스 작업 토글 관리자 보안
  • port: 5439
  • db: 네임스페이스 DB 이름
  • 추가 필드 JSON:
  • { "sslmode": "require" }

결과 Redshift → query editor v2

*다음 시간에는 Transform을 Transform에 대해 자세히 다뤄보도록 하겠습니다
\
질문에 답변 달아드립니다!