airflow 구성하고 vscode로 코딩하기

맥에서 했으면 훨씬 구성이 쉬웠겠지만, 그리고 poetry로 했으면 훨씬 쉬웠겠지만 워낙 규모가 있는 라이브러리이다 보니 과정이 어려워 다른 참조들을 보면서 따라했다. 기본적으로 poetry랑 쓰기 어려운 이유는 airflow 내부의 라이브러리에 따라 poetry가 버전을 참조하지 못해서 에러가 나는 경우가 존재한다고 한다.

또한 하나의 문제는 mac에서는 그냥 리눅스가 존재하지만 윈도우에서 하려면 윈도우용 linux인 wsl(Windows Subsystem for Linux)를 설치한 이후에 해야 한다. 나는 기본적으로 이전에 Modular를 사용해보기 위해 ubuntu를 설치한 적이 있었기에 그 위에 바로 할 수 있었다.

airflow?

wsl > docker > airflow

윈도우 안에 wsl 설치하고
wsl 안에 도커를 설치하고
그 다음 airflow를 설치하고
docker compose up 으로 airflow를 실행하는 container 올리는 것
결론적으로 우리는 vscode로 airflow의 dag를 다루는 공간에서 작업을 하고 싶은 것이다.
wsl --install

이후 여기서 username, password를 설정하면 된다. 기억에 남는 것으로 하시길...

설치가 완료되면, 재부팅을 한번 해주는 것이 좋다. 이후에 ubuntu를 나간 다음 다시 들어오려면

  1. powershell에서 command로 들어가기
    1. wsl -l 로 wsl 종류 확인
    2. wsl -d <원하는 배포판>로 접속
  2. vscode remote - wsl 로 접속

두 가지 방법으로 접속이 가능하다. 이후에 도커를 wsl 안에 설치해준다. 이미 설치되었을 가능성까지 고려한 친절한 도커 사이트의 코드를 그대로 ctrl + c,v 해주는게 신상에 좋다. 만약에 나처럼 직접 command 입력하다가 Package 'docker-ce' has no installation candidate 에러가 뜨면 아래의 블로그를 참고해라.

ubuntu docker 설치시 Package ‘docker-ce’ has no installation candidate 해결
오랜만에 다른 서버에 도커를 설치할 일이 생겼는데 새 서버다 보니 이런 오류를 맞이했습니다 허허 Package ‘docker-ce’ has no installation candidate docker-ce 패키지를 사용할 수 없습니다. 하지만 다른 패키지가 참조하고 있습니다 공식홈페이지에 말한대로 그냥 apt install 로 하기 전에 다음처럼 진행해줍시다. $ sudo apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository…
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

접속한 뒤에 docker install

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

docker run check

제대로 ubuntu안에 docker가 설치가 되었으면 이제 airflow를 받아올 차례다.

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.9.2/docker-compose.yaml'

mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

docker compose up airflow-init
#The account created has the login airflow and the password airflow

docker compose up

여기까지하면 6개 정도의 container가 생기면서 localhost:8080으로 들어갈 수 있따.아주 많은 example들이 있을 것이다.

docker compose down --volumes --rmi all

만약에 다 엎어버리고 싶으면 이걸 돌리면 된다.

vscode로 airflow dag 만들기

자 이제 airflow는 wsl ubuntu에서 돌아가고 있으니깐, vscode로 wsl에 접속해서 dag에 코딩을 해주면 된다. vscode 상태바(아래)에 보이는 것을 눌러서 들어가고 되고, 아니면

activity bar에서 이걸 눌러서 찾아 들어가고 된다. 아니면 f1 + wsl : remote 이런식으로 찾아들어가도 된다.

ref

wsl vscode 개발환경 구축
vscode 확장 ‘remote-WSL’ 활용
How to fix The terminal process ”/usr/sbin/nologin” failed to launch (exit code: 1) error in VSCode
I am running my VSCode on Windows but I have it connected to a remote container. I am trying to start an integrated terminal on VSCode in that container and I get this error: The terminal process…
Airflow 사전 준비 - WSL Linux / Docker / Airflow 설치
Apache Airflow는 데이터 추출, 가공, 저장 분석 등을 처리할 수 있는 Pipeline을 만들고 관리할 수 있는 하나의 솔루션이다. 실제 현업에서 많이 쓰이는 솔루션 중 하나이며, Python 언어로 개발하는 것이 특징이다. 평소 Pipeline을 만드는 것에 대한 관심이 있어 Apache Airflow 공부를 시작하게 되었다. 이번 시간에는 본격적인 Airflow 사용을 위한 준비 단계를 정리해보려한다. 준비1. WSL을 이용하여 Windows에서 Linux 설치하기 step1) Windows PowerShell [관리자 권한으로 실행] wsl --install Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subs…
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

Read more

[Json] dump vs dumps

json은 javascript object notation의 줄임말로 웹 어플리케이션에서 구조화된 데이터를 표현하기 위한 string 기반의 포맷이다. 서버에서 클라인트로 데이터를 전송하여 표현하거나, 그 반대로 클라이언트에서 서버로 보내는 경우들에 사용된다. javascript 객체 문법과 굉장히 유사하지만 워낙에 범용성이 넓게 설계되어 있어서 다른 언어들에도 많이 사용된다. 기본적으로 python 에는 json 이 내장 모듈이다. 바로 import json해주면