20 คะแนน โดย GN⁺ 2024-05-01 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • เครื่องมือสำหรับทำให้โครงสร้างพื้นฐานเป็นอัตโนมัติด้วย Python
  • ขยายได้อย่างรวดเร็วตั้งแต่เซิร์ฟเวอร์เครื่องเดียวไปจนถึงหลายพันเครื่อง
  • เหมาะสำหรับการรันคำสั่งเฉพาะกิจ การดีพลอยบริการ และการจัดการคอนฟิก

เหตุผลที่ควรใช้ pyinfra

  • รันได้เร็วมากพร้อมประสิทธิภาพที่คาดการณ์ได้บนเป้าหมายหลายพันรายการ
  • ดีบักได้ทันทีด้วยเอาต์พุต stdin/stdout/stderr แบบเรียลไทม์ (-vvv)
  • รองรับ diff และ dry run ก่อนนำการเปลี่ยนแปลงไปใช้ เพื่อให้การทำงานมีความเป็น idempotent (Idempotent operations)
  • ขยายความสามารถได้ด้วยระบบนิเวศแพ็กเกจ Python ทั้งหมด
  • รันได้แบบไม่ต้องใช้เอเจนต์บนอุปกรณ์ใดก็ตามที่เชื่อมต่อผ่าน SSH ได้
  • ทำงานร่วมกับคอนเน็กเตอร์อย่าง Docker, Terraform, Vagrant และอื่น ๆ

เริ่มต้นอย่างรวดเร็ว

  • ติดตั้ง pyinfra ด้วยคำสั่ง pip install pyinfra
  • สามารถรันคำสั่งผ่าน SSH ได้
    • pyinfra my-server.net exec -- echo "hello world"
  • สามารถระบุเป้าหมายเป็น Docker, เครื่องโลคัล และคอนเน็กเตอร์อื่น ๆ ได้
    • pyinfra @docker/ubuntu exec -- echo "Hello world"
    • pyinfra @local exec -- echo "Hello world"
  • นอกเหนือจากการรันคำสั่ง ยังสามารถใช้ operations เพื่อกำหนดสถานะได้
    • pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
  • สามารถบันทึกสิ่งนี้เป็นไฟล์ Python เช่น deploy.py แล้วรันได้
  • สามารถดีพลอยทุกอย่างได้โดยผสาน inventory, operations และโค้ด Python เข้าด้วยกัน

สำหรับรายละเอียดเพิ่มเติม ให้ดูคู่มือเริ่มต้นใช้งาน คู่มือการใช้ operations การใช้งาน inventory และ data รวมถึง global arguments และการใช้งาน CLI หรือดูตัวอย่างที่มีเอกสารประกอบ

ความเห็นของ GN⁺

  • ในฐานะเครื่องมือดีพลอย ความปลอดภัยและการควบคุมเป็นสิ่งสำคัญ แต่เครื่องมือนี้เน้นฟังก์ชันด้านการจัดการโครงสร้างพื้นฐาน จึงอาจมีโอกาสเกิดปัญหาในกระบวนการดีพลอยได้
  • ตัว pyinfra เองไม่ได้บังคับใช้แนวปฏิบัติที่ดีที่สุดด้านการดีพลอย ดังนั้นภายในทีมต้องกำหนดกติกาและดูแลจัดการกันเอง
  • การใช้ Python เป็นภาษาทำให้ใช้ประโยชน์จากระบบนิเวศ Python ได้และเป็นมิตรกับนักพัฒนา ซึ่งเป็นข้อดี แต่ก็มีอุปสรรคในการเริ่มต้นใช้งานเมื่อเทียบกับเครื่องมือดีพลอยทั่วไปอื่น ๆ
  • ดูเป็นเครื่องมือที่เหมาะกับสถานการณ์การดีพลอยที่เรียบง่ายและยืดหยุ่น ส่วนการดีพลอยระดับองค์กรที่ซับซ้อน เครื่องมือที่พัฒนามากกว่าอย่าง Ansible หรือ Puppet อาจเหมาะสมกว่า
  • แม้จะเป็นข้อดีที่ทำงานร่วมกับเครื่องมือ IaC อย่าง Terraform หรือ Pulumi ได้ แต่ก็ยังน่าสงสัยว่ามีงานจำนวนมากแค่ไหนที่เครื่องมือเหล่านี้ทำเองไม่ได้

3 ความคิดเห็น

 
savvykang 2024-05-02

