【入門編】Puppet Hieraを活用した環境別設定管理!データとコードの分離テクニック – インフラ構成管理(IaC)活用バイブル

こんにちは。インフラの自動化という荒野を旅するエンジニアの皆さん。今日は、Puppetにおける「設定の分離」という、極めて重要かつ、マスターすればあなたの運用を劇的に楽にする聖域、「Hiera(ハイエラ)」についてお話しします。

多くの初心者が、「マニフェスト(コード)の中に環境ごとのIPアドレスやパスワードを直接書いてしまう」という罠に陥ります。これをやると、環境が増えるたびにコードをコピー&ペーストする地獄が待っています。

Hieraは、その地獄からあなたを救い出す「設定データの階層管理システム」です。さあ、コードとデータを切り離す、プロフェッショナルな設計への第一歩を踏み出しましょう。

—

1. なぜ「Hiera」を使うのか?(データとコードの分離)

Puppetの基本は「マニフェスト(`.pp`ファイル)」で状態を定義することですが、マニフェストに環境固有の値を直書きすると、コードの再利用性がゼロになります。

  • マニフェスト(コード): 「Nginxをインストールし、設定ファイルを配置する」という論理を書く。
  • Hiera(データ): 「本番環境ならポート80、テスト環境ならポート8080」という属性を書く。

この分離ができれば、同じコードで本番・検証・開発環境を制御できる「冪等性の高いインフラ」が完成します。

—

2. Hieraの心臓部:`hiera.yaml`の設定

Hieraの肝は「階層(Hierarchy)」です。どのファイルを優先的に読み込むかを、`hiera.yaml`で定義します。

`/etc/puppetlabs/puppet/hiera.yaml` の例:

version: 5
defaults:
datadir: data # データファイルは data ディレクトリ配下に置く
data_hash: yaml_data

hierarchy:

  • name: “Per-node data”

path: “nodes/%{trusted.certname}.yaml” # ノード固有の設定(最優先)

  • name: “Environment data”

path: “environments/%{::environment}.yaml” # 環境ごとの設定

  • name: “Common data”

path: “common.yaml” # 全環境共通の設定(最後に評価)

ポイント: 上から順に評価され、最初に見つかった値が採用されます。これが「優先順位」の仕組みです。

—

3. 環境別パラメータの定義

実際にデータを用意してみましょう。ディレクトリ構造はこうなります。

/etc/puppetlabs/puppet/data/
├── common.yaml # 全環境共通
├── environments/
│ ├── production.yaml # 本番用設定
│ └── development.yaml # 開発用設定

`environments/production.yaml` の中身:

—
本番用パラメータ
my_app::port: 80
my_app::max_connections: 1000

`environments/development.yaml` の中身:

—
開発用パラメータ
my_app::port: 8080
my_app::max_connections: 10

—

4. マニフェストからの呼び出し(Hieraの魔法)

いよいよコードからデータを呼び出します。ここでPuppetの「自動パラメータバインディング」という強力な機能を使います。

`/etc/puppetlabs/puppet/modules/my_app/manifests/init.pp`

class my_app (
Integer $port, # クラス引数として定義するだけ!
Integer $max_connections # Hieraが自動的に値を注入します
) {
# ここで自動的にHieraから値がロードされる
notify { “Setting up app on port: ${port}”: }

file { ‘/etc/my_app/config.conf’:
content => “PORT=${port}\nMAX_CONN=${max_connections}”,
}
}

凄みを感じてください。 `my_app`クラスの中に、`hiera.yaml`で定義された階層を検索し、一致する名前のキーを自動的に注入してくれるのです。`lookup()`関数を明示的に書く必要すらありません。

—

5. 動作確認:HelloWorldを極める

設定が正しいか、コマンドラインからデバッグするのがプロの流儀です。`puppet lookup` コマンドで、今のノードがどの値を見るか確認しましょう。

開発環境と仮定して値を引いてみる
puppet lookup my_app::port –environment development
出力: 8080

期待通りの値が返ってきましたか?これが確認できれば、あなたのインフラは「環境ごとに設定が最適化される、変更に強いシステム」へと進化しました。

先輩からのアドバイス

初心者のうちは、ついマニフェストに値を直書きしたくなります。しかし、「そのコード、環境が変わったら書き直す必要があるか?」と自分に問いかけてください。もし答えがYesなら、即座にHieraへ追い出すべきです。

Hieraは単なるデータ置き場ではありません。あなたのインフラを「定型作業の集まり」から「宣言的なコードの集合体」へと昇華させるための鍵なのです。

この設計をマスターすれば、サーバーが10台だろうと1000台だろうと、あなたは夜ぐっすり眠れるようになりますよ。さあ、次はどんなインフラを自動化しましょうか?

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