「サーバーを10台、全部同じ設定にしてください」って言われたとき、1台ずつ手作業でやってたら何時間かかるんだろう…って思ったことない?しかも途中でミスしたら全部やり直しとか、もう地獄だよね。そんな「同じ作業を何度もやるのしんどい問題」をまるっと解決してくれるのが、今回紹介するAnsible(アンシブル)というツールなんだ。この記事を読めば、Ansibleが何をしてくれるのか、どうやって使うのかがよくわかるよ!
- Ansibleはサーバーの設定作業を自動化してくれるツールで、何十台ものサーバーを一気にセットアップできる
- やりたいことをプレイブックというファイルに書いておくだけで、あとはAnsibleが全部やってくれる
- サーバー側に特別なソフトを入れなくていいエージェントレス設計だから、導入がとても簡単
もうちょっと詳しく
Ansibleは2012年にMichael DeHaan(マイケル・デハーン)さんが作ったツールで、今はRed Hat(レッドハット)という会社が管理している。もともと「インフラの管理をもっとシンプルにしたい」という思いから生まれたもので、それまでのツールより圧倒的に始めやすいのが特徴なんだ。Ansibleが特別なのは、作業を指示する側(コントロールノード)にだけインストールすればよくて、作業される側のサーバー(マネージドノード)には何もインストールしなくていいこと。SSH(エスエスエイチ)つまりサーバーに安全に接続するための仕組みを使って、リモートから直接コマンドを送って操作するんだ。これを「エージェントレス」と言って、導入のハードルがとても低いのがAnsibleの強みのひとつだよ。
Ansibleは「作業される側」に何もインストール不要!SSH接続できればOK。
⚠️ よくある勘違い
→ Ansibleの中身はPythonで書かれているけど、使う側はPythonを書く必要は全くない。YAMLで設定ファイルを書くだけでOK。
→ プレイブックはほとんど自然言語に近い箇条書き形式。プログラミング経験がなくても比較的取り組みやすいのが特徴。
[toc]
Ansibleって何?そもそもなんのためにあるの?
「同じ作業を何度も繰り返す」問題
IT業界には「インフラエンジニア」という職種の人たちがいて、サーバーを管理したりセットアップしたりするのが仕事なんだ。でも昔は、新しいサーバーを用意するたびに、毎回手作業でコマンドを打ってセットアップしていた。
これって、料理のレシピを毎回暗記してゼロから作るようなものだよね。10回作れば10回とも手順が微妙に違って、出来上がりが変わることもある。サーバーでも同じことが起きていて、「このサーバーだけ設定が違う!」「誰がいつ何をしたかわからない!」っていう問題がよく起きていたんだ。
「コード化」で解決する発想
そこで生まれたのが「インフラをコード(設定ファイル)で管理しよう」という考え方。つまり、「このサーバーはこうあるべき」という状態をファイルに書いておいて、そのファイルを実行すれば自動的にその状態になる、という仕組みだ。この考え方をIaC(Infrastructure as Code)、つまり「インフラをコードとして管理する」と言う。Ansibleは、このIaCを実現するためのツールのひとつなんだよ。
レシピで例えるなら、「材料を切る→炒める→調味料を入れる→5分煮る」っていう手順書を作っておいて、誰でも全く同じ料理を作れるようにするイメージ。Ansibleのプレイブックはまさにサーバーセットアップの「レシピ」なんだ。
Ansibleが登場する前は?
Ansibleより前にも同じような自動化ツールはあった。ChefやPuppetという有名なツールがそれで、今でも使われてる。でも、これらのツールはサーバー側に「エージェント」と呼ばれる専用ソフトをインストールしないといけなかった。つまり、自動化を始めるための準備作業自体が大変だったんだ。Ansibleはその問題を「エージェントレス」にすることで解決して、一気に広まったんだよ。
Ansibleはどうやって動くの?仕組みを見てみよう
3つの登場人物を覚えよう
Ansibleの仕組みを理解するには、3つの「登場人物」を覚えるとわかりやすい。
- コントロールノード:Ansibleをインストールしてある、命令を出す側のマシン。あなたが操作するパソコンやサーバーがこれ。
- マネージドノード:Ansibleから操作される側のサーバー。ここにはAnsibleのインストール不要。
- インベントリ:「どのサーバーに作業するか」のリスト。IPアドレスやホスト名を書いたファイルのこと。
学校の例えで言うと、コントロールノードは「先生」、マネージドノードは「生徒全員」、インベントリは「クラスの名簿」みたいなイメージだ。先生が名簿を見ながら「このクラス全員にこの課題をやってもらう」と指示を出す感じ。
SSHで安全につながる
Ansibleがマネージドノードに接続するとき、SSH(Secure Shell)という仕組みを使う。SSHは「安全な通信経路を作って、リモートのサーバーを操作する」技術。つまり、インターネットを通じてもデータが暗号化されるから安全なんだ。
Ansibleはこの既存のSSH接続を使うだけだから、特別なポートを開ける必要もないし、新しいソフトを入れる必要もない。すでにSSHが使えるサーバーなら、そのままAnsibleで管理できるんだ。これが「エージェントレス」の強みで、導入がとても楽なんだよ。
モジュールって何?
Ansibleは「モジュール」という部品の集まりでできている。モジュールとは、つまり「やりたい作業ひとつひとつを実行するための専用プログラム」のこと。たとえば、
- aptモジュール:Ubuntu/Debianでパッケージをインストールする
- copyモジュール:ファイルをサーバーにコピーする
- serviceモジュール:サービスの起動・停止・再起動をする
- userモジュール:ユーザーアカウントを作る・削除する
Ansibleには数千種類のモジュールがあって、ほとんどのサーバー操作がモジュールを使えばできる。自分でゼロからスクリプトを書かなくていいから、作業効率がすごく上がるんだよ。
プレイブックって何?Ansibleの「設計図」を理解しよう
プレイブックはYAMLで書く
Ansibleで「何をするか」を定義するファイルがプレイブック(Playbook)だ。プレイブックはYAML形式で書く。YAMLとは、つまり「インデント(字下げ)と記号を使って、データをわかりやすく表現するファイル形式」のこと。プログラミングというより、メモ書きに近い感覚で読めるんだ。
たとえば「Apacheというウェブサーバーをインストールして起動する」プレイブックはこんな感じになる:
- hosts: webservers
tasks:
- name: Apacheをインストールする
apt:
name: apache2
state: present
- name: Apacheを起動する
service:
name: apache2
state: started
英語だけど、読んでみると「webserversというグループのサーバーに対して、apache2をインストールして、apache2を起動する」って書いてあるのがわかるよね。これがプレイブックの書き方で、日本語の手順書に近いシンプルさが特徴なんだ。
タスク・プレイ・プレイブックの関係
プレイブックの中には、いくつかの「プレイ」が入っていて、プレイの中に「タスク」がある。整理するとこんな感じ:
- タスク:具体的な作業ひとつ(例:「Apacheをインストールする」)
- プレイ:タスクのまとまり+対象サーバーの指定(例:「Webサーバーグループに対してこのタスク群を実行」)
- プレイブック:プレイをまとめたファイル全体
料理の例でいうと、タスクが「野菜を切る」みたいな手順、プレイが「前菜の作り方」みたいなレシピのひとまとまり、プレイブックが「コース料理全体のレシピ本」みたいなイメージかな。
変数やテンプレートも使える
プレイブックは「変数」も使える。変数とは、つまり「あとから値を差し込める入れ物」のこと。たとえばサーバーによってポート番号を変えたいときは、変数にしておけば同じプレイブックをちょっと変えるだけでどちらにも対応できる。また、Jinja2(ジンジャー2)というテンプレート機能を使って、設定ファイルの内容を動的に変えることもできる。これで「サーバーAは80番ポート、サーバーBは8080番ポート」みたいな使い分けも簡単にできるんだ。
Ansibleのすごいところ「べき等性」って何?
べき等性(idempotency)とは?
Ansibleの大事な考え方のひとつがべき等性(idempotency)。難しい言葉だけど、つまり「同じ操作を何回やっても、結果は1回やったときと同じになる」ということだ。
身近な例で考えてみよう。電灯のスイッチを「ON」にする操作、すでにONの状態でもう一度「ON」にしても何も変わらないよね。壊れたりしない。これがべき等性のある操作だ。
逆にべき等性がない例は、「ファイルに行を追加する」操作。10回実行したら同じ行が10回追加されてしまう。これはべき等性がない。
なぜべき等性が大事なの?
Ansibleのモジュールはほとんどがべき等性を持っている。つまり、すでにインストール済みのパッケージに対して「インストールする」コマンドを実行しても、「もうあるから何もしない」って判断してくれるんだ。
これの何がすごいかというと、失敗しても安心して何度でもやり直せること。途中でエラーが起きたとしても、最初からプレイブックを実行し直せばいい。すでに成功している部分は飛ばして、失敗した部分だけやり直してくれる。手作業だと「どこまでやったっけ?もう一回やったら二重になっちゃうかも…」って心配しないといけないけど、Ansibleはその心配がいらないんだよ。
「changed」と「ok」の違い
Ansibleを実行すると、タスクごとに結果が表示される。このとき2種類の状態が出てくる:
- changed(黄色):実際に変更が行われた(例:ファイルを新たにコピーした)
- ok(緑):すでに望ましい状態だったので何もしなかった(例:すでにインストール済みだった)
2回目以降に実行したとき、多くのタスクが「ok」になるのがべき等性の証拠。「何度実行しても安全」というのがAnsibleの安心感につながっているんだ。
Ansibleは実際にどんな場面で使われてるの?
新しいサーバーのセットアップ
一番よく使われるのが、新しいサーバーを用意するときのセットアップ作業だ。たとえば会社のシステムを新しいサーバーに引っ越すとき、以前はエンジニアが数時間かけて手作業でやっていた作業が、Ansibleを使えば数分で完了する。しかも手順がプレイブックという形でファイルに残るから、「前回どうやって設定したっけ?」という問題もなくなる。
大量サーバーへの設定変更
セキュリティの問題が見つかったとき、全サーバーに緊急のパッチを当てる必要があることがある。100台のサーバーに同じ設定変更を手作業でやったら、それだけで1日仕事だ。でもAnsibleなら、プレイブックを1回実行するだけで100台全部に一気に反映できる。しかもAnsibleはデフォルトで5台ずつ並列で実行してくれるから、とても速い。
CI/CDパイプラインとの組み合わせ
最近はCI/CD(継続的インテグレーション・継続的デリバリー)、つまり「コードの変更を自動でテストして自動でリリースする仕組み」と組み合わせて使われることも多い。コードを書いてGitHubにプッシュすると、自動でテストが走って、テストが通ったらAnsibleがサーバーへの展開も自動でやる、みたいな流れだ。人間が手を動かす場面がどんどん減って、ミスも減る。
クラウド環境の管理
AWSやGoogle Cloudなどのクラウドサービスも、Ansibleで管理できる。仮想マシンを作ったり、ネットワーク設定を変えたり、データベースをセットアップしたりといった作業も、プレイブックに書いておけば全部自動化できる。クラウドを使う会社のインフラエンジニアにとって、Ansibleはもはや必須ツールになってきているんだよ。
まとめ:Ansibleを学ぶと何がいいの?
Ansibleを使いこなせるようになると、インフラエンジニアとしての価値がぐっと上がる。手作業でポチポチやるより何十倍も早く正確に作業できるし、その手順がファイルとして残るからチームで共有もできる。将来ITの仕事をしたいと思ってる人は、ぜひ触ってみてほしいツールだよ。公式のドキュメントも充実しているし、無料で使えるから、まずは仮想マシンを1台作ってAnsibleで「Hello World」的なことから試してみよう!
