はじめに
Ansible Automation Platform (AAP) の構成において、Web UI(コントローラー)上の設定項目を手動操作で管理することは、構成の属人化や環境差分の要因となります。
本記事では、AAP の構成を宣言的なコードとして管理する Configuration as Code (CaC) の実装手法について、AI パートナー「IBM Bob」を活用した開発プロセスとともにご紹介します。
Configuration as Code (CaC) とは
CaC は、コントローラーの設定(組織、プロジェクト、ジョブテンプレート、認証情報等)を Ansible Playbook および YAML 形式の変数ファイルで定義する手法です。
対象: 組織、ユーザー、インベントリ、プロジェクト、ジョブテンプレート、認証情報など
使用コレクション: infra.aap_configuration
このコレクションは、個別の ansible.controller モジュールをラップした「ロール」を提供しており、大量の設定を一括で行うのに適しています。 使用者はロールのコードを自作することなく、変数ファイルを用意するのみで目的の構成を実現することが可能になります。
主なメリット:
・ 環境の再現性と冪等性: 開発・検証・本番環境への同一構成の展開を保証。
・ 構成の可視化: 設定内容がそのままドキュメント(コード)として機能。
・ 変更管理: Git 等のバージョン管理システムとの連携による、変更履歴の追跡とロールバックの容易化。
検証環境と使用ツール
-
Platform: Ansible Automation Platform 2.6.4
-
Infrastructure: RHEL 9.6 (アーキテクチャー: ppc64le / CPU 0.25, Memory 28 GiB)
-
AI Assistant: IBM Bob (開発・トラブルシューティング支援)
-
Execution Host: macOS (CaC 実行用)
AI パートナー (IBM Bob) を活用した効率化
今回のコード作成では、AIパートナーである IBM Bob を活用しました。
変数設計: infra.aap_configuration は柔軟な反面、変数構造が複雑です。Bob に構造を理解させ、定義ファイル(organizations.yml, projects.yml 等)を生成しました。
デバッグプロセスの高速化: Bob により実行時のトレースバックやエラーログを解析し、ディレクトリ構造や変数の不整合を即座に特定し、手動での問題判別時間を大幅に削減することができました。
プロジェクト構成と実装
管理対象リソースごとに変数ファイルを分割するモジュール型の構成を採用しました。
aap_cac/
├── README.md
├── ansible.cfg
├── deploy.yml # メインPlaybook
├── requirements.yml
├── .vault_pass # Vaultパスワード (Git対象外)
├── inventory/
│ └── hosts
└── group_vars/
└── all/
├── settings.yml # AAPシステム設定
├── organizations.yml # 組織定義
├── users.yml # ユーザー・チーム・ロール
├── credentials.yml # 認証情報
├── projects.yml # プロジェクト
├── inventories.yml # インベントリ
├── templates.yml # ジョブテンプレート
├── workflows.yml # ワークフロージョブテンプレート
├── schedules.yml # スケジュール
├── notifications.yml # 通知設定
└── vault.yml # 機密情報 (暗号化対象)
ポイント: 多くのファイルを分割していますが、Ansible の仕様により group_vars/all/ 直下のファイルはすべて自動的に読み込まれます。これにより、カテゴリ単位で管理が可能になります。
実装例: Organization 定義 (organizations.yml)
infra.aap_configuration.controller_organizations ロールへ渡す変数定義の例です。
---
aap_organizations:
- name: "Development"
description: "Development Organization"
# ホスト数の制限 (0 = 無制限)
max_hosts: 0
# 実行環境のデフォルト設定などをここに記述することも可能です
# default_environment: "My Custom Execution Environment"
実装例: 実行コード (deploy.yml)
Configuration as Code 実行の中心となる Playbook の一部です。
ここでは ユーザー・チーム を構成する部分のみ抜粋しています。
それぞれの変数(aap_user_accounts、aap_teams)は
group_vars/all/users.yml
group_vars/all/teams.yml
に記述され、自動的にロードされる前提です
# 2. Users を作成
- name: Debug - Show Users variable
ansible.builtin.debug:
var: aap_user_accounts
- name: Configure Users
ansible.builtin.include_role:
name: infra.aap_configuration.controller_users
when: aap_user_accounts is defined
# 3. Teams を作成
- name: Debug - Show Teams variable
ansible.builtin.debug:
var: aap_teams
- name: Configure Teams
ansible.builtin.include_role:
name: infra.aap_configuration.controller_teams
when: aap_teams is defined
環境構築と実行
- 実行環境分離
ホスト環境の分離を担保するため、Python 仮想環境(venv)上で実行します。
$ source venv/bin/activate
(venv) $
- コレクションの導入
導入するコレクションは requirements.yml に記載しています。
---
collections:
- name: infra.aap_configuration
- name: ansible.controller
./collections ディレクトリを指定して、コレクション導入を実行します。
(venv) $ ansible-galaxy collection install -r requirements.yml -p ./collections
- 機密情報の管理
暗号化が必要なトークンやパスワードは、ansible-vault を用いて保護します。
# 既存ファイルの暗号化
(venv) $ ansible-vault encrypt group_vars/all/vault.yml
- 構成の適用
環境変数で接続情報を設定します。これらの環境変数は、Ansible Controller コレクションが共通して認識する標準的な変数名です。
# AAP への接続情報(認証トークンやパスワードなど)は環境変数または変数で別途与える必要があります
# export CONTROLLER_HOST=https://your-aap-controller
# export CONTROLLER_USERNAME=admin
# export CONTROLLER_PASSWORD=<password>
# export CONTROLLER_VERIFY_SSL=false
Configuration as Code の実行
(venv) $ ansible-playbook deploy.yml
PLAY [Prepare Manual Project Files on AAP Server] **************************************************
~ 省略 ~
TASK [Configure Projects] **************************************************************************
included: infra.aap_configuration.controller_projects for localhost
TASK [infra.aap_configuration.controller_projects : Validating arguments against arg spec 'main' - An Ansible Role to create projects on Ansible Controller.] ***
ok: [localhost]
TASK [infra.aap_configuration.controller_projects : Managing Projects] *****************************
ok: [localhost] => (item=Create/Update Project Dev Manual Project)
~ 省略 ~
TASK [Configure Workflows] *************************************************************************
included: infra.aap_configuration.controller_workflow_job_templates for localhost
TASK [infra.aap_configuration.controller_workflow_job_templates : Validating arguments against arg spec 'main' - An Ansible Role to create workflow job templates on Ansible Controller.] ***
ok: [localhost]
~ 省略 ~
PLAY RECAP *****************************************************************************************
aap_controller_ansible : ok=8 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
localhost : ok=66 changed=14 unreachable=0 failed=0 skipped=20 rescued=0 ignored=0
(venv) $
処理実行でエラーが出た時の問題判別では Bob にエラー・ログを渡して、コード修正含めて実施しました。
(Bob画面)
GUIで作成できているかどうかを確認します。
実行結果の確認
Playbook 適用後、AAP の Web UI より定義したリソース(組織、チーム、ユーザー、認証情報、プロジェクト、テンプレート、スケジュール)が正常に構成されていることを確認しました。
- 組織
Development を作成できました。
- チーム
Dev Team チームを作成できました。
- ユーザー
test1 ユーザーを作成できました。
- 認証情報
Dev Machine Credential, git_credential2 を作成できました。
- プロジェクト
Dev Manual Project を作成できました。
- インベントリー
Dev Inventory を作成できました。
- テンプレート
Development 組織に属している Demo Workflow、Hello World Job、Maintenance Job を作成できました。
- スケジュール
Hello World Job を実行する Daily Morning Run を作成できました。
おわりに
今回の検証を通して、CaC(Configuration as Code)の導入が単なる「構築時間の短縮」だけでなく、「設定の標準化」を進める上で有効であることを再確認しました。
特に、管理対象が多い大規模な AAP 環境において、手動操作によるエラーを「仕組み」で排除できる点は、運用を安定させる上では利点となります。一度コード化してしまえば、誰が実行しても同じ環境が手に入れることが可能となります。
また、開発プロセスにおいて IBM Bob を活用したことで、複雑な変数構造の解析やデバッグにかかる工数を多くに削減できています。一人でマニュアルと向き合う時間を大幅に短縮できていると思います。
今後、構成パターンのバリエーションを拡充して、多様な環境へ柔軟に対応できるよう準備を進めていきたいと考えています。
以上です。








