Terraformが「インフラを作る」ツールなら、Ansibleは「サーバーを設定する」ツール。EC2を立てた後、nginxを入れて、設定ファイルを配置して、サービスを起動して…という手順を全てYAMLで書ける。
Ansibleの最大の特徴はエージェントレスなこと。管理対象のサーバーに専用のソフトウェアをインストールする必要がない。SSHで繋いで、Pythonでコマンドを実行するだけ。シンプルさが段違い。
Ansibleの中核概念:
- Playbook — サーバーに実行するタスクのリストをYAMLで書いたもの。「このパッケージを入れて」「このファイルを配置して」「このサービスを起動して」。
- Inventory — 管理対象サーバーのリスト。ホスト名とIP、グループ分け。
- Role — Playbookを再利用可能な単位に分割したもの。`ansible-galaxy init nginx`で雛形生成。
- Idempotency(べき等性) — 同じPlaybookを何度実行しても同じ結果になる。これが自動化の要。手動だと「あれ、このコマンドもう実行したっけ?」がなくなる。
僕が実際に使ってるAnsibleのユースケース:
- 新サーバーの初期セットアップ(ユーザー作成、SSH公開鍵配置、ファイアウォール設定、タイムゾーン設定)
- Dockerのインストールとdaemon設定
- nginxのインストールとバーチャルホスト設定
- Let’s Encryptの自動設定とcertbot自動更新
- 監視エージェント(Prometheus Node Exporter)のデプロイ
`ansible-playbook -i inventory site.yml` 一発で、真っ新なサーバーが30分で本番運用可能な状態になる。これが自動化の快感。
注意点。Playbookは「手順書」じゃない。最終状態を宣言するもの。「このパッケージが入ってる状態」を宣言すれば、Ansibleが自動で必要なコマンドを判断する。ここを勘違いするとPlaybookがクソ長くなる。