[Airflow] MySQL 테이블 Redshift로 복사하기

MINJI·2024년 11월 24일

⭐ MySQL -> Redshift 복사하는 ETL 방식

1. 복사하려는 테이블이 클 경우

MySQL (OLTP) -> Airflow Server -> S3 -> Redshift (OLAP)

  • Redshift COPY Command

2. 복사하려는 테이블이 작을 경우

MySQL (OLTP) -> Local Disk -> Redshift (OLAP)

  • INSERT Command

1번 방식으로 실습해볼 예정


⭐ MySQL Connecitons 설정

1. Airflow UI에서 MySQL 연결 설정

  • MySQL 서버 연결 정보:
    • Host: ec2-43-201-106-201.ap-northeast-2.compute.amazonaws.com
      • 이 정보는 변경될 수 있음으로 강의 페이지를 꼭 확인해볼 것!
    • Schema: prod
    • Login: guest
    • Password: Guestt1!
    • Port: 3306


⭐ AWS S3 Connections 설정

1. S3 버킷 생성 (실습용으로 강사님이 만들어둔 버킷 활용)

  • S3 버킷 이름: grepp-data-engineering
    • 이 S3 연결을 위해 별도 사용자를 만들고 그 사용자의 키들을 권한 인증을 위해 사용할 예정

2. IAM User 설정

  • IAM 콘솔에서 사용자 -> 사용자 생성 버튼 클릭

  • 사용자 이름 : airflow-s3-access

  • 직접 정책 연결AmazonS3FullAccess 정책을 연결해도 되고,

  • 더 좋은 방법은 정책 생성 버튼을 눌러 대상이 되는 S3 bucket에 대한 권한만 지정하는 것(JSON 형태로 해당 내용으로 수정하기)

3. 액세스키 만들기

  • 생성한 사용자 (airflow-s3-access) -> 보안 자격 증명 -> 액세스 키 만들기 버튼 클릭

  • AWS 외부에서 실행되는 애플리케이션 선택 (Airflow에서 돌릴거기때문)

  • 액세스키가 만들어지면 액세스 키비밀 액세스 키를 확인할 수 있다 (비밀 액세스 키는 지금밖에 확인할 수 없으므로 꼭 기억해둘 것! 만약 까먹으면 다시 알수는 없고 액세스키를 새로 만들어야 함)


4. Airflow UI에서 AWS S3 연결

  • Conn Id: aws_conn_id
  • Conn Type:
    • s3나 Amazon Web Service나 Generic을
      선택
  • Extra: { "region_name": "ap-northeast-2" }

Airflow에서 MySQL, S3가 연결된 것을 확인할 수 있음!


⭐ Redshift에게 S3버킷에 대한 액세스 권한 지정

1. IAM Role 설정

  • IAM 콘솔에서 역할 -> 역할 생성 버튼 클릭

  • 신뢰할 수 있는 엔터티 유형을 AWS 서비스 선택하고 서비스를 Redshift - Customizable로 선택 -> AmazonS3FullAccess 정책을 연결하거나 JSON편집해서 대상이 되는 S3 bucket에 대한 권한만 지정해서 역할 만들기

2. Redshift 클러스터에 IAM 역할 연결

  • Redshift 콘솔로 이동해서 원하는 클러스터에 방금 만든 IAM 역할을 연결해주면 됨

⭐ MySQL 관련 모듈 설치 (Docker)

1. "ModuleNotFoundError" 모듈에러 해결하는 법

  • docker 환경에서 airflow scheduler 컨테이너 ID를 통해 airflow 안으로 들어가야 함. 하지만 root 유저로 들어가야하기 때문에 --user root를 추가해줘야 함

몇 개의 모듈을 업데이트 해줘야함

  • apt 프로그램매니저 업데이트
sudo apt-get update
  • MySQL 클라이언트 라이브러리 업데이트
sudo apt-get install -y default-libmysqlclient-dev
  • MySQL과 관련된 모듈들을 다시 만들기 위해 gcc c++컴파일러 설치
sudo apt-get install -y gcc
  • MySQL 모듈 재설치
sudo pip3 install --ignore-installed "apache-airflow-providers-mysql"

루트 유저에서 나와서 airflow scheduler로 로그인하기

  • DAG ID가 MySQL_to_Redshift인 DAG 테스트해보기
airflow dags test MySQL_to_Redshift

0개의 댓글