【入門編】Ansible MoleculeとTestinfraを活用したインフラテスト自動化!CI/CDパイプラインに組み込む高度な検証手法 – インフラ構成管理(IaC)活用バイブル

Ansible Molecule × Testinfra:インフラコードを「壊れない資産」に変える極意

こんにちは。インフラエンジニアの皆さん、日々の構築作業で「設定ファイルを書き換えたあと、本当に意図通りに動いているか不安で夜も眠れない」なんてことはありませんか?

手作業の確認から脱却し、インフラを「コード」として正しく管理するなら、Ansible MoleculeとTestinfraを避けて通ることはできません。今日は、インフラコードの品質を担保し、リグレッション(退行)を未然に防ぐための「テスト駆動型インフラ開発」の第一歩を、余すことなく伝授します。

—

1. なぜ「Molecule」なのか?

Ansibleは非常に強力ですが、書いたPlaybookが「冪等(べきとう:何度実行しても同じ結果になる)」かどうかを保証するのは至難の業です。

  • Molecule: Ansibleのテスト用フレームワーク。コンテナやVMを自動で立ち上げ、Ansibleを実行し、テストを行い、最後に環境をクリーンアップするまでを自動化します。
  • Testinfra: Pythonベースのテストツール。OSの内部状態(パッケージの有無、サービスの状態、ポートの開放状況など)を、まるで「そこにいるかのように」検査できます。

この2つを組み合わせることで、「書いたPlaybookが期待通りにサーバーを構築できているか」をCI上で自動判定する仕組みが完成します。

—

2. 環境構築:まずはここから

まずは必要な道具を揃えましょう。仮想環境(venv)を利用するのが鉄則です。

プロジェクトディレクトリの作成
mkdir my-ansible-role && cd my-ansible-role

仮想環境の構築
python3 -m venv .venv
source .venv/bin/activate

必要なパッケージのインストール
pip install molecule molecule-docker testinfra

※Dockerがインストールされている前提です。

—

3. Moleculeの初期セットアップ

Moleculeでプロジェクトを初期化します。今回はDockerコンテナをテスト環境として使います。

molecule init role my_role –driver-name docker
cd my_role

これで、ディレクトリの中に `molecule/default/` というフォルダが生成されます。ここがインフラテストの心臓部です。

—

4. 精度高い「HelloWorld」:Nginxをテストする

「Nginxがインストールされ、起動していること」を確認するテストを書いてみましょう。

Step 1: AnsibleでNginxをインストールする(Playbook)

`tasks/main.yml` に以下を記述します。

  • name: Install Nginx

apt:
name: nginx
state: present

  • name: Ensure Nginx is started

service:
name: nginx
state: started
enabled: true

Step 2: Testinfraで状態を検証する

`molecule/default/tests/test_default.py` を開き、以下のようにテストを書きます。

import testinfra

def test_nginx_is_installed(host):
# パッケージがインストールされているか
nginx = host.package(“nginx”)
assert nginx.is_installed

def test_nginx_is_running(host):
# サービスが起動し、有効化されているか
nginx = host.service(“nginx”)
assert nginx.is_running
assert nginx.is_enabled

—

5. 実行と検証:魔法のコマンド

準備は整いました。以下のコマンドを叩いてみてください。

molecule test

このコマンド一つで、以下のドラマが自動で進行します。
1. Dependency: 依存関係のチェック
2. Create: Dockerコンテナを立ち上げる
3. Prepare: 環境を整える
4. Converge: Ansible Playbookを適用する(ここでNginxが入る)
5. Verify: Testinfraが動いて状態をチェックする!
6. Destroy: コンテナを破棄する

もしPlaybookにバグがあれば、`Verify`の段階でエラーを吐いて教えてくれます。これが「壊れないインフラ」の第一歩です。

—

6. CI/CDパイプラインへの統合(GitHub Actions)

これをGitHub Actionsに組み込めば、プルリクエストを送るたびに自動テストが走ります。`.github/workflows/test.yml` に以下を配置するだけです。

name: Ansible Test
on: [push, pull_request]

jobs:
test:
runs-on: ubuntu-latest
steps:

  • uses: actions/checkout@v3
  • name: Run Molecule

run: |
pip install molecule molecule-docker
molecule test

—

最後に:エンジニアとして生き残るために

「動いたからOK」という手作業の時代は終わりました。「テストが通ったから安心だ」と言えることが、プロのインフラエンジニアとしての唯一の正義です。

最初はMoleculeの設定に苦労するかもしれません。しかし、一度このパイプラインを構築してしまえば、あなたは「サーバー構築のたびにドキドキする」必要から解放されます。

何か分からないことがあれば、いつでも聞いてください。インフラの自動化という、この最高にエキサイティングな旅を一緒に楽しみましょう!

タイトルとURLをコピーしました