# Pyinfra: 파이썬을 활용한 인프라 자동화 도구

> Clean Markdown view of GeekNews topic #14586. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14586](https://news.hada.io/topic?id=14586)
- GeekNews Markdown: [https://news.hada.io/topic/14586.md](https://news.hada.io/topic/14586.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-01T09:51:07+09:00
- Updated: 2024-05-01T09:51:07+09:00
- Original source: [pyinfra.com](https://pyinfra.com/)
- Points: 20
- Comments: 3

## Topic Body

- 파이썬을 사용하여 인프라를 자동화하는 도구  
- 단일 서버에서 수천 대의 서버까지 빠르게 확장 가능  
- 임시 명령 실행, 서비스 배포, 구성 관리 등에 적합  
  
### pyinfra를 사용해야 하는 이유  
  
- 수천 개의 대상에 대해 예측 가능한 성능으로 초고속 실행 가능  
- 실시간 stdin/stdout/stderr 출력(`-vvv`)으로 즉각적인 디버깅 가능  
- 변경 사항 적용 전에 diff와 dry run을 지원하여 멱등성 제공( Idempotent operations)  
- 전체 Python 패키지 생태계로 확장성 제공  
- SSH가 가능한 모든 기기에서 에이전트 없이 실행 가능  
- Docker, Terraform, Vagrant 등과 같은 커넥터와 통합됨  
  
#### 빠른 시작  
  
- `pip install pyinfra` 명령으로 pyinfra 설치  
- SSH를 통해 명령 실행 가능  
  - `pyinfra my-server.net exec -- echo "hello world"`  
- Docker, 로컬 머신 및 기타 커넥터 대상 지정 가능  
  - `pyinfra @docker/ubuntu exec -- echo "Hello world"`  
  - `pyinfra @local exec -- echo "Hello world"`  
- 명령 실행 외에도 작업을 사용하여 상태 정의 가능  
  - `pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true`  
- 이를 `deploy.py`와 같은 Python 파일로 저장하고 실행 가능  
- 인벤토리, 작업 및 Python 코드를 결합하여 모든 것을 배포할 수 있음  
  
자세한 내용은 시작 가이드, 작업 사용법 가이드, 인벤토리 및 데이터 사용법, 전역 인수 및 CLI 사용법을 참조하거나 문서화된 예제를 확인할 것.  
  
### GN⁺의 의견  
  
- 배포 도구로서 안전성과 통제력이 중요한데, 인프라 관리 도구로서의 기능에 초점이 맞추어져 있어 배포 프로세스에서 문제가 생길 가능성이 있음  
- pyinfra 자체는 배포 베스트 프랙티스를 강제하지 않기 때문에 팀 내에서 별도로 규칙을 정하고 관리해야 함  
- 언어로 Python을 사용하므로 Python 생태계를 활용할 수 있고 개발자에게 친숙한 것은 장점이지만, 다른 일반적인 배포 도구에 비해 진입 장벽이 있음  
- 단순하고 유연한 배포 시나리오에 적합한 도구로 보이며, 복잡한 엔터프라이즈급 배포에는 Ansible, Puppet 등의 성숙한 도구가 더 적합할 수 있음  
- Terraform이나 Pulumi 같은 IaC 도구와 통합되는 점은 좋으나, 이들만으로도 불가능한 작업이 많지 않은지 의문임

## Comments



### Comment 24865

- Author: savvykang
- Created: 2024-05-02T13:17:10+09:00
- Points: 1

Ansible에 YAML 이외의 플레이북 정의 방법이 필요하다고 생각합니다. Ansible이 데이터 가공을 위해 [파이썬 기능을 jinja 필터로 다시 구현해서 제공](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_filters.html)하고 있는데 엄청난 낭비라고 생각합니다. 플레이북 fact의 스키마가 task의 입력과 일치하는 상황이라면 상관이 없겠지만 현실적으로는 중간 데이터 가공이 필연적인 상황이 더 많습니다. 데이터 가공에 Jinja를 이용한 것도 근시안적인 기술 결정이 아니었나 싶습니다

### Comment 24831

- Author: xguru
- Created: 2024-05-01T10:18:05+09:00
- Points: 1

[pyinfra - 파이썬 기반의 인프라 자동화 도구](https://news.hada.io/topic?id=2223)  
  
예전 1.0 릴리즈 했을때 한번 올리긴 했는데, 계속 활발히 업데이트 중입니다.   
지금은 2.92 버전인데 현재 베타인 3.0이 곧 릴리즈 예정입니다.

### Comment 24829

- Author: neo
- Created: 2024-05-01T09:51:07+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40211655) 
요약:

- Ansible은 대상 시스템에 Python 인터프리터가 필요하지만, Pyinfra는 셸만 있으면 됨. Pyinfra는 과소평가된 소프트웨어임.
- Ansible은 좋지만 결국 YAML 문자열로 Python을 작성하게 됨. 그렇다면 처음부터 Python을 직접 사용하는 게 나음.
- Pyinfra 개발자가 댓글을 달았는데, 현재 베타인 v3을 사용하는 것을 추천함. 안정적이며 공식 릴리스 준비 중이라고 함.
- Pyinfra 관련 과거 HN 게시물들이 여러 개 링크되어 있음.
- 한 사용자는 Ansible에서 Pyinfra로 전환했는데, Pyinfra가 훨씬 깔끔하다고 평가함. Python이 없는 Fedora CoreOS 환경에서도 Pyinfra를 사용할 수 있어 좋았다고 함.
- Puppet이 이 분야에서 가장 적절한 도구라는 의견도 있음. 단순하면서도 필요하면 프로그래밍 언어로서의 기능을 제공함. 다만 사용성 측면에서 개선이 필요함.
- CM(구성 관리) 도구 사용이 매우 힘들 수 있음. 전문가들도 유지보수 비용이 높다는 데 동의함. 컨테이너와 더 밀접하게 통합되는 방향으로 발전되어야 함.
- Python은 인프라 관리에 적합하지 않을 수 있음. 바이너리 빌드, 패키지 재현성, 정적 타입 부재 등의 한계가 있음.
- Pyinfra와 Docker, Tailscale을 조합해서 간편하게 서비스를 배포하는 방법이 소개됨. 과거에는 쿠버네티스를 사용했겠지만, 너무 과하고 디버깅도 어려움.
- Pyinfra 덕분에 Ansible의 고질적인 문제들을 피할 수 있었음. Pyinfra는 Python 스크립트로 인벤토리와 변수를 유연하게 정의할 수 있어 편리함.
