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)
아웃바운드 룰: 모든 트래픽
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 |