【入門編】Puppet Code ManagerとWebhookを活用した完全自動デプロイメント環境の構築手順 – インフラ構成管理(IaC)活用バイブル

こんにちは!インフラエンジニアの皆さん、日々の環境構築やコード管理、お疲れ様です。

「Gitにコードをプッシュしたのに、本番のPuppetサーバー側でわざわざ手動ログインして `puppet-code deploy` を叩いている……」
そんな前時代的な作業に、そろそろお別れを告げませんか?

今回は、Puppet Code ManagerとGit Webhookを組み合わせて、コードのプッシュをトリガーにした「完全自動デプロイメント環境」の構築手順を徹底解説します。

これをマスターすれば、面倒な手動同期の手間が一切なくなり、開発体験が劇的に向上しますよ。初心者の方でも迷わないよう、ツールの役割から実際のトラブルシューティングまで、一歩一歩優しく丁寧にガイドしていきますね。

—

1. そもそも「Puppet Code Manager」とは何か?

まずは、今回主役となるツールの本質を整理しておきましょう。

Puppetでインフラをコード管理(IaC)する際、複数のモジュールや環境(Production, Developmentなど)を管理するためにr10kというツールが使われます。Code Managerは、このr10kの機能をさらに発展させ、Puppet Serverに組み込んだ「エンタープライズ向けの自動デプロイエンジン」です。

従来の課題とCode Managerの解決策

  • 従来(手動・cron):

開発者がGitにプッシュ ➔ 誰かがサーバーにSSHログインしてコマンド実行、あるいはcronで定期実行(これだと反映にタイムラグがある)。

  • Code Manager(Webhook駆動):

開発者がGitにプッシュ ➔ GitHub/GitLabがWebhookでPuppet Serverに通知 ➔ 数秒で自動的に環境が同期される!

この仕組みを作ってしまえば、「コードを書いたら即座にステージングや本番へ反映される」というモダンなCI/CDパイプラインの第一歩が完成します。

—

2. 全体像の把握:何を設定するのか?

今回構築するアーキテクチャの全体像は以下の通りです。

1. Gitリポジトリ(GitHubやGitLab等): 制御用コード(Control Repo)を保管。
2. Webhook: `git push` を検知してPuppet ServerへHTTPリクエストを送信。
3. Puppet Server (Code Manager): リクエストを受け取り、自動でモジュールのダウンロードや環境構築を実行。

それでは、さっそく手を動かしていきましょう!

—

3. 基礎セットアップ:Code Managerの有効化

まずはPuppet Server側で、Code Managerが動くように基盤を整えます。

ステップ1: 認証用のトークン(Token)の準備

Code Managerは外部からのHTTPリクエストを受け付けるため、セキュアな認証が必須です。Puppetの認証局(CA)を利用して、デプロイ用のトークンを発行するユーザー(例: `deployuser`)を作成します。

Puppet ServerにSSHでログインし、以下のコマンドを実行してください。

RBAC(Role-Based Access Control)でデプロイ用ユーザーを作成
puppet-access login –username <管理者ユーザー> –password <パスワード>

ステップ2: `puppet.conf` の設定

`/etc/puppetlabs/puppet/puppet.conf` を開き、メインセクションにCode Managerを有効化する設定を追記します。

[main]
Code Managerを有効化
certname = puppet.example.com
server = puppet.example.com

[agent]
エージェント設定(省略)

[server]
Code Managerの設定を有効にする
codedir = /etc/puppetlabs/code

ステップ3: `code-manager.yaml` の設定

`/etc/puppetlabs/puppetserver/services.d/code-manager.yaml`(または `conf.d/code-manager.conf` ※環境により異なります)を設定し、GitリポジトリのURLや認証情報を紐付けます。

/etc/puppetlabs/puppetserver/conf.d/code-manager.conf
code-manager: {
# GitのコントロールリポジトリのURLを指定
sources: {
puppet: {
remote: “git@github.com:your-organization/puppet-control-repo.git”,
# デプロイ時に使用するSSH秘密鍵のパス
privkey: “/etc/puppetlabs/puppetserver/ssh/id_rsa”
}
}
}

設定が終わったら、Puppet Serverを再起動して設定を反映させます。

sudo systemctl restart puppetserver

—

4. Webhookの設定:GitとPuppetを繋ぐ

ここが肝心要のパートです。GitHubを例に、プッシュをトリガーする設定を行います。

ステップ1: Webhookのエンドポイント確認

