Puppet初心者向けチュートリアル:基本とDSL
⚡ スマートサマリー
Puppetは、サーバーのプロビジョニング、構成、および一貫性の維持を自動化するオープンソースの構成管理プラットフォームです。宣言型のドメイン固有言語を通じてインフラストラクチャをコードとして適用し、大規模なサーバー群における反復的な手動管理を置き換えます。

Puppetは、インフラストラクチャをコードとして定義し、大規模なサーバー群を一貫性のある再現可能な状態に維持できるオープンソースの構成管理ツールです。Puppetを学ぶ前に、まずは構成管理について理解しておきましょう。
構成管理とは
構成管理とは、ソフトウェアやコンピュータシステム(サーバー、ストレージ、ネットワークなど)を、既知の、望ましい、一貫性のある状態に維持するプロセスです。また、プロジェクト管理や監査の目的で、システム状態の正確な履歴記録へのアクセスも提供します。
システム管理者は、サーバーのインストールや設定など、反復的な作業を主に行います。こうした専門家は、スクリプトを作成することで、これらの作業を自動化できます。
しかし、大規模なインフラストラクチャを扱う場合、これは困難な作業となる。こうした問題を解決するために、Puppetなどの構成管理ツールが導入された。
パペットとは何ですか?
人形 Puppetは、構成管理プロセスを一元化および自動化するためのシステム管理ツールです。また、ソフトウェア展開ツールとしても使用されます。
これはオープンソースの構成管理ソフトウェアであり、組織のインフラストラクチャ全体にわたるサーバーの構成、管理、展開、およびさまざまなアプリケーションやサービスのオーケストレーションに広く使用されています。
Puppet は、Linux の構成を管理するために特別に設計されており、 Windows システム。 Ruby で書かれており、独自の機能を使用しています。 Dオマイン S特異的な Lシステム構成を記述する言語 (DSL)。
パペットのバージョンは何ですか?
Puppet には XNUMX つのバージョンがあります。
- オープンソースのパペットこれは、Puppet構成管理ツールの基本バージョンであり、オープンソース版Puppetとしても知られています。Puppetのウェブサイトから直接入手でき、Apache 2.0ライセンスの下で提供されています。
- Puppet Enterpriseコンプライアンスレポート、オーケストレーション、ロールベースのアクセス制御、GUI、API、コマンドラインツールなど、ノードを効果的に管理するための機能を提供する商用版。
パペットって何ができるの?
例えば、約100台のサーバーで構成されるインフラストラクチャがあるとします。システム管理者として、これらのサーバーすべてが常に最新の状態に保たれ、完全な機能を発揮して稼働していることを確認するのがあなたの役割です。

これを行うには、Puppet を使用できます。Puppet を使用すると、これらのサーバーに自動的にデプロイできるシンプルなコードを記述できます。これにより、人的労力が削減され、開発プロセスが迅速かつ効率的になります。

