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

「動けばいい」は卒業だ:Ansible Molecule × Testinfraで構築する、壊れないインフラの要塞

「Ansibleのコードを書いて、`ansible-playbook` を叩いて、SSHでログインして状態を確認する」。もし君がまだこの手作業を繰り返しているなら、今すぐその習慣を捨ててほしい。

大規模インフラにおいて、手動確認は「技術的負債」そのものだ。SREの責務は単に自動化することではなく、「変更が意図通りであり、かつ過去の機能を破壊していないこと(冪等性の証明)」を機械的に保証することにある。

今日は、Ansible MoleculeとTestinfraを駆使し、CI/CDパイプラインに「検証の自動化」という心臓を移植する極限の実践手法を伝授する。

—

1. なぜMoleculeなのか:インフラの「単体テスト」を実装せよ

Moleculeは単なるテストツールではない。DockerやVagrantを立ち上げ、ロールを実行し、テストを行い、環境を破壊して消える。この「使い捨てインフラ」のライフサイクルを制御することで、初めて「冪等性の完全な検証」が可能になる。

現場で勝てる Molecule 設定(molecule.yml)

デフォルト設定は忘れろ。実運用では、Driverに`docker`を使い、高速なフィードバックループを作るのが鉄則だ。

—
dependency:
name: galaxy
driver:
name: docker
platforms:

  • name: instance

image: geerlingguy/docker-ubuntu2204-ansible:latest
pre_build_image: true
# コンテナに特権を与え、Systemdを実行可能にする(重要)
privileged: true
command: /lib/systemd/systemd
provisioner:
name: ansible
log: true
# 複数回実行して冪等性をチェックする設定(必須)
playbooks:
converge: converge.yml
verifier:
name: testinfra

—

2. Testinfra:Pythonの力でインフラの魂を検診する

シェルスクリプトで`grep`して`$?`を確認するのは今日で終わりだ。Testinfraを使えば、Pythonの直感的な構文で、サーバーの状態を「資産」として定義できる。

`tests/test_default.py` のベストプラクティス

import pytest

サービスが起動し、かつ自動起動設定が有効かを確認
def test_nginx_is_installed_and_running(host):
nginx = host.package(“nginx”)
assert nginx.is_installed
assert nginx.version.startswith(“1.18”)

svc = host.service(“nginx”)
assert svc.is_running
assert svc.is_enabled

設定ファイルのパーミッションと所有者を厳密にガード
def test_nginx_config_file(host):
conf = host.file(“/etc/nginx/nginx.conf”)
assert conf.exists
assert conf.user == “root”
assert conf.mode == 0o644

—

3. CI/CDパイプラインへの統合:GitHub Actionsの要塞化

開発者のローカルで動くことは最低条件だ。GitHub Actionsに組み込み、プルリクエストが飛ぶたびに「インフラの整合性」を自動採点させる。

.github/workflows/molecule.yml
jobs:
test:
runs-on: ubuntu-latest
steps:

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

run: molecule test
env:
PY_COLORS: ‘1’
ANSIBLE_FORCE_COLOR: ‘1’

—

4. テックリード直伝:生産性を極限まで高める「秘伝の技」

開発スピードを加速させる「神プラグイン」

  • Ansible Language Server: VS Codeに入れておけ。YAMLの構文エラーや、変数の未定義をタイピング中に警告してくれる。これなしでAnsibleを書くのは、暗闇で目隠しをして運転するようなものだ。
  • Docker Explorer: Moleculeで生成された一時的なコンテナの状態を、VS Codeから直感的に覗き見ろ。

チーム開発の「暗黙の掟」

1. 冪等性の二段構え: `molecule test` は必ず `converge` 後の「2回目の実行」でエラーが出ないことを確認する設定にせよ。
2. Lintを宗教化せよ: `ansible-lint` をコミットフックに仕込み、警告が出ているコードはレビューの土俵に上げさせない。
3. 変数の外部化: 全ての変数は `group_vars` に集約し、`roles/` 内にはロジックしか書くな。これによりテストの再利用性が劇的に向上する。

—

最後に:なぜここまでやるのか

インフラエンジニアにとって、一番の敵は「動かしてみるまで分からない」という恐怖だ。MoleculeとTestinfraを導入すれば、その恐怖は「コードに対する絶対的な信頼」に変わる。

自動テストを書く時間は、最初は遠回りに思えるかもしれない。だが、障害発生時の深夜の呼び出しと、原因不明の構成ドリフトに苦しむ未来を買い戻していると思えば、安い投資だと思わないか?

さあ、コードを書いてテストを走らせろ。インフラを「管理するもの」から「保証するもの」へ進化させる時が来た。

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