【入門編】Puppetを活用したクラウド(AWS/GCP)サーバーの自動プロトタイピング手法 – インフラ構成管理(IaC)活用バイブル

インフラの世界へようこそ。私はこれまで数多のサーバー群と対峙してきましたが、規模が大きくなればなるほど「手作業」は最大の敵になります。

「1台なら設定できるが、100台になると絶望する」。これを解決するのがPuppetです。今日は、クラウド環境(AWS/GCP)でPuppetを使い、サーバーを「コードで定義して、自動で育てる」究極のプロトタイピング手法を伝授します。

—

1. なぜ、いまさらPuppetなのか?

Terraformが「インフラの土台(箱)」を作るのが得意なら、Puppetは「箱の中身(OS設定やミドルウェア)」を厳密に管理するスペシャリストです。

Puppetの真髄は「宣言的アプローチ」にあります。「こうなっていてほしい」という状態をコード(Puppet DSL)で書けば、Puppetが勝手に今の状態を調べ、足りないものを補い、余計なものを消してくれます。これが冪等性(べきとうせい)です。何度実行しても結果が同じになる安心感。これこそがSREの礎です。

—

2. Cloud-Initによる「魔法のブートストラップ」

クラウド環境では、インスタンスが起動した瞬間に自動でPuppetをインストールし、マスターサーバーへ参加させるのが鉄則です。これを実現するのがUserData(Cloud-Init)です。

以下のスクリプトを、インスタンス起動時のUserDataに埋め込みます。

!/bin/bash
Puppet Agentのインストールと自動登録スクリプト

1. リポジトリの追加(例: Ubuntuの場合)
wget https://apt.puppet.com/puppet7-release-focal.deb
dpkg -i puppet7-release-focal.deb
apt-get update

2. Agentのインストール
apt-get install -y puppet-agent

3. マスターサーバーの指定と自動署名設定
echo “[main]
server = puppet.your-domain.com
runinterval = 30m” >> /etc/puppetlabs/puppet/puppet.conf

4. サービス起動と有効化
/opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

これで、インスタンスは起動した瞬間にPuppetの一員として迎え入れられます。

—

3. Auto Scaling環境でのライフサイクル管理

Auto Scalingでサーバーが増減するたびに、手動で証明書を承認していられませんよね? ここで「autosign」の出番です。

Puppetマスター側で、特定のパターンに一致するノードの証明書を自動承認するように設定します。

/etc/puppetlabs/puppet/autosign.conf
.ec2.internal
.c.project-id.internal

こうすることで、スケールアウトしてきたノードは、自動的に設定をプルし、数分後には完璧な設定で稼働を開始します。スケールインで削除される際は、Puppetマスター側のノード情報を削除するAPI(`puppet node purge`)を、ライフサイクルフックと組み合わせるのがプロの技です。

—

4. HelloWorld: 初めての「設定コード」を書いてみよう

Puppetの良さを実感するために、まずは「Nginxをインストールして、特定のHTMLを置く」というHelloWorldを行いましょう。

`site.pp`(マスター側のメインマニフェスト)にこう書きます。

ノードごとの定義
node default {
# Nginxパッケージのインストールを保証
package { ‘nginx’:
ensure => installed,
}

# 設定ファイルの定義
file { ‘/var/www/html/index.html’:
ensure => file,
content => “

Hello, Puppet World!

“,
mode => ‘0644’,
}

# サービスの稼働を保証
service { ‘nginx’:
ensure => running,
enable => true,
require => Package[‘nginx’], # パッケージが入ってからサービス起動
}
}

このコードを保存して、Agent側で `puppet agent -t` を実行してみてください。瞬時にNginxが立ち上がり、Webページが更新されます。何度叩いてもNginxが壊れることはありません。

—

5. SRE現場で生き残るためのベストプラクティス

最後に、現場で震えるほど重要になる「心得」を3つだけ伝授します。

1. Hieraを活用せよ: 設定値(IPアドレスや環境変数)をコード内にハードコーディングしてはいけません。`Hiera`というキーバリューストアを使い、環境(開発・本番)ごとに設定を分離してください。
2. モジュール化の徹底: すべてを1つのファイルに書くのは素人です。`puppet module generate` を使い、Apache、Nginx、MySQLなど、機能単位で部品(モジュール)を作りましょう。
3. テスト駆動開発: `puppet-lint` や `rspec-puppet` をCIパイプラインに組み込んでください。コードの構文エラーで本番サーバーが全滅するようなミスは、テストで100%防げます。

—

最後に:自動化は「愛」です

Puppetを導入するということは、サーバーを手作業の苦役から解放してあげるということです。最初は難しく感じるかもしれませんが、一度この「宣言的な世界」を知ってしまえば、もう二度と手動で `apt-get` を叩く日々には戻れません。

さあ、あなたのインフラを「コード」という名の設計図で支配しましょう。何か詰まったら、いつでも聞きに来てください。応援していますよ。

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