Puppet は次の機能を実行します。
- Puppet を使用すると、ホストごとに個別の構成を定義できます。
- このツールを使用すると、サーバーを継続的に監視して、必要な設定が存在し、変更されていないことを確認できます。設定が変更された場合、Puppet はホスト上で事前に定義された設定に戻します。
- また、設定されているすべてのシステムを制御できるため、一元的に変更を加えると、自動的にすべてのシステムに反映されます。
- また、ソフトウェアをシステムに自動的にデプロイするため、デプロイツールとしても使用されます。 インフラストラクチャはコードとして記述される。なぜなら、ポリシーと設定はコードとして記述されるからだ。
Puppet DSL とプログラミング パラダイム
Puppet DSLを学ぶ前に、プログラミングパラダイムについて理解しておきましょう。プログラミングパラダイムとは、コンピュータプログラミングにおいて用いるスタイルのことです。
パラダイムには次の XNUMX つのタイプがあります。
- 命令。
- 宣言的。
- 機能型(宣言型パラダイムのサブセットとみなされる)。
- オブジェクト指向。
命令型と宣言型のパラダイムに焦点を当てます。
命令的パラダイム
このプログラミングパラダイムは、計算の論理(何をすべきか)を表現すると同時に、その制御フロー(どのように行うか)も記述します。
例:
あなたがオフィスに向かうとしましょう。タクシーを予約し、オフィスに着くまで運転手に手順を一つずつ指示していきます。何をすべきか、どのようにすべきかを具体的に示すのは、命令型のコミュニケーションスタイルです。
宣言的パラダイム
このプログラミングパラダイムは、計算の論理(何をすべきか)を表現するものの、制御フロー(どのように行うか)については記述しません。
例:
あなたがオフィスに向かうとしましょう。Uberタクシーを予約し、最終目的地(オフィス)だけを指定します。何をするかは指定するが、どのようにするかは指定しないのは、宣言型スタイルです。
| パラダイム | 何をすべきか | 実行する方法 |
|---|---|---|
| 命令 | はい | はい |
| 宣言的 | はい | いいえ |
Puppet は宣言型プログラミング パラダイムを使用します
Puppet は宣言型プログラミング アプローチを使用します。
例: システムにユーザーを作成します。
シェルスクリプトを使用した命令型プログラミングパターンで実行できます。ここでは、ユーザーの作成方法と、使用するコマンドを指定します。 オペレーティングシステム.
しかし、宣言型プログラミングパターンを用い、わずか数行のPuppetコードとPuppetドメイン固有言語(DSL)だけで、同じ結果を得ることも可能です。
構成管理ツールの導入モデル
には XNUMX つの導入モデルがあります 構成管理ツール:
- プッシュベースの導入モデル: マスター ノードによって開始されます。
- プルベースの展開モデル: エージェントによって開始されます。
プッシュベースの導入モデル
この展開モデルでは、マスターサーバーが構成とソフトウェアを個々のエージェントにプッシュします。安全な接続を確認した後、マスターはエージェント上でリモートでコマンドを実行します。たとえば、 Ansible そしてソルトスタック。
プル型デプロイメントモデル
このデプロイメントモデルでは、個々のサーバーがマスターサーバーに接続し、安全な接続を確認して確立し、構成とソフトウェアをダウンロードし、それに応じて自身を構成します。たとえば、Puppet と Chef.
パペットはどのように機能しますか?
Puppetはプルデプロイメントモデルに基づいており、エージェントノードは定期的にチェックインします。 1800 数秒後、マスターノードと通信して、エージェントで更新が必要な項目がないかを確認します。更新が必要な場合、エージェントはマスターから必要なPuppetコードを取得し、必要なアクションを実行します。
マスターエージェント構成の例を用いて説明しましょう。
マスター
これは、PuppetマスターソフトウェアがインストールされたLinuxベースのマシンです。Puppetコードの形式で構成を管理する役割を担います。マスターノードはLinuxのみに対応しています。
エージェントたち
これらはPuppetによって管理される対象マシンであり、Puppetエージェントソフトウェアがインストールされています。
エージェントは、Linux などのサポートされているオペレーティングシステム上で構成できます。 Windows, SolarisまたはMac OS。
マスターとエージェント間の通信は、安全な証明書を介して確立されます。

マスターとエージェント間の通信
ステップ1) エージェントとマスター間の接続が確立されると、Puppetエージェントは自身の状態に関するデータをPuppetマスターサーバーに送信します。これらのデータは「ファクト」と呼ばれ、ホスト名、カーネルの詳細、IPアドレス、ファイル名の詳細などが含まれます。

ステップ2) Puppetマスターはこのデータを使用して、エージェントに適用する構成のリストを作成します。エージェントで実行されるこの構成のリストは、 カタログパッケージのインストール、アップグレードまたは削除、ファイルシステムの作成、ユーザーの作成または削除、サーバーの再起動、IP構成の変更などが含まれる可能性があります。
ステップ3) エージェントはこの構成リストを使用して、必要な構成変更をノードに適用します。
構成にずれがない場合、エージェントは構成変更を行わず、ノードを同じ構成で実行したままにします。

