【実務・中級編】Puppet Boltを使ったエージェントレス構成でのアドホックなサーバー管理術 – インフラ構成管理(IaC)活用バイブル

Puppet Bolt:エージェントレスで解き放つ、モダンIaCの「機動力」

インフラエンジニアの諸君、まだ全サーバーにPuppet Agentを常駐させ、カタログのコンパイルを待ちわびているのか?

大規模環境での構成管理において、Puppetは最強の武器だが、エージェント型は時に足枷となる。デプロイ直前の緊急パッチ適用、あるいは数十台の検証サーバーへの一時的な設定変更。これらにおいて、エージェントのポーリング間隔や証明書の更新に悩まされるのは過去の遺物だ。

今日は、Puppet Boltを使って、既存のPuppet資産を一切捨てずに「即時・並列・エージェントレス」なアドホック管理を実現する、現場の最前線で磨き上げた知見を共有する。

—

1. なぜ今、Puppet Boltなのか?

Boltの本質は「SSH/WinRMを通じた純粋な実行エンジン」だ。PuppetのDSL(Manifest)資産をそのまま再利用しつつ、エージェントレスという「軽さ」を手に入れる。

導入の「神」設定:`.bolt.yaml`

プロジェクトのルートに以下の設定を置くことで、チーム間の環境差異を撲滅せよ。

.bolt.yaml – チーム開発の標準化ルール
inventoryfile: inventory.yaml
SSH接続時のタイムアウトを短縮し、反応速度を上げる
ssh:
host-key-check: false # 社内LANなら許容範囲、必要に応じてstrictに
connect-timeout: 5
実行結果をJSONで出力させ、後続のCI/CDパイプラインと連携させる
format: json

—

2. 実践:既存マニフェストを「エージェントレス」で流し込む裏技

Boltの真骨頂は、`puppet apply`をリモートへ「転送して実行」する機能にある。既存のクラスを特定のノードにだけ適用したい? ならばこう書け。

コマンド例:

既存のPuppetモジュールを直接対象ノードに適用する
bolt apply -t web_servers -e “include role::web_server”

これだけで、対象ノードへ必要なモジュールが一時的に転送され、適用される。エージェントが「設定をプルする」のを待つ必要はない。PUSH型で制御する、これがスピードの正体だ。

—

3. 現場を救う「タスク並列実行」の極意

数十台のサーバーに対して、一気に設定を流し込む際、デフォルト設定のままでは「直列処理」による地獄の待ち時間が発生する。`–concurrency`を制する者が時間を制する。

100台のサーバーに並行してセキュリティアップデートを流し込む
bolt task run package::update action=upgrade –targets web_nodes –concurrency 20

プロの小技:
`.bolt.yaml`やコマンドライン引数で並列数を調整する際、ターゲットのスペックとネットワーク帯域を考慮せよ。I/O負荷が高いタスクなら `10` 前後、単なる設定変更なら `50` 以上でもSSHは耐える。

—

4. チーム開発の生産性を底上げする「神プラグイン」と設定

VS Code用「Puppet Extension」を使い倒せ

Puppetの公式拡張を入れるだけでは甘い。`bolt`コマンドと統合し、以下の設定を`.vscode/settings.json`に追記せよ。

{
“puppet.editorService.enabled”: true,
“puppet.lint.enabled”: true,
// 保存時にマニフェストの構文チェックを自動実行させる
“editor.codeActionsOnSave”: {
“source.fixAll”: true
}
}

隠れたキーボードショートカット(Bolt運用)

ターミナルでの作業効率を極限まで高めるには、`history`の検索(`Ctrl+R`)に加え、Boltのコマンドをエイリアス化して `fzf` と組み合わせよ。

.zshrc に記述するエイリアスの例
alias br=’bolt task run’
alias ba=’bolt apply’
ターゲットを動的に選択してBoltを実行する魔法
alias bselect=’bolt task run uptime –targets $(bolt inventory show | fzf)’

—

5. ベストプラクティス:構成管理の「疎結合化」

大規模チームで最も避けるべきは、巨大なモノリスなインベントリファイルだ。以下のディレクトリ構成が、拡張性を維持する唯一の正解である。

.
├── inventory.yaml # 環境ごとの接続情報
├── modules/ # 公開/自作モジュール
├── tasks/ # Bolt専用のJSONベースタスク
└── plans/ # 複数のタスクを連結するオーケストレーション

JSONタスクの書き方(ベストプラクティス):
シェルスクリプトをベタ書きするのではなく、メタデータで型を定義せよ。

// tasks/deploy.json
{
“puppet”: “task”,
“description”: “アプリのデプロイを実行する”,
“parameters”: {
“version”: { “type”: “String”, “description”: “デプロイするバージョン” }
}
}

—

最後に:SREとして生き残るために

Puppet Boltは、単なるPuppetの補助ツールではない。「宣言的な構成管理」と「命令的なスピード」を両立させるためのブリッジだ。

エージェントを入れられないレガシーな資産、あるいはクラウド上の使い捨てインスタンス。これらを「管理対象外」として放置するのではなく、Boltというツールを使って「今すぐ・確実に・自動で」制御下に置く。

道具は使い手を選ぶのではない。使い手が道具の限界を押し広げるのだ。
今日から、あなたのインフラを「待たせない構成管理」へと進化させろ。健闘を祈る。

タイトルとURLをコピーしました