インフラエンジニアの皆さん、こんにちは。
「AnsibleのPlaybookを書いてはサーバーに適用し、祈るように結果を確認する」……そんな胃の痛くなるような開発からは、今日で卒業しましょう。
インフラの世界において、「冪等性(べきとうせい:何度実行しても同じ結果になること)」は信仰ではなく、テストによって証明されるべき事実です。今回は、AnsibleのRoleをDocker上で高速にテストし、壊れないインフラを構築するための「Molecule」という最強の相棒を紹介します。
—
1. Moleculeとは何か?:インフラ開発の「ユニットテスト」
Moleculeは、Ansible Roleの開発サイクルを劇的に変えるフレームワークです。
通常、Ansibleのテストには本物のサーバーが必要ですが、MoleculeはDockerコンテナを使い捨て環境として立ち上げ、そこでRoleを適用し、結果が期待通りかを検証します。
「コードを書く → コンテナでテストする → 成功したらGitHubにPushする」。このサイクルを回すことで、本番環境で「あ、動かない」という絶望を未然に防ぐことができます。
2. 環境構築:まずは武器を整える
まずは必要なツールをインストールします。Python環境が整っていれば一瞬です。
MoleculeとDockerドライバーをインストール
pip install molecule molecule-docker
次に、Roleを作成します。まだRoleがない場合は、`molecule init` で雛形を作りましょう。
my_roleという名前でRoleを作成
ansible-galaxy role init my_role
cd my_role
Moleculeのシナリオを初期化
molecule init scenario default -r my_role -d docker
—
3. 【核心】Moleculeの心臓部:molecule.yml
Moleculeの挙動を制御するのが `molecule/default/molecule.yml` です。ここでDockerコンテナのスペックを定義します。
—
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: instance
image: geerlingguy/docker-ubuntu2004-ansible:latest # Ansibleがプリインストールされたイメージが便利
pre_build_image: true
command: /lib/systemd/systemd # systemdが必要な場合に備える
provisioner:
name: ansible
verifier:
name: ansible # テスト検証にAnsibleのassertモジュールを使うのが一番楽です
—
4. HelloWorld的な動作確認:精度高いテストの書き方
最も重要なのは、「何が正解か」を定義することです。`molecule/default/verify.yml` にテストを記述しましょう。
例えば、「Nginxがインストールされ、起動しているか」を確認するテストはこうなります。
—
- name: Verify
hosts: all
tasks:
# 1. パッケージがインストールされているか
- name: check if nginx is installed
package:
name: nginx
state: present
check_mode: true # 実際に変更せず、状態を確認するだけ
register: nginx_status
# 2. 期待通りか判定する(ここがテストのキモ)
- name: assert nginx is present
assert:
that:
- nginx_status.changed == false # すでに存在していればchangedはfalse
—
5. テスト実行:魔法のコマンド
準備は整いました。以下のコマンドを叩いてみてください。
molecule test
このコマンド一つで、以下の魔法が自動で行われます。
1. Create: Dockerコンテナを立ち上げる。
2. Converge: 作成したAnsible Roleをコンテナに適用する。
3. Verify: 先ほど書いた `verify.yml` で結果を検証する。
4. Destroy: コンテナを破棄する。
「テストが終われば、そこには何も残らない」。
このクリーンさこそが、冪等性を担保する開発の理想郷です。
—
先輩エンジニアからのアドバイス
最初は設定ファイルを書くのが手間に感じるかもしれません。しかし、本番環境で数百台のサーバーを操作する際、MoleculeでテストされたRoleは、あなたを救う最大の盾になります。
「動くこと」を祈るのではなく、「動くこと」を証明する。
このスタンスを身につければ、あなたのインフラエンジニアとしての価値は間違いなく一段階上のステージへ引き上がります。
さあ、まずはローカルのコンテナ一つから、自動化の第一歩を踏み出してみませんか?質問があればいつでも聞いてくださいね。応援しています!