20 ポイント 投稿者 GN⁺ 2024-05-01 | 3件のコメント | WhatsAppで共有
  • Pythonを使ってインフラを自動化するツール
  • 単一サーバーから数千台のサーバーまで高速にスケール可能
  • 一時的なコマンド実行、サービスのデプロイ、構成管理などに適している

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ツールと統合できる点はよいが、これらだけでは実現できない作業がそれほど多いのかは疑問である

3件のコメント

 
savvykang 2024-05-02

Ansibleには、YAML以外でプレイブックを定義する方法が必要だと思います。Ansibleはデータ加工のためにPythonの機能をJinjaフィルタとして再実装して提供していますが、これは非常に大きな無駄だと思います。プレイブックのfactのスキーマがtaskの入力と一致している状況であれば問題ないでしょうが、現実には中間データの加工が必然となる場面のほうがずっと多いです。データ加工にJinjaを使ったこと自体も、近視眼的な技術的判断だったのではないかと思います。

 
xguru 2024-05-01

pyinfra - Pythonベースのインフラ自動化ツール

以前1.0をリリースしたときに一度投稿しましたが、その後も継続的に活発なアップデートが行われています。
現在はバージョン2.92で、現在ベータ版の3.0がまもなくリリース予定です。

 
GN⁺ 2024-05-01
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を組み合わせて手軽にサービスをデプロイする方法が紹介されている。以前ならKubernetesを使っていただろうが、あまりに大げさでデバッグもしにくい。
  • PyinfraのおかげでAnsibleの慢性的な問題を避けられた。PyinfraはPythonスクリプトでインベントリや変数を柔軟に定義できるので便利だ。