본문 바로가기

데이터엔지니어링

EC2 인스턴스 위에 Airflow 설치

Instance 설정

  • public subnet
    • instance1(Bastion Host)
    • 보안을 위해 airflow를 프라이빗에 설치하고 내부로 접속하기 위해 bastion host를 설치
    • 사양
      • t3.medium / 4GiB 메모리
      • linux 22.04
  • private subnet
    • instance1(webserver, scheduler, celery worker, celery flower, postgres, rabbitmq)
    • insatnce2(celery worker)
    • instance3(celery worker)
    • 사양
      • t3.medium / 4GiB 메모리
      • linux 22.04

VPC 설정

  • a, b 두개의 가용영역

  • 각 가용영역마다 1개의 public, 3개의 private subnet

  • NAT Gateway배치(외부 인터넷과 통신을 위해설치)

  • public, private 보안그룹 생성

    • public 보안그룹

      • 인바운드 룰: 22, 80, 443
      • 아웃바운드 룰: 모든 트래픽
    • private 보안그룹

      • 인바운드 룰: 15672(rabbitmq ui), 5672(broker), 8080(airflow ui), 5555(flower ui), 5432(postgres)

        Untitled

      • 아웃바운드 룰: 모든 트래픽

  • key pair 생성

Airflow 설치

  • Bastion Host에 접속해서 private instance에 접근

  • 3개의 인스턴스를 각자 만들고 설치하기 보다는 1개의 인스턴스를 사용해서 먼저 공통적인 부분까지 설정 완료

    • RabbitMQ 설치과정

      
        sudo apt-get update
        sudo apt-get install -y software-properties-common
        sudo add-apt-repository universe
        sudo apt-get install -y rabbitmq-server
        sudo rabbitmq-plugins enable rabbitmq_management
        sudo systemctl enable rabbitmq-server
      
    • 유저 생성, 관리자 부여, 권한 부여

      
        sudo rabbitmqctl add_user admin admin
        sudo rabbitmqctl set_user_tags admin administrator
        sudo rabbitmqctl set_permissions -p / admin ".*" *".*"* ".*"
      
    • 개인 로컬 환경 터미널에서 ssh -i {pem-key 경로} -L 15672:{private instance ip}:15672 ubuntu@{public instance ip} 입력 후 브라우저에서 localhost:15672 로 확인

  • Postgres 설치과정

    • Postgres 및 기타 패키지 설치

      
      sudo apt install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev \
        libpq-dev libreadline-dev tk-dev libgdbm-dev \
        libdb-dev libffi-dev wget
      sudo apt-get install -y postgresql postgresql-contrib
      
    • Postgres 데이터베이스 설정

      
      sudo su postgres
      
      psql
      CREATE USER airflow PASSWORD 'airflow';
      CREATE DATABASE airflow;
      \q
      
    • Postgres config 설정

      
      vim /etc/postgresql/{psql_version} ex) 14/main/postgresql.conf
      
      # / 를 사용해서 listen_addresses를 찾고 'localhost'에서 아래로 변경
      listen_addresses = '*'
      
      #저장 후 나가기
      
      
      vim /etc/postgresql/{psql_version} ex) 14/main/pg_hba.conf
      
      # / 를 사용해서 IPv4 local connections를 찾고 ADDRESS 부분을 아래로 변경
      # IPv4 local connections:
      host    all             all             0.0.0.0/0            scram-sha-256
      
      #저장 후 나가기
      
      exit
      
      #ubuntu 계정에서 아래 명령어로 데이터베이스 초기화
      sudo service postgresql restart
      
  • Airflow 설치과정

    • 패키지 설치

      
      sudo apt-get update 
      wget https://bootstrap.pypa.io/get-pip.py
      sudo python3 get-pip.py
      sudo apt-get install -y python3-pip
      sudo pip3 install pyopenssl --upgrade
      sudo pip3 install --ignore-installed "apache-airflow[celery,amazon,flower,postgres]==2.5.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.5.1/constraints-3.7.txt"
      
    • AIRFLOW_HOME 등록

      
      vi ~/.bashrc
      
      AIRFLOW_HOME=/home/ubuntu/{Airflow 폴더}
      export AIRFLOW_HOME
      cd ~/
      
      프라이빗 인스턴스 터미널 종료 후 재시작
      
      #아래 명령어를 통해 airflow 폴더 경로에 airflow시작
      airflow db init
      
    • Airflow.cfg 변경

      
      executor = CeleryExecutor
      sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@localhost:5432/airflow
      broker_url = amqp://admin:admin@localhost:5672/
      result_backend = db+postgresql://airflow:airflow@localhost:5432/airflow
      default_queue = airflow.queue
      
      #저장 후 나가기
      
      airflow db init #해당 명령어 이후 airflow info를 통해서 제대로 바뀌었는지 확인
      
    • 이제 인스턴스 터미널 종료 후 해당 인스턴스 AMI이미지 만들기

    • 이후, 해당 이미지로 2개의 인스턴스를 생성하기

  • Worker instance 설정

    • airflow.cfg 변경

      
      sql_alchemy_conn = postgresql+psycopg2://airflow:airflow@{webserver인스턴스 private ip주소}:5432/airflow
      broker_url = amqp://admin:admin@{webserver인스턴스 private ip주소}:5672/
      result_backend = db+postgresql://airflow:airflow@{webserver인스턴스 private ip주소}:5432/airflow
      
      #저장 후 나가기
      

Airflow 시작

  • webserver가 있는 인스턴스에서 아래 명령어로 airflow 계정 생성

    • AIRFLOW_HOME=/home/ubuntu/dongbin airflow users create --role Admin --username airflow --email admin --firstname admin --lastname admin --password airflow
  • Instance1(webserver)

    
      # -D 는 백그라운드로 실행
      airlfow webserver -D
      airflow scheduler -D
      airflow celery worker -D
      airflow celery flower -D
  • Instance2(worker), Instance3(worker)

    
      airflow celery worker -D
    

'데이터엔지니어링' 카테고리의 다른 글

Dataproc과 Dataflow  (0) 2024.06.01
airflow Import MysqlDb 에러 해결과정  (1) 2023.12.21
Airflow설치 - docker기반  (0) 2023.12.14