Puppet ServerのCode Managerは、デフォルトで以下のポート(8170)とエンドポイントでリクエストを待ち受けます。

  • URL: `https://:8170/code-manager/v1/webhook`
  • 認証: トークン認証(Bearerトークン)

ステップ2: GitHubリポジトリでの設定

1. 対象のGitHubリポジトリを開き、「Settings」 > 「Webhooks」 > 「Add webhook」 へ進みます。
2. Payload URL: `https://puppet.example.com:8170/code-manager/v1/webhook?type=github`
3. Content type: `application/json`
4. Secret: 任意のセキュアな文字列(Puppet側で検証する場合に設定)
5. Which events would you like to trigger this webhook?: 「Just the push event」を選択。
6. 「Add webhook」をクリック!

これで、Gitにコードがプッシュされるたびに、GitHubからPuppet Serverへ「デプロイして!」という合図が飛ぶようになります。

—

5. 精度高い「Hello World」的動作確認

仕組みができたので、実際に正しく動くかテストしてみましょう。これが成功した時の「おっ、動いた!」という瞬間が、インフラエンジニアとして一番ワクワクする時です。

1. テスト用ブランチの作成とプッシュ

お手元のコントロールリポジトリで、適当な変更を加えます。例えば、`manifests/site.pp` にテスト用の記述を追加してみましょう。

manifests/site.pp
node ‘default’ {
notify { ‘Hello, Puppet Code Manager!’: }
}

変更をコミットして、GitHubの `production` ブランチ(またはメインブランチ)にプッシュします。

git add manifests/site.pp
git commit -m “Test: Hello World for Code Manager”
git push origin production

2. ログの確認

Puppet Server側でリアルタイムにログを監視しておきます。

sudo tail -f /var/log/puppetlabs/puppetserver/puppetserver.log

プッシュした瞬間に、次のようなログが流れてくれば大成功です!

2023-10-25 10:00:00,000 INFO [code-manager] Deploying environment production
2023-10-25 10:00:02,123 INFO [code-manager] Finished deploying environment production

手動で `puppet-code deploy` を叩く必要はもうありません。コードをプッシュするだけで、数秒以内にサーバー上のモジュールが自動更新されます!

—

6. 現場で役立つ!よくあるトラブルシューティング

最後に、現場で確実に直面する「ハマりどころ」と、その華麗な解決策をシェアします。これを覚えておけばトラブルも怖くありません。

トラブル1: SSL証明書の検証エラー(Self-signed cert errors)

  • 症状: Webhookからのリクエストに対して、Puppet Serverが `SSL_connect returned=1 errno=0 state=error: certificate verify failed` のようなエラーを吐く。
  • 原因: 自己署名証明書(オレオレ証明書)を使っている場合、GitHubからのリクエストや、内部の通信で証明書検証に失敗します。
  • 対策:

Code Managerの設定ファイルで、一時的に、あるいは適切にCA証明書を信頼させます。テスト環境であれば、Webhook送信側(GitHub等)でSSL検証をスキップする設定にするか、PuppetのCA証明書を正しくクライアント側にインポートしてください。

トラブル2: 同時実行制御(Concurrency Control)の競合

  • 症状: 複数人が同時に別々のブランチをプッシュした際、デプロイが途中で失敗したり、ロックファイルが残って次が進まなくなる。
  • 原因: Code Managerはデフォルトでデプロイの排他制御(ロック)を行います。同時に複数のリクエストが来ると、後続の処理が弾かれます。
  • 対策:

`code-manager.yaml` 内で `deploy-threads` などのパラメータを調整し、適切な並列処理数を持たせます。また、CI/CDパイプラインを挟んでいる場合は、短時間に連続してプッシュされないようデバウンス(遅延)を入れるのも有効です。

—

まとめ

いかがでしたでしょうか?
今回は、Puppet Code ManagerとWebhookを駆使した完全自動デプロイメント環境の構築手順を解説しました。

  • Code Managerを導入すれば、手動での同期作業から完全に解放される。
  • Git Webhookを設定することで、プッシュをトリガーにした秒速デプロイが実現する。
  • 認証やSSL、排他制御のポイントを押さえれば、現場の運用に耐えうる堅牢な基盤になる。

これをマスターすれば、毎日のインフラ運用作業が劇的に楽になりますよ。ぜひ、あなたの環境でも試してみてくださいね。

それでは、快適なIaCライフを!

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