Ansibleを使用した設定管理についての導入

はじめに

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

サーバーの文脈では、構成管理は一般的にIT自動化またはサーバーオーケストレーションとも呼ばれます。どちらの用語も、構成管理の実践的な側面と、中央サーバーから複数のシステムを制御する能力を強調しています。

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

構成管理ツールを使用するメリット

市場には様々な複雑さと多様なアーキテクチャスタイルを持つ構成管理ツールが多数存在します。これらのツールはそれぞれ独自の特徴を持ち、働き方も若干異なりますが、すべて同じ機能を提供しています:システムの状態が一連のプロビジョニングスクリプトで記述された状態と一致することを確認することです。

サーバーの構成管理の多くの利点は、インフラをコードとして定義する能力から生まれます。これにより、以下のことが可能になります:

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

さらに、構成管理ツールは、中央の場所から1台から数百台のサーバーを制御する方法を提供し、サーバーインフラの効率と完全性を大幅に向上させます。

Ansibleの概要

Ansibleは、リモートサーバーの設定とメンテナンスを容易にする最新の構成管理ツールであり、ユーザーが迅速に稼働できるように最小限のデザインが特徴です。

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

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

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

べき等性

Ansibleは、管理対象システム内のリソースの状態を追跡し、以前に実行されたタスクの繰り返しを避けます。パッケージが既にインストールされている場合、再度インストールしようとしません。目標は、プロビジョニングの実行ごとにシステムが(または維持)望ましい状態に到達することです。これがAnsibleや他の構成管理ツールがべき等性を持つと特徴付けられる理由です。プレイブックを実行すると、各タスクの実行状態と、システムに変更が加えられたかどうかが表示されます。

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

Ansibleの自動化スクリプトを書く際、変数、条件分岐、ループを使用することで、自動化をより柔軟かつ効率的にすることができます。

システムファクト

Ansibleは管理対象ノードに関する詳細情報(ネットワークインターフェースやオペレーティングシステムなど)を収集し、これをシステムファクトというグローバル変数として提供します。ファクトはプレイブック内で使用され、自動化をより柔軟かつ適応的にすることができ、プロビジョニングされるシステムに応じて異なる動作をします。

テンプレートシステム

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

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

Ansibleには、システム管理タスクの自動化を容易にするために数百の組み込みモジュールが用意されています。例えば、aptでパッケージをインストールしたり、rsyncでファイルを同期したりするなどの一般的なタスクや、MySQL、PostgreSQL、MongoDBなどのデータベースシステムや、PHPのcomposer、Rubyのgem、Nodeのnpmなどの依存関係管理ツールを扱うためのものもあります。それ以外にも、Ansibleを拡張する方法はいくつかあります。プラグインやモジュールは、デフォルトでは提供されていないカスタム機能が必要な場合に適したオプションです。

また、Ansible Galaxyポータルでサードパーティのモジュールやプラグインを見つけることもできます。

Ansibleの概念に慣れる

このシリーズを通じて登場する用語に慣れるために、Ansibleの用語と概念を見ていきましょう。

制御ノード

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

管理対象ノード

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

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

インベントリ

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

タスク

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

プレイブック

プレイブックには、タスクの順序付きリストと、そのオートメーションの対象となるホスト、特権昇格システムを使用してそれらのタスクを実行するかどうか、変数を定義したりファイルを含めたりするオプションのセクションを示すいくつかの指示が含まれています。Ansibleはタスクを順番に実行し、プレイブックの完全な実行をプレイと呼びます。プレイブックはYAML形式で記述されます。

ハンドラー

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

ロール

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

結論

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

次の部分では、このシリーズで、Ubuntu 20.04サーバーにAnsibleをインストールして始める方法を見ていきます。

Source:
https://www.digitalocean.com/community/conceptual_articles/an-introduction-to-configuration-management-with-ansible