ステップ4) 処理が完了すると、ノードはPuppetマスターに、設定が適用され完了したことを報告します。
パペットブロック
Puppetは、Puppet APIを使用してレポートをサードパーティツールと統合できる柔軟性を提供します。
人形の組み立てブロックには、以下の4種類があります。
- 資料
- クラス
- マニフェスト
- モジュール
パペットのリソース
Puppetのリソースは、Puppetの構成要素です。
リソースとは、 組み込み関数 これらはバックエンドで実行され、Puppetで必要な操作を実行します。
人形教室
異なるリソースを組み合わせて、クラスと呼ばれる単一の単位にまとめることができる。
パペットマニフェスト
マニフェストとは、Puppet DSLファイルを含むディレクトリのことです。これらのファイルは拡張子が.ppで、これはPuppetプログラムを意味します。Puppetコードは、Puppetクラスの定義または宣言で構成されます。
パペットモジュール
モジュールとは、マニフェストやクラス定義などのファイルやディレクトリの集合体です。これらはPuppetにおける再利用可能で共有可能な単位です。
例えば、 MySQL モジュールをインストールして設定します MySQL Jenkins モジュール管理 Jenkins.

Puppet リソースの種類
一般的に、システムはファイル、ユーザー、サービス、プロセス、パッケージなどで構成されます。Puppetでは、これらはリソースと呼ばれ、Puppetの基本的な構成要素です。
Puppetエージェントに対するすべての操作は、Puppetリソースの助けを借りて実行されます。
Puppetリソースは、サポートされているあらゆるプラットフォーム上で様々なタスクや操作を実行するために使用される既製のツールです。単一のPuppetリソースを使用して特定のタスクを実行することも、複数のPuppetリソースを組み合わせて複雑なアプリケーション構成のデプロイを実行することもできます。
リソースにはさまざまなタイプを含めることができます。 人形の使い方 リソース (NAIST) と リソースタイプ システムの構成を説明するため。
リソース タイプには次の XNUMX 種類があります。
- Puppet コアまたは組み込みリソース タイプ。
- Puppet で定義されたリソースタイプ。
- Puppet のカスタム リソース タイプ。
Puppet コアまたは組み込みリソース タイプ
コアリソースタイプまたは組み込みリソースタイプとは、Puppetソフトウェアに同梱されている、あらかじめ構築されたPuppetリソースタイプのことです。コアリソースタイプまたは組み込みリソースタイプはすべて、Puppetチームによって作成および保守されています。
Puppet で定義されたリソースタイプ
定義済みリソースタイプとは、既存のリソースタイプを組み合わせてPuppetの宣言型言語で記述された軽量なリソースタイプのことです。
Puppet のカスタム リソース タイプ
カスタム リソース タイプは、Ruby で記述された完全にカスタマイズされたリソース タイプです。
Puppetのリソースタイプについて、さらに詳しく見ていきましょう。
ターミナルで、以下のコマンドを入力して、Puppet関連のサブコマンドの一覧を表示します。
Puppet --help
私たちの場合、サブコマンドに興味があります。リソースを追加する。これは、組み込みの Puppet リソース タイプに関する情報を見つけるために使用します。
ターミナルで、以下のコマンドのいずれかを入力して、 行動 Puppet サブコマンドに関連付けられています。リソースを追加する。"
Puppet help resource Puppet resource --help
この場合、 リソースを追加する。 サブコマンドとして、 -種類 アクションとして。
Puppet には 49 の組み込みコア リソース タイプがあります。
ターミナルで、以下のコマンドを入力して、利用可能な組み込みの Puppet リソースタイプの一覧を表示します。
puppet resource –types
各タイプは次のリストをサポートします。 属性。 これらの属性は、Puppet がリソースを管理するために使用する詳細な説明を提供します。
Puppetリソースタイプに関連付けられているすべての属性を確認するには、次のコマンドを使用します。
puppet describe <resource type name>
パラメータには、そのリソースタイプで使用可能なすべての属性が表示されます。
パペット記述パッケージ
初心者にとって、管理されていない多数の Puppet コード ファイルを理解し、関連付けるのは難しい。ここでグループが必要になる。ping 複数の操作を連携させること。目的は、サーバー上でのSSH設定、NTPサービスの設定、あるいはWebサーバーやデータベースサーバーをゼロから構築するなど、必要なすべての操作をまとめて解決するといった、単一の問題を解決することです。
パペットクラスとは何ですか?
Puppetクラスは、Puppetリソースを単一の単位としてまとめたものです。
Puppet は、構造を再利用可能で整理できるようにするクラスを導入しました。
まず、クラス定義構文を使用してクラスを定義する必要があります。クラスは一意である必要があり、同じ名前で宣言できるのは一度だけです。
class <class-name> {
<Resource declarations>
}
例:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
これまでのところ、クラスを定義しただけで、どこにも使用していません。つまり、このクラスを別の場所で宣言しない限り、私たちが書いたコードは決して実行されません。
クラス宣言
コード内で定義済みのクラスを使用するには、 include キーワード。
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
現実世界のシナリオを通して、これを理解してみましょう。
NTP のデモインストール
まず、NTPパッケージがサーバーに既に存在しないことを確認してください。NTPパッケージがサーバーに存在しない場合、以下のコマンドは何も返しません。
rpm -qa | grep -i ntp
ご覧のとおり、NTPパッケージは既にサーバー上に存在しています。既存のNTPパッケージを削除しましょう。
yum remove ntp
パッケージを削除した後、ntp.conf ファイルが存在しなくなっていることを確認してください。
ls -lrt /etc/ntp.conf
以下のコマンドを実行して、ntpサービスが存在しないことを確認してください。
systemctl status ntp
新しい .pp ファイルを作成してコードを保存します。 コマンドラインから:
vi demontp.pp
キーボードの「i」キーを押して挿入モードに切り替えます。
新しいファイルを作成するには、次のコードを入力します。
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
編集が終わったら、Escキーを押してください。
ファイルを保存するには、:wq! を押してください。
次のステップは、ある PowerSchoolで、緊急連絡先情報を定期的にチェックし、 コードに構文エラーがあるかどうかを確認します。次のコマンドを実行します。
puppet parser validate demontp.pp
切り替えたことを確認してください ルート ユーザーがエラーなくテストを完了できるようにするには、次のコマンドを実行してください。
su root
ホイール試乗 コード作成プロセスの次のステップです。スモーク テストを実行するには、次のコマンドを実行します。
Puppet applies demontp.pp --noop
最後のステップは ラン 実モードでパペットを実行し、出力結果を確認してください。
puppet apply demontp.pp
Puppet は何も実行しませんでした。デモ クラスは単に 定義済みの はなく、 宣言された.
つまり、Puppetクラスを宣言するまでは、コードは適用されません。
私たちにお知らせ 宣言する 同じコード内のデモクラスを使用して クラス名を含める コードの最後に:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
# Class Declaration
include ntpconfig
繰り返しになりますが、 PowerSchoolで、緊急連絡先情報を定期的にチェックし、 コードに構文エラーがあるかどうかを確認します。次のコマンドを実行します。
puppet parser validate demontp.pp
切り替えたことを確認してください ルート ユーザーがエラーなくテストを完了できるようにするには、次のコマンドを実行してください。
su root
テスト コード作成プロセスの次のステップです。スモーク テストを実行するには、次のコマンドを実行します。
Puppet apply demontp.pp --noop
最後のステップは ラン 実モードでパペットを実行し、出力結果を確認してください。
puppet apply demontp.pp
今回は、クラスが定義され、その後宣言されたため、コードが適用されます。
ntp.confファイルが存在することを確認してください。
ls -lrt /etc/ntp.conf
以下のコマンドを実行して、ntpサービスが起動していることを確認してください。
systemctl status ntpd











