Puppet Boltで解き放つ「エージェントレス」な自動化の深淵
こんにちは。インフラの世界へようこそ。
多くの現場で「Puppet = 常駐エージェントを全サーバーに入れるもの」という古い固定観念が、柔軟なインフラ構築の足かせになっています。
今日は、その常識を覆します。Puppet Boltを使えば、エージェントをインストールすることなく、SSHやWinRM経由で、あなたの手元のPCから直接サーバー群をオーケストレーションできるのです。
「なぜ今さらPuppetなのか?」と思われるかもしれません。答えはシンプルです。過去10年以上、世界中の高負荷環境で磨き上げられてきた「Puppetの堅牢なリソース管理能力」を、エージェントなしで、アドホック(その場限り)な作業に即座に適用できるからです。
さあ、毎日の泥臭いサーバー管理を「インフラエンジニアの嗜み」に変えていきましょう。
—
1. なぜ「エージェントレス」が最強の武器になるのか
大規模な構成管理では常駐エージェントが有利ですが、緊急時のパッチ適用や、特定の10台だけに設定を流し込みたいとき、エージェントのインストールはオーバーヘッドでしかありません。
- 即応性: エージェントのデプロイや証明書発行を待つ必要はない。
- 冪等性(べきとうせい): 実行するたびに結果が変わるスクリプトとは別格。Puppetのエンジンが「あるべき状態」を保証します。
- 資産の再利用: 既存のPuppetマニフェストを「そのまま」Boltで呼び出せます。
2. 導入:まずはBoltをあなたの手元に
Boltは、あなたの管理端末(Mac/Linux/Windows)にインストールするだけです。
macOSの場合 (Homebrew)
brew install puppetlabs/puppet/puppet-bolt
インストール確認
bolt –version
これだけで準備完了。サーバー側には何も入れません。必要なのは、SSH鍵によるアクセス権限だけです。
3. Hello World: 100台のサーバーを一瞬で叩く
まずは、全サーバーのOSバージョンを確認してみましょう。`inventory.yaml`というファイルを作り、管理対象を定義します。
inventory.yaml
どのホストを管理するかを定義
nodes:
- name: web-server-01
- name: web-server-02
config:
transport: ssh
ssh:
user: admin
private-key: ~/.ssh/id_rsa
host-key-check: false # 初回接続の対話回避
この状態で、以下のコマンドを打ってみてください。
bolt command run ‘cat /etc/os-release | grep PRETTY_NAME’ –inventoryfile inventory.yaml
どうですか? 並列で全台にコマンドが飛び、結果が整理されて表示されたはずです。これがBoltの「アドホック実行」の基本です。
4. 裏技:既存のマニフェストを「エージェントレス」で流し込む
ここからが本題です。Boltの真骨頂は、Puppetの「型(Manifest)」を利用することにあります。例えば、nginxを確実にインストールし、設定を適用するタスクを書いてみましょう。
manifests/web_setup.pp
冪等性を担保する定義
package { ‘nginx’:
ensure => installed,
}
file { ‘/var/www/html/index.html’:
ensure => file,
content => ‘
Hello from Puppet Bolt!
‘,
mode => ‘0644’,
}
これをBolt経由で実行します。
bolt apply manifests/web_setup.pp –inventoryfile inventory.yaml
このコマンドの何が凄いのか?
1. 冪等性: 既にnginxが入っていれば、何もしません。無駄な処理を徹底的に排除します。
2. 宣言的記述: 「どうやってインストールするか(yum install…)」ではなく、「どうあるべきか(package: installed)」を記述するため、失敗が極めて少ない。
3. 並列実行: `bolt`はデフォルトで並列に処理を行うため、100台あっても数分で全サーバーが同じ状態になります。
5. 次のステップへ:現場で生き残るために
Boltを使いこなせるようになると、これまで「シェルスクリプトの塊」で運用していた作業の9割を、安全なPuppetコードに置き換えられます。
- Task(タスク): 頻繁に行う作業(ログローテーション、特定のサービス再起動)を、Pythonやシェルスクリプトで書いてBoltから実行する。
- Plan(プラン): 複数のタスクを組み合わせ、複雑なデプロイフロー(ロードバランサーから切り離す→デプロイ→疎通確認→戻す)を自動化する。
インフラエンジニアの仕事は、「手作業」を減らし、「設計」に時間を割くことです。Boltはそのための最も強力なツールの一つです。
まずは `inventory.yaml` を作り、怖がらずに `bolt command run` から始めてみてください。あなたのインフラ管理が、昨日とは全く違う景色に見えるはずですよ。
もし何か詰まったら、いつでも聞いてください。設計思想からトラブルシューティングまで、深いところまでお付き合いします。