Started前書き簡単に言えば、サーバー構成管理(一般的にITオートメーションとも呼ばれます)は、インフラストラクチャ管理をコードベースに変換するソリューションであり、バージョン管理および再利用が容易なプロビジョニングスクリプトのセットでサーバーを展開するために必要なすべてのプロセスを記述します。サーバーインフラストラクチャの整合性を長期にわたって大幅に改善できます。[前のガイド]で、サーバーインフラストラクチャの構成管理戦略を実装する主な利点、構成管理の方法について説明しましたツールが機能し、これらのツールに通常共通するもの。シリーズのこのパートでは、マスターサーバーを使用してノードの構成を調整し、複雑なインフラストラクチャを透過的に管理できる一般的な構成管理ツールであるPuppetを使用してサーバープロビジョニングを自動化するプロセスについて説明します。Webサーバーの展開を完全に自動化するための簡単な例を作成するために必要な言語用語、構文、および機能に焦点を当てます。これは、目標を達成するために自動化する必要がある手順のリストです。index.html`ファイルを配置しますテンプレートを適用して、カスタム仮想ホストをセットアップしますApacheを再起動しますまず、Puppetで使用される用語を見てから、マニフェストの作成に使用できる主要な言語機能の概要を説明します。このガイドの最後で、完全な例を共有するので、自分で試してみることができます。入門Puppetのより実践的なビューに移る前に、このツールで導入された重要な用語と概念を理解することが重要です。Agentノード*:Puppetマスターによって制御されるノードマニフェスト:実行される命令セットを含むファイルリソース:システムの要素とその状態の変更方法を宣言するコードの一部。パッケージをインストールするには、_package_リソースを定義し、その状態が「インストール済み」に設定されていることを確認する必要がありますモジュール:プロビジョニングの一部の共有と再利用を促進するために、事前に定義された方法で編成されたマニフェストと他の関連ファイルのコレクションクラス:通常のプログラミング言語と同様に、クラスはPuppetで使用され、プロビジョニングをより適切に編成し、コードの一部を再利用しやすくします事実:ネットワークインターフェイスやオペレーティングシステムなど、システムに関する情報を含むグローバル変数サービス:サービスの再起動や停止など、サービスのステータスの変更をトリガーするために使用されますPuppetプロビジョニングは、Rubyに基づくカスタムDSL(ドメイン固有言語)を使用して記述されています。*を宣言することにより定義されます。リソースは、パッケージ、ファイル、サービス、ユーザー、およびコマンドを表すことができます。それらは、宣言されたリソースの状態が現在システム上にあるものと異なる場合にシステムの変更をトリガーする状態を持っているかもしれません。+」に設定された_package_リソースは、パッケージが以前にインストールされていなかった場合、システム上でパッケージのインストールをトリガーします。+`リソースを宣言することにより、任意のコマンドを実行できます。update」部分は実際のコマンド宣言ではなく、この一意のリソースの識別子であることに注意してください。多くの場合、リソース内から他のリソースを参照する必要があり、そのためにそれらの識別子を使用します。update」ですが、他の文字列でもかまいません。リソース依存マニフェストを作成する場合、Puppetは定義された順序でリソースを評価しないことに注意してください。これは、Puppetを使い始めた人にとって一般的な混乱の原因です。リソースは相互の依存関係を明示的に定義する必要があります。しないと、どのリソースが最初に評価され、結果として実行されるかが保証されません。+`オプションは、パラメーターとして別のリソースへの参照を受け取ります。python-software-properties`として識別されるpackageリソースを参照しています。+`などを使用することに注意することが重要です。次に、タスクが別のタスクの前に実行されることを確認する必要があるとしましょう。以下に、2つのタスクを実行する簡単なプレイブックの例を示します。+」をインストールします。update']}このガイドが終了する前に、マニフェストのより実際の例を詳細に説明します。次のセクションでは、Puppetマニフェストの作成に使用できる最も重要な要素と機能の概要を説明します。変数は、マニフェストの任意の時点で定義できます。変数の最も一般的なタイプは文字列と文字列の配列ですが、ブール値やハッシュなどの他のタイプもサポートされています。次の例では、後でリソース内で使用される文字列変数を定義しています。"installed"}ループを使用するループは通常、異なる入力値を使用してタスクを繰り返すために使用されます。10個の異なるパッケージをインストールするための10個のタスクを作成する代わりに、単一のタスクを作成し、ループを使用して、インストールするすべての異なるパッケージでタスクを繰り返すことができます。Puppetで異なる値を使用してタスクを繰り返す最も簡単な方法は、次の例のように配列を使用することです。"installed"}バージョン4以降、Puppetはタスクを反復処理するための追加の方法をサポートしています。+`イテレータを使用します。このオプションは、リソース定義をループするための柔軟性を提供します。}}条件を使用する条件を使用して、たとえば変数またはコマンドからの出力に基づいて、コードのブロックを実行するかどうかを動的に決定できます。`ステートメントなど、従来のプログラミング言語で見つけることができるほとんどの条件構造をサポートしています。+`などの一部のリソースは、条件付きのように機能する属性をサポートしますが、条件としてコマンド出力のみを受け入れます。_fact_に基づいてコマンドを実行するとします。+`のようなサポートされている条件構造のいずれかを使用する必要があります。}}別の一般的な状況は、別のコマンドからの出力に基づいてコマンドの実行を条件付ける場合です。+`からの出力が成功した場合にのみ実行されます。+」は常にコマンドを実行します。php"}テンプレートの使用テンプレートは通常、構成ファイルをセットアップするために使用され、変数やその他の機能を使用して、これらのファイルをより汎用的で再利用可能にすることを目的としています。EPP形式は、Puppetの最新バージョン(バージョン4.0以降)でのみ機能します。以下は、このホストのドキュメントルートを設定する変数を使用して、Apache仮想ホストを設定するためのERBテンプレートの例です。file`リソースを作成する必要があります。これは、このテンプレートを適用してデフォルトのApache仮想ホストを置き換える方法です。template("apache/vhost.erb")}Puppetは、組織とモジュール性を強化するために、ローカルファイルを扱う際にいくつかの仮定を行います。+`テンプレートファイルを探します。サービスの定義とトリガーサービスリソースは、サービスが初期化および有効化されていることを確認するために使用されます。サービスの再起動をトリガーするためにも使用されます。Apache仮想ホストを設定する以前のテンプレートの使用例を考慮してみましょう。仮想ホストの変更後にApacheが再起動されるようにするには、最初にApacheサービス用の_service_リソースを作成する必要があります。Webサーバーのインストールを自動化するマニフェストを見てみましょう。Github]にあります。[Vagrant]によって管理される仮想マシンを使用して、簡素化されたセットアップでマニフェストをテストできるVagrantfileも含まれています。以下に完全なマニフェストがあります。この変数は、後でリソース宣言で使用されます。+`コマンドを実行します。+`リソースが要件であることを定義します。必要なリソースが評価された後にのみ実行されます。*リソースを使用して、ドキュメントルートとして機能する新しいディレクトリを作成します。`リソースはディレクトリとファイルの作成に使用でき、テンプレートの適用とローカルファイルのリモートサーバーへのコピーにも使用されます。+」を設定する必要はありませんでした。リソースを使用します。*ファイルをサーバー内のドキュメントルートにコピーします。`パラメーターを使用して、元のファイルの場所をPuppetに知らせます。この命名法は、Puppetがローカルファイルを処理する方法に基づいています。https://github.com/erikaheidi/cfmgmt/tree/master/puppet/environments/vagrant/modules/main/files[Githubリポジトリの例]を見ると、ディレクトリ構造の作成方法がわかりますPuppetにこのリソースを見つけさせるため。このリソースを実行する前にドキュメントのルートディレクトリを作成する必要があります。+`オプションを含めます。リソースを使用して、Apacheテンプレートを適用し、サービスに再起動を通知します。+`のインストール後にのみテンプレートリソースが実行されるようにします。しないと、Apacheが使用するディレクトリ構造がまだ存在しない可能性があります。+`サービスを宣言し、仮想ホストテンプレートを適用するリソースからの再起動を通知します。結論Puppetは、表現力豊かなカスタムDSLを使用してサーバーリソースを管理し、タスクを自動化する強力な構成管理ツールです。その言語は高度なリソースを提供し、プロビジョニングのセットアップに柔軟性を与えます。リソースは定義された順序と同じ順序で評価されないことを覚えておくことが重要です。そのため、適切な実行チェーンを確立するためにリソース間の依存関係を定義する際には注意が必要です。[このシリーズの次のガイド]では、Chefをご覧ください。これは、インフラストラクチャの管理とプロビジョニングを自動化するRubyプログラミング言語。