ผมคิดว่า Ansible จำเป็นต้องมีวิธีนิยาม playbook ที่นอกเหนือจาก YAML อยู่เหมือนกัน Ansible นำความสามารถของ Python มาทำใหม่แล้วให้ใช้ผ่าน jinja filter เพื่อแปลงข้อมูล ซึ่งผมมองว่าเป็นความสิ้นเปลืองอย่างมาก ถ้า schema ของ fact ใน playbook ตรงกับอินพุตของ task ก็อาจไม่เป็นปัญหา แต่ในโลกความเป็นจริงมักหลีกเลี่ยงไม่ได้ที่จะต้องมีการแปลงข้อมูลระหว่างทาง ผมยังรู้สึกว่าการเลือกใช้ Jinja สำหรับการแปลงข้อมูลก็น่าจะเป็นการตัดสินใจทางเทคนิคที่ค่อนข้างมองสั้นเกินไปด้วย

 
xguru 2024-05-01

pyinfra - เครื่องมืออัตโนมัติโครงสร้างพื้นฐานที่ใช้ Python

ตอนที่ออกเวอร์ชัน 1.0 เคยนำมาโพสต์ครั้งหนึ่งแล้ว แต่ก็ยังมีการอัปเดตอย่างต่อเนื่องและคึกคัก
ตอนนี้อยู่ที่เวอร์ชัน 2.92 และเวอร์ชัน 3.0 ซึ่งขณะนี้เป็นเบต้า ก็มีกำหนดจะออกในเร็ว ๆ นี้

 
GN⁺ 2024-05-01
ความคิดเห็นบน Hacker News

สรุป:

  • Ansible ต้องการ Python interpreter บนระบบปลายทาง แต่ Pyinfra ต้องมีเพียงเชลล์ก็พอ Pyinfra เป็นซอฟต์แวร์ที่ถูกประเมินค่าต่ำเกินไป
  • Ansible ก็ดี แต่สุดท้ายก็กลายเป็นการเขียน Python ในรูปแบบสตริง YAML ถ้าอย่างนั้นใช้ Python โดยตรงตั้งแต่แรกจะดีกว่า
  • มีผู้พัฒนา Pyinfra มาแสดงความคิดเห็นและแนะนำให้ใช้ v3 ซึ่งตอนนี้ยังเป็นเบต้า โดยบอกว่ามีความเสถียรและกำลังเตรียมออกเป็นรุ่นทางการ
  • มีการลิงก์โพสต์ HN เก่า ๆ ที่เกี่ยวกับ Pyinfra หลายรายการ
  • ผู้ใช้คนหนึ่งเปลี่ยนจาก Ansible มาใช้ Pyinfra และมองว่า Pyinfra สะอาดกว่ามาก อีกทั้งยังใช้งานได้ดีในสภาพแวดล้อม Fedora CoreOS ที่ไม่มี Python
  • มีความเห็นว่า Puppet เป็นเครื่องมือที่เหมาะสมที่สุดในสายงานนี้ เพราะเรียบง่ายและยังให้ความสามารถแบบภาษาโปรแกรมเมื่อจำเป็น แต่ก็ยังต้องปรับปรุงด้านการใช้งาน
  • การใช้เครื่องมือ CM (การจัดการคอนฟิกูเรชัน) อาจยากมาก แม้แต่ผู้เชี่ยวชาญก็เห็นตรงกันว่าค่าใช้จ่ายในการบำรุงรักษาสูง และควรพัฒนาให้ผสานกับคอนเทนเนอร์ได้แนบแน่นยิ่งขึ้น
  • Python อาจไม่เหมาะกับการจัดการอินฟราสตรักเจอร์นัก เพราะมีข้อจำกัดเรื่องการบิลด์ไบนารี ความสามารถในการทำแพ็กเกจแบบทำซ้ำได้ และการไม่มี static type
  • มีการแนะนำวิธีใช้ Pyinfra ร่วมกับ Docker และ Tailscale เพื่อดีพลอยบริการได้อย่างง่ายดาย ในอดีตอาจจะใช้ Kubernetes แต่ถือว่าเกินความจำเป็นและดีบักยาก
  • Pyinfra ช่วยให้หลีกเลี่ยงปัญหาเรื้อรังของ Ansible ได้ โดย Pyinfra สามารถกำหนด inventory และตัวแปรต่าง ๆ ด้วยสคริปต์ Python ได้อย่างยืดหยุ่น จึงใช้งานสะดวก