序章

構成管理は、時間の経過とともに整合性を保証する方法でシステムへの変更を処理するプロセスであり、通常、自動化と可観測性を促進するツールとプロセスが含まれます。 この概念はIT業界に由来するものではありませんが、この用語はサーバー構成管理を指すために広く使用されています。

サーバーのコンテキストでは、構成管理は一般に ITAutomationまたはServerOrchestrationとも呼ばれます。 どちらの用語も、構成管理の実際的な側面と、中央サーバーから複数のシステムを制御する機能を強調しています。

このガイドでは、構成管理ツールを使用してサーバーインフラストラクチャのセットアップを自動化する利点と、そのようなツールの1つであるAnsibleがどのように役立つかについて説明します。

構成管理ツールを使用する利点

市場には多くの構成管理ツールがあり、さまざまなレベルの複雑さと多様なアーキテクチャスタイルがあります。 これらのツールにはそれぞれ独自の特性があり、動作も少し異なりますが、すべて同じ機能を提供します。システムの状態が、一連のプロビジョニングスクリプトによって記述された状態と一致することを確認してください。

サーバーの構成管理の利点の多くは、インフラストラクチャをコードとして定義できることから得られます。 これにより、次のことが可能になります。

  • バージョン管理システムを使用して、インフラストラクチャの変更を追跡します
  • 開発、テスト、本番環境など、複数のサーバー環境でプロビジョニングスクリプトを再利用する
  • 標準化された開発環境でのコラボレーションを促進するために、同僚間でプロビジョニングスクリプトを共有します
  • サーバーの複製プロセスを合理化し、重大なエラーからの回復を促進します

さらに、構成管理ツールは、一元化された場所から1台から数百台のサーバーを制御する方法を提供します。これにより、サーバーインフラストラクチャの効率と整合性を大幅に向上させることができます。

Ansibleの概要

Ansibleは、リモートサーバーのセットアップと保守のタスクを容易にする最新の構成管理ツールであり、ユーザーを迅速に稼働させることを目的とした最小限の設計を備えています。

ユーザーは、Ansibleプロビジョニングスクリプトを YAML で記述します。これは、特定のプログラミング言語に縛られていない、ユーザーフレンドリーなデータシリアル化標準です。 これにより、ユーザーは、同じカテゴリの同様のツールと比較して、より直感的に高度なプロビジョニングスクリプトを作成できます。

Ansibleでは、このツールで管理されるノードに特別なソフトウェアをインストールする必要はありません。 制御マシンはAnsibleソフトウェアでセットアップされ、Ansibleソフトウェアは標準のSSHを介してノードと通信します。

構成管理ツールおよび自動化フレームワークとして、Ansibleは、同じカテゴリーの他のツールに存在するすべての共通機能をカプセル化し、シンプルさとパフォーマンスに重点を置いています。

べき等の振る舞い

Ansibleは、以前に実行されたタスクの繰り返しを回避するために、管理対象システムのリソースの状態を追跡します。 パッケージがすでにインストールされている場合、再インストールは試行されません。 目的は、プロビジョニングを実行するたびに、システムを複数回実行した場合でも、システムが目的の状態に到達(または維持)することです。 これが、Ansibleおよびその他の構成管理ツールがべき等動作を持っていることを特徴付けるものです。 プレイブックを実行すると、実行中の各タスクのステータスと、タスクがシステムで変更を実行したかどうかが表示されます。

変数、条件、およびループのサポート

Ansible自動化スクリプトを作成する場合、自動化をより用途が広く効率的にするために、変数、条件、およびループを使用できます。

システムの事実

Ansibleは、ネットワークインターフェイスやオペレーティングシステムなどの管理対象ノードに関する一連の詳細情報を収集し、システムファクトと呼ばれるグローバル変数として提供します。 ファクトをプレイブック内で使用して、自動化をより用途が広く適応性のあるものにし、プロビジョニングされるシステムに応じて動作を変えることができます。

テンプレートシステム

AnsibleはJinja2Pythonテンプレートシステムを使用して、動的な式と変数へのアクセスを可能にします。 テンプレートを使用すると、構成ファイルとサービスのセットアップが容易になります。 たとえば、テンプレートを使用してApache内に新しい仮想ホストをセットアップし、同じテンプレートを複数のサーバーのインストールに再利用できます。

拡張機能とモジュールのサポート

