20P by neo 3달전 | favorite | 댓글 3개
  • 파이썬을 사용하여 인프라를 자동화하는 도구
  • 단일 서버에서 수천 대의 서버까지 빠르게 확장 가능
  • 임시 명령 실행, 서비스 배포, 구성 관리 등에 적합

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 도구와 통합되는 점은 좋으나, 이들만으로도 불가능한 작업이 많지 않은지 의문임

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

pyinfra - 파이썬 기반의 인프라 자동화 도구

예전 1.0 릴리즈 했을때 한번 올리긴 했는데, 계속 활발히 업데이트 중입니다.
지금은 2.92 버전인데 현재 베타인 3.0이 곧 릴리즈 예정입니다.

Hacker News 의견

요약:

  • 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 스크립트로 인벤토리와 변수를 유연하게 정의할 수 있어 편리함.