【入門編】Puppet Module(モジュール)の作り方と公開・再利用のベストプラクティス – インフラ構成管理(IaC)活用バイブル

世の中には「設定管理」を単なる作業の自動化だと思っている人が多い。だが、SREの現場においてPuppetは、「システムの理想状態(Desired State)を定義し、何度実行しても同じ結果を保証する」という、冪等性(Idempotence)を体現する最強の言語だ。

今日は、混沌としたサーバー設定を秩序立てる「Puppetモジュール」の作り方から、世界中に共有するまでの道のりを、現場の最前線から伝授しよう。これをマスターすれば、君のサーバーは「壊れない機械」へと進化する。

—

1. Puppetモジュール:それは「再利用可能なインフラの部品」だ

Puppetモジュールは、特定の機能(例:Nginxの設定、ユーザー管理)をカプセル化したパッケージだ。場当たり的なシェルスクリプトを卒業し、モジュール化することで、コードは「資産」になる。

標準ディレクトリ構造(ここが作法の基本)

Puppetには「こう書けば動く」という暗黙の了解(Convention over Configuration)がある。まずはこの構造を指に覚え込ませよう。

my_module/
├── manifests/ # 実際の処理を書く場所
│ └── init.pp # モジュールの入り口
├── templates/ # 動的な設定ファイル(ERB)
├── files/ # 静的な配布ファイル
├── metadata.json # モジュールのメタデータ
└── README.md # 魂のこもったドキュメント

—

2. metadata.json:君のモジュールの「パスポート」

`metadata.json` がないと、そのモジュールは誰にも認識されない。依存関係や作者情報を明記することで、Puppetのエコシステムの一部になれる。

{
“name”: “myname-webserver”,
“version”: “1.0.0”,
“author”: “Your Name”,
“license”: “Apache-2.0”,
“dependencies”: [
{ “name”: “puppetlabs-stdlib”, “version_requirement”: “>= 4.0.0” }
]
}

  • ここが重要: `dependencies` を適切に記述すること。他の便利なモジュールを「部品」として活用することで、君は車輪の再発明を避けることができる。

—

3. HelloWorld:Nginxを秒速で構築する

まずは、最もシンプルな「Nginxをインストールして起動する」コードを書こう。`manifests/init.pp` に以下の魔法を書き込む。

class webserver {
# 1. パッケージがインストールされていることを保証
package { ‘nginx’:
ensure => installed,
}

# 2. 設定ファイルが正しく配置されていることを保証
file { ‘/var/www/html/index.html’:
ensure => file,
content => “

Hello from Puppet!

“,
}

# 3. サービスが常に実行中であることを保証
service { ‘nginx’:
ensure => running,
enable => true,
}
}

なぜこれが凄いのか?
もし誰かが手動でNginxを停止しても、Puppetを再実行すれば即座に起動状態に戻る。これが冪等性だ。君は「手順」ではなく「状態」を記述しているのだ。

ローカルテストの極意:`puppet-lint` と `rspec-puppet`

現場では「動く」だけでは不十分だ。

  • `puppet-lint` を使ってコードの品質を担保せよ。
  • `rspec-puppet` を使って、実際にサーバーを立てる前にコードが正しいかをテストせよ。これがSREとしての最低限のたしなみだ。

—

4. Puppet Forgeへの公開:世界中のエンジニアと共有する

君が作った素晴らしいモジュールは、自分だけのものにしておくには惜しい。`Puppet Forge` は、世界中のエンジニアがインフラコードを共有するGitHubのような場所だ。

1. アカウント作成: [Puppet Forge](https://forge.puppet.com/) でアカウントを作成。
2. パッケージ化: 以下のコマンドでモジュールを圧縮する。

puppet module build

3. アップロード: 生成された `.tar.gz` ファイルをForgeの管理画面からアップロードする。

これで、君のコードは世界中の誰かのインフラを支える「部品」になる。

—

先輩エンジニアからの最後のアドバイス

初心者のうちは、「自分の環境で動けばいい」と考えがちだ。だが、「他人が使ったときにどう見えるか」「半年後の自分が読んだときに理解できるか」を意識してコードを書け。

  • ハードコーディングを避ける: パラメータ化クラス(`params.pp`)を使い、設定を外部から注入できるようにせよ。
  • READMEを書き込め: 「どう使うか」「どのOSをサポートしているか」をREADMEに書かないモジュールは、存在しないのと同じだ。

インフラをコード化する快感を知れば、君の作業効率は劇的に変わる。さあ、まずはこのHelloWorldから始めて、君だけの「理想のインフラ」をコードで描き出そうじゃないか。応援しているぞ。

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