Pyinfra: Pythonを活用したインフラ自動化ツール
(pyinfra.com)- 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件のコメント
Ansibleには、YAML以外でプレイブックを定義する方法が必要だと思います。Ansibleはデータ加工のためにPythonの機能をJinjaフィルタとして再実装して提供していますが、これは非常に大きな無駄だと思います。プレイブックのfactのスキーマがtaskの入力と一致している状況であれば問題ないでしょうが、現実には中間データの加工が必然となる場面のほうがずっと多いです。データ加工にJinjaを使ったこと自体も、近視眼的な技術的判断だったのではないかと思います。
pyinfra - Pythonベースのインフラ自動化ツール
以前1.0をリリースしたときに一度投稿しましたが、その後も継続的に活発なアップデートが行われています。
現在はバージョン2.92で、現在ベータ版の3.0がまもなくリリース予定です。
Hacker Newsの意見
要約: