pyinfra? 그게 뭔데?
이제, 파이썬 코드로 인프라 자동화를 해보자
오늘 TLDR DevOps 보다가, pyinfra라는 놈을 봤다.
pyinfra is a python-native, agentless automation tool that runs commands over SSH concurrently, idempotently, and 6x faster than Ansible.
인프라 자동화. 솔직히 1인 개발자가, 특히나 대규모 트래픽은 다뤄본 적도 없는 허접 개발자가 다룰 일이 없는 도구라… 테라폼 정도 찍먹해본게 전부다.
Ansible 도 이름만 들어봤다.
근데 “Ansible 보다 6배 빠르다” 라는 비교가 좀 끌리긴 했다. 뭐가 6배 빠르다는 건지 까봐야 알 거 같아서, 공식 사이트 한 번 들어가봤다.
그러니까 이게 뭐냐면
서버 여러 대를 굴리다 보면 — 매번 SSH 들어가서 같은 명령 치고 있는 자신을 발견한다고 한다.
apt install nginx 같은 거. 한 대면 그냥 치는데, 10대면? 100대면? 새 서버 들어올 때마다?
그래서 “이 명령들을 한 번 적어두고, 여러 서버에 동시에 돌리는 도구” 가 필요해졌다. 이게 인프라 자동화 도구.
Ansible 이 그쪽에서 가장 유명한 거고, pyinfra 는 그거랑 같은 카테고리의 신상.
테라폼이랑 같은 건가?
싶었는데, 보니까 다르다.
테라폼은 “서버 자체를 띄우는 거” (AWS 에 EC2 만들기, RDS 만들기 같은). pyinfra / Ansible 은 “이미 떠있는 서버에 들어가서 셋업하는 거”.
쉽게 말하면 — 테라폼이 집을 짓고, pyinfra 가 그 집 안에 가구를 들이는 식.
그래서 pyinfra 는
한 줄로 — Ansible 인데 YAML 대신 Python 으로 쓰는 거.
Ansible 은 작업을 YAML 파일에 쓴다는데, 조건문이나 반복문 짜려면 YAML 안에 Jinja2 라는 템플릿 언어를 또 끼워 박는다고 한다. 그게 좀… 코드도 아니고 설정도 아닌 어중간한 게 러닝커브를 또 발생시킨다.
pyinfra 는 그냥 .py 파일이라 for 문 if 문 함수 다 그대로 쓰면 된다. 에디터 자동완성도 잘 먹고.
공식 사이트 한 줄이 좀 통쾌하다.
No yaml. No jinja-in-yaml. Real control flow.
코드는 이렇게 생겼다
서버 목록 하나.
web = [
("web-01.prod", {"role": "edge"}),
("web-02.prod", {"role": "edge"}),
]
뭘 할지 하나.
from pyinfra.operations import apt, files, systemd
apt.packages(packages=["nginx", "certbot"], update=True)
files.template(src="templates/nginx.conf.j2", dest="/etc/nginx/sites-enabled/api")
systemd.service("nginx", reloaded=True)
nginx + certbot 깔고, 설정 파일 복사하고, 서비스 재시작.
읽히는 그대로다. 한국말로 “이거 깔고 이 파일 복사하고 재시작” 인 거.
돌리는 건 한 줄.
pyinfra inventory.py deploy.py --limit web
근데 그 전에 --dry 붙여서 미리 뭐 바뀔지 보고 갈 수 있는 게 좋아 보였다. 한 번 잘못 돌리면 서버 여러 대 동시에 박살날 수 있는 도구라 그 안전장치 진짜 중요하다.
진짜 6배 빠른가
공식이 미는 숫자 — 23대 서버에 nginx 깔고 reload 하는 데 2.1초.
이게 gevent 기반의 동시 SSH 처리라 빠르다는데, 직접 벤치 안 해봐서 모름.
10대 정도면 큰 차이 안 날 것 같고, 100대 1000대 가면 의미 있는 차이일 듯.
근데 그 정도 규모로 서버 굴리는 사람이면 — 어차피 Ansible 도 잘 알 거고, pyinfra 의 6배 빠름이 진짜 의미 있는 차이일 거다.
그래서 쓸 생각?
솔직히 당장 없다.
내가 굴리는 게 Container Apps 한 줌 + 거의 다 매니지드라 — SSH 들어가서 손으로 뭐 할 일이 잘 없다.
그리고 굳이 한다고 해도 — 서버가 1-2대 수준이라 그냥 SSH 들어가서 치는 게 더 빠르다.
다만 다음에 진짜로 VM 여러 대 굴려야 할 일 생기면, 새 문법에 새 설정파일 배우기보다는 익숙한 맛인 Python을 쓸 거 같긴 하다.
마치며
뭐 암튼, 많이 알면 좋은 거.
마침.