Ansibleには何百もの組み込みモジュールが付属しており、パッケージのインストールなど、一般的なシステム管理タスクの書き込み自動化を容易にします。 apt とファイルを同期します rsync、およびデータベースシステム(MySQL、PostgreSQL、MongoDBなど)や依存関係管理ツール(PHPなど)などの一般的なソフトウェアを処理するためにも使用できます。 composer、ルビーズ gem、ノードの npm、 その他)。 それとは別に、Ansibleを拡張するさまざまな方法があります。プラグインとモジュールは、デフォルトでは存在しないカスタム機能が必要な場合に適したオプションです。

サードパーティのモジュールとプラグインは、 AnsibleGalaxyポータルにもあります。

Ansibleの概念に精通する

ここでは、Ansibleの用語と概念を見て、このシリーズ全体で登場するこれらの用語を理解しやすくします。

コントロールノード

コントロールノードは、Ansibleがインストールされ、サーバーに接続するように設定されているシステムです。 複数の制御ノードを持つことができ、LinuxまたはUnixベースのオペレーティングシステムを実行しているパーソナルコンピューターまたはラップトップを含め、Ansibleを実行できる任意のシステムを制御ノードとして設定できます。 当面、AnsibleをWindowsホストにインストールすることはできませんが、Linuxを実行する仮想マシンをセットアップし、そこからAnsibleを実行することで、この制限を回避できます。

管理対象ノード

Ansibleを使用して制御するシステムは、管理対象ノードと呼ばれます。 Ansible では、管理対象ノードがSSH経由で到達可能であり、Python 2(バージョン2.6以降)またはPython 3(バージョン3.5以降)がインストールされている必要があります

Ansibleは、管理対象ノードとしてWindowsサーバーを含むさまざまなオペレーティングシステムをサポートしています。

在庫

Inventory ファイルには、Ansibleを使用して管理するホストのリストが含まれています。 Ansibleは通常、インストール時にデフォルトのインベントリファイルを作成しますが、プロジェクトごとのインベントリを使用して、インフラストラクチャをより適切に分離し、誤って間違ったサーバーでコマンドやプレイブックを実行しないようにすることができます。 静的在庫は通常、次のように作成されます .ini ファイルですが、JSONを返すことができる任意のプログラミング言語で記述された動的に生成されたインベントリを使用することもできます。

タスク

Ansibleでは、タスクは、管理対象ノードで実行する個々の作業単位です。 実行する各アクションはタスクとして定義されます。 タスクは、アドホックコマンドを介して1回限りのアクションとして実行することも、自動化スクリプトの一部としてプレイブックに含めることもできます。

プレイブック

playbook には、タスクの順序付きリスト、その自動化のターゲットであるホスト、それらのタスクを実行するために特権昇格システムを使用するかどうかを示す他のいくつかのディレクティブ、および定義するオプションのセクションが含まれています変数またはインクルードファイル。 Ansibleはタスクを順番に実行し、完全なプレイブックの実行はplayと呼ばれます。 プレイブックはYAML形式で書かれています。

ハンドラー

ハンドラーは、管理対象ノードのシステムでアクティブに実行されているサービスの再起動や停止など、サービスでアクションを実行するために使用されます。 ハンドラーは通常、タスクによってトリガーされ、すべてのタスクが終了した後、プレイの最後に実行されます。 このように、たとえば、複数のタスクがサービスの再起動をトリガーした場合、サービスは1回だけ再起動され、すべてのタスクが実行された後に再起動されます。 デフォルトのハンドラーの動作はより効率的で全体的に優れた方法ですが、タスクで必要な場合は、ハンドラーの即時実行を強制することもできます。

役割

role は、Ansibleによって認識される事前定義された構造に編成されたプレイブックと関連ファイルのセットです。 ロールは、Webサーバーのインストール、PHP環境のインストール、MySQLサーバーのセットアップなど、特定の目標のために、プレイブックを再利用して、きめ細かい自動化の共有可能なパッケージに転用することを容易にします。

結論

Ansibleは、プロビジョニングスクリプトにYAMLを使用していることもあり、学習曲線が緩やかなミニマリストのIT自動化ツールです。 パッケージのインストールやテンプレートの操作などのタスクを抽象化するために使用できる多数の組み込みモジュールがあります。 その簡素化されたインフラストラクチャ要件とアクセス可能な構文は、構成管理を始めようとしている人にぴったりです。

このシリーズの次のパートでは、Ubuntu20.04サーバーにAnsibleをインストールして使用を開始する方法を説明します。