インフラチームのTakeshiです。
サーバー構成管理ツール Ansibleについて、数回に渡って掲載していきます。
今回はAnsibleの概要と特徴について紹介します。
WEBサービスのシステムを構築する多くの場合は、「決まった手順」通りに「操作を進める」ことで、サーバー設定は誰でも同じようにできます。
サーバー設定の自動化
「決まった手順」と「操作を進める」をコード化することで、インフラ業務の多くを自動化できます。また、サーバー設定のテンプレートを作成しておくことで、0からサーバーを構築する際に便利です。
サーバー設定の変更履歴
また、コード化したものをGit管理することで、サーバー設定の変更履歴が取れるようになります。
構成管理ツールはPappetやChefなどいろいろありますが、Ansibleを選んだ理由は次の通りです。
エージェントレス
Ansibleは、管理対象となるサーバーにエージェントやプラグインなどをインストールする必要がなく、PythonとSSH接続が可能であれば管理できます。
SSHのパスフレーズ付きの鍵認証アカウントを用意して、Ansibleホストでssh-addでパスフレーズを予め通しておくと便利です。
また、プロジェクトのセキュリティポリシーにもよりますが、管理対象のサーバーアカウントをsudoのNOPASSWD: ALLをもつグループに入れることで、実行時のパスワード入力を省くことができます。パスワード入力を補助する他のやり方もAnsibleで用意されていますが、個人的にはパスワードを持つアカウントは、アカウントのセキュリティ状態を常に心配しなければならないので避けたいです。
Unixアカウントはパスワードロックがかかっている状態であるべきです。
YAML
Ansibleでは、YAML形式の定義ファイルを使用します。特にYAMLを書いたことがないので選定理由にはなりませんが、一般的な形式なので、覚えやすいかと思います。
冪等性(べきとうせい)
他の管理ツールと同様、繰り返し実行しても同じ状態が保たれます。一度インストールしたものが次回もインストール試行されてエラーとなったり、設定ファイルが更新されることはありません。
まとめ
Ansibleを導入するにあたり、既に運用中の管理対象サーバーがあり、最初はApache設定だけとか、PHP設定だけ、アプリケーションサーバーから管理するなど、管理対象サーバーに手を加えることなく段階的にAnsible管理下に加えていけました。
Ansibleの優位性は他のツールを抜きん出るものではありませんが、シンプルな仕組みがゆえに導入のハードルが高くないところが良いと思います。
次回はAnsibleのインストールと導入の準備について紹介したいと思います。