Ansible Execution Environment(EE)完全入門:Podmanで構築する「壊れない」自動化インフラ
こんにちは。インフラエンジニアの皆さん、普段のAnsible運用でこんな「悪夢」を見たことはありませんか?
「ローカルのMacでは動いたのに、本番環境のCI/CDパイプラインに載せたら依存ライブラリのバージョン違いでエラーが出る」
「OSのPythonバージョンが古くて、最新のCollectionが動かない」
Ansibleの歴史において、これらの「環境依存による再現性の欠如」は最大の敵でした。しかし、Ansible Automation Platform 2以降で標準となったExecution Environment (EE)の登場により、この泥沼から完全に脱出することが可能になりました。
今日は、Ansibleを「コンテナ化」し、環境差異を過去のものにするための極限のスキルを伝授します。
—
1. なぜ今、Execution Environment (EE) なのか?
従来のAnsibleは、実行するホストのOSにPythonやライブラリをインストールする必要がありました。これが「環境の汚染」と「属人化」を生んでいました。
Execution Environment (EE) は、Ansibleの実行エンジン、Pythonランタイム、必要なライブラリ、そしてCollectionを「ひとつのコンテナイメージ」に閉じ込めたものです。
これにより、「どこで実行しても同じ結果が得られる」という冪等性の極致を実現できます。
—
2. 準備するもの:Podmanとansible-builder
まずは道具を揃えましょう。DockerではなくPodmanを使うのが現代の標準です。デーモンレスでセキュア、かつrootlessで動かせるPodmanは、インフラ自動化と極めて相性が良いからです。
インストール(RHEL/CentOS/Fedora系)
Podmanとansible-builderをインストール
sudo dnf install podman ansible-builder -y
—
3. カスタムEEイメージを作成する(ansible-builderの流儀)
EEを作成するには、`ansible-builder`というツールを使います。これを使うと、必要なCollectionやシステムライブラリを定義するだけで、最適なイメージを自動構築してくれます。
構成ファイル `execution-environment.yml` の作成
作業ディレクトリに以下のファイルを作成してください。これがあなたの「理想の環境」の設計図です。
—
version: 3
images:
base_image:
# ベースとなる汎用イメージを指定
name: registry.redhat.io/ansible-automation-platform-24/ee-minimal-rhel9:latest
dependencies:
# 必要なAnsible Collectionを定義
galaxy:
collections:
- community.general
- kubernetes.core
# Pythonライブラリの定義
python:
- kubernetes
- openshift
# OSレベルの依存関係(必要であれば)
system:
- bind-utils
ビルドの実行
以下のコマンドで、この設計図を元にコンテナイメージを焼き上げます。
ansible-builder build -t my-custom-ee:latest
※ 初回はベースイメージのダウンロードとPython環境の最適化が行われるため、コーヒーを一杯飲んで待っていてください。
—
4. HelloWorld:コンテナでAnsibleを叩く
作成したEEを使い、ローカルでコマンドを実行してみましょう。これが「現場で震えるほど役立つ」瞬間です。
podman runを使ってEE内でansible-playbookを実行する
podman run –rm -v $(pwd):/runner:Z \
my-custom-ee:latest \
ansible-playbook /runner/playbook.yml
なぜこれが素晴らしいのか?
- `-v $(pwd):/runner:Z`: 現在のディレクトリをコンテナ内にマウントしています。ホスト側の環境を一切汚しません。
- `–rm`: 実行が終わればコンテナは自動消滅します。常にクリーンな状態から始まります。
—
5. 実践的なトラブルシューティングのヒント
EE運用でハマりやすいポイントとその解決策を伝授します。
1. 「コマンドが見つからない」エラー:
`ansible-builder`で指定したCollectionが正しくインストールされているか確認してください。また、`ansible-builder inspect`コマンドで、ビルドされたイメージ内に何が含まれているかを確認できます。
2. SSH認証が通らない:
コンテナ内からはホストのSSH Agentが見えません。実行時に `-v $SSH_AUTH_SOCK:/ssh-agent` を指定し、環境変数 `SSH_AUTH_SOCK` をコンテナに渡してやる必要があります。
3. パーミッションエラー:
Podmanの`-Z`オプション(SELinuxラベル付け)を忘れていませんか?これを付けることで、コンテナとホスト間のファイルアクセス権限問題を解決できます。
—
最後に:自動化の先にあるもの
EEをマスターするということは、「自分の自動化コードが、誰のPCでも、どのサーバーでも、クラウド上でも寸分違わず動く」という強力な武器を手に入れることを意味します。
これからは、「環境構築が面倒だから」という理由で自動化を諦める必要はありません。まずは簡単なPlaybookをEE経由で動かすことから始めてみてください。
もし、さらに深い「CI/CDパイプラインへの統合」や「巨大な環境でのEE配布戦略」に興味があれば、またいつでも聞いてください。あなたの自動化の旅を、全力でサポートします。
さあ、次はどんなインフラをコードで支配しますか?