managing-configuration について
システム管理者や運用チーム向けのAnsible構成管理スキルです。再実行可能なPlaybook、再利用可能なロール、インベントリとシークレットの管理、デプロイ前のテストを案内し、ChefやPuppetからの移行と構成のコード化も扱います。
主な機能
- 01Playbookの作成と再利用可能なロールの構成
- 02静的・動的インベントリの管理
- 03ansible-vaultによるシークレット管理
- 04Moleculeとチェックモードによるテスト
- 05冪等性とGitOpsの実践
活用シーン
- 01サーバーの構成とアプリケーションのデプロイ
- 02デプロイ前のAnsibleロールのテスト
- 03クラウド環境からの動的インベントリ生成
- 04ChefやPuppetの構成をAnsibleへ移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill managing-configurationインストール後、Claude Code で/managing-configurationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
outputs.yamlexamples/inventory/dynamic-aws/aws_ec2.ymlexamples/inventory/static-ini/hostsexamples/playbooks/multi-tier-app.ymlsimple-webserver.ymlreferences/chef-puppet-migration.mddecision-framework.mdidempotency-guide.mdinventory-management.mdplaybook-patterns.mdrole-structure.mdsecrets-management.mdtesting-guide.mdtroubleshooting.md詳細
構成管理
目的
このスキルでは、Ansible および関連ツールを使用して、サーバーやアプリケーションの構成を自動化する方法を説明します。安全で再現性の高い構成のデプロイを実現するため、プレイブックの作成、ロールの構成、インベントリ管理(静的・動的)、シークレット管理、テストのパターン、冪等性に関するベストプラクティスを取り上げます。
このスキルを使用する場面
次のような場合に、このスキルを呼び出してください:
- サーバーの構成やアプリケーションのデプロイに使用する Ansible プレイブックを作成するとき
- 適切なディレクトリ構成で再利用可能な Ansible ロールを構成するとき
- インベントリ(静的ファイルまたはクラウドベースの動的インベントリ)を管理するとき
- ansible-vault や HashiCorp Vault との連携によりシークレットを保護するとき
- 本番環境へのデプロイ前に Molecule でロールをテストするとき
- 複数回実行しても安全な、冪等性のあるプレイブックを作成するとき
- Chef または Puppet から Ansible に移行するとき
- 構成をコードとして管理する GitOps ワークフローを実装するとき
- プレイブックの失敗やハンドラーの問題をデバッグするとき
クイックスタート
基本的なプレイブックの例
---
# site.yml
- name: Configure web servers
hosts: webservers
become: yes
tasks:
- name: Ensure nginx is installed
apt:
name: nginx
state: present
notify: Restart nginx
- name: Start nginx service
service:
name: nginx
state: started
enabled: yes
handlers:
- name: Restart nginx
service:
name: nginx
state: restarted
次のコマンドで実行します:
ansible-playbook -i inventory/production site.yml
主な概念
1. 冪等性
意図しない副作用を起こさずに、プレイブックを複数回実行できるようにします。命令型コマンドではなく、状態ベースのモジュール(present、started、latest)を使用します。
冪等性あり(推奨):
- name: Ensure package installed
apt:
name: nginx
state: present
冪等性なし(避けてください):
- name: Install package
command: apt-get install -y nginx
詳しいパターンについては、references/idempotency-guide.md を参照してください。
2. インベントリ管理
静的インベントリ: 安定した環境向けの INI または YAML ファイルです。 動的インベントリ: クラウド環境(AWS、Azure、GCP)向けのスクリプトまたはプラグインです。
静的インベントリの例(INI):
[webservers]
web1.example.com ansible_host=10.0.1.10
web2.example.com ansible_host=10.0.1.11
[webservers:vars]
nginx_worker_processes=4
動的インベントリの設定については、references/inventory-management.md を参照してください。
3. ロールとプレイブックの違い
プレイブック: 特定のデプロイに向けて、複数のタスクやロールをオーケストレーションします。 ロール: 標準化されたディレクトリ構成を持つ、再利用可能で自己完結した構成単位です。
標準的なロール構成:
roles/nginx/
├── defaults/ # Default variables
├── tasks/ # Task files
├── handlers/ # Change handlers
├── templates/ # Jinja2 templates
├── files/ # Static files
└── meta/ # Dependencies
ロールの構成パターンについて詳しくは、references/role-structure.md を参照してください。
4. シークレット管理
ansible-vault: 機密データを暗号化する組み込み機能です。 HashiCorp Vault: 動的な認証情報を扱える、エンタープライズ向けのシークレット管理機能です。
シークレットを暗号化します:
ansible-vault create group_vars/all/vault.yml
ansible-playbook site.yml --ask-vault-pass
Vault との連携については、references/secrets-management.md を参照してください。
よくあるワークフロー
ワークフロー 1:新しいプレイブックを作成する
ステップ 1: インベントリを定義する
# inventory/production
[webservers]
web1.example.com
web2.example.com
ステップ 2: プレイブックの構成を作成する
---
- name: Configure application
hosts: webservers
become: yes
pre_tasks:
- name: Update package cache
apt:
update_cache: yes
roles:
- common
- application
post_tasks:
- name: Verify service
uri:
url: http://localhost:8080/health
status_code: 200
ステップ 3: チェックモードでテストする
ansible-playbook -i inventory/production site.yml --check --diff
ステップ 4: プレイブックを実行する
ansible-playbook -i inventory/production site.yml
高度なパターンについては、references/playbook-patterns.md を参照してください。
ワークフロー 2:ロールを作成してテストする
ステップ 1: ロールの構成を初期化する
ansible-galaxy init roles/myapp
ステップ 2: タスクを定義する
# roles/myapp/tasks/main.yml
---
- name: Install application dependencies
apt:
name: "{{ item }}"
state: present
loop: "{{ myapp_dependencies }}"
- name: Deploy application
template:
src: app.conf.j2
dest: /etc/myapp/app.conf
notify: Restart myapp
ステップ 3: ハンドラーを追加する
# roles/myapp/handlers/main.yml
---
- name: Restart myapp
service:
name: myapp
state: restarted
ステップ 4: Molecule のテストを初期化する
cd roles/myapp
molecule init scenario default --driver-name docker
ステップ 5: テストを実行する
molecule test
テストのパターンについて詳しくは、references/testing-guide.md を参照してください。
ワークフロー 3:動的インベントリを設定する(AWS)
ステップ 1: AWS コレクションをインストールする
ansible-galaxy collection install amazon.aws
ステップ 2: 動的インベントリを設定する
# inventory/aws_ec2.yml
plugin: aws_ec2
regions:
- us-east-1
filters:
tag:Environment: production
instance-state-name: running
keyed_groups:
- key: tags.Role
prefix: role
hostnames:
- tag:Name
compose:
ansible_host: private_ip_address
ステップ 3: インベントリを確認する
ansible-inventory -i inventory/aws_ec2.yml --list
ステップ 4: プレイブックを実行する
ansible-playbook -i inventory/aws_ec2.yml site.yml
マルチクラウドのパターンについては、references/inventory-management.md を参照してください。
ワークフロー 4:ansible-vault でシークレットを保護する
ステップ 1: 暗号化された Vault ファイルを作成する
ansible-vault create group_vars/all/vault.yml
ステップ 2: シークレットを追加する
# group_vars/all/vault.yml (encrypted)
vault_db_password: "SuperSecretPassword"
vault_api_key: "sk-1234567890"
ステップ 3: 変数内で参照する
# group_vars/all/vars.yml (unencrypted)
db_password: "{{ vault_db_password }}"
api_key: "{{ vault_api_key }}"
ステップ 4: プレイブックで使用する
- name: Configure database
template:
src: db.conf.j2
dest: /etc/app/db.conf
vars:
database_password: "{{ db_password }}"
ステップ 5: Vault のパスワードを指定して実行する
ansible-playbook site.yml --vault-password-file ~/.vault_pass
HashiCorp Vault との連携については、references/secrets-management.md を参照してください。
ツールの選択
Ansible を使用する場面
- プロビジョニング後にサーバーや VM を構成するとき
- 既存のインフラストラクチャにアプリケーションをデプロイするとき
- OS レベルの設定(ユーザー、パッケージ、サービス)を管理するとき
- ホスト間で複数ステップのワークフローをオーケストレーションするとき
- クラウドネイティブ環境(エージェントレスの SSH/WinRM)で運用するとき
- 構成管理を初めて導入するチーム(最も学習しやすい)で利用するとき
代替手段を使用するタイミング
Infrastructure-as-Code(Terraform): クラウドインフラストラクチャのリソースを作成する場合。 Kubernetes: コンテナのオーケストレーションと設定を行う場合。 Chef/Puppet: 移行コストが高い既存のデプロイ環境を使用している場合。
Ansible と IaC の連携
ベストプラクティス:Terraform でプロビジョニングし、Ansible で設定します。
ワークフロー:
- Terraform で AWS EC2 インスタンス、セキュリティグループ、ロードバランサーを作成します
- Terraform の出力として、インスタンスの IP アドレスを Ansible のインベントリーに渡します
- Ansible で OS を設定し、パッケージをインストールして、アプリケーションをデプロイします
- Ansible で監視、バックアップ、運用タスクを設定します
詳細な意思決定ツリーについては、references/decision-framework.md を参照してください。
テストと品質
デプロイ前の検証
ステップ 1: Playbook をリントします
ansible-lint playbooks/
ステップ 2: チェックモード(ドライラン)
ansible-playbook site.yml --check --diff
ステップ 3: Molecule でロールをテストします
cd roles/myapp
molecule test
ステップ 4: 冪等性を確認します
molecule idempotence
設定ファイル
.ansible-lint:
---
exclude_paths:
- molecule/
- venv/
skip_list:
- name[casing]
warn_list:
- experimental
molecule.yml:
---
driver:
name: docker
platforms:
- name: instance
image: ubuntu:22.04
pre_build_image: true
provisioner:
name: ansible
verifier:
name: ansible
テスト戦略の全容については、references/testing-guide.md を参照してください。
トラブルシューティング
よくある問題
接続の失敗:
- SSH アクセスを確認します:
ansible all -i inventory -m ping - SSH キーを確認します:
ssh -vvv user@host - パスワードでテストします:
ansible-playbook site.yml --ask-pass
ハンドラーが実行されない:
- ハンドラーは変更があった場合にのみ実行されます(タスクの
changed状態を確認してください) - ハンドラーは Playbook の最後に実行されます(早めに実行するには
meta: flush_handlersを使用してください) - ハンドラー名は完全に一致している必要があります
変数が定義されていない:
- 変数の優先順位を確認します(コマンドライン > Playbook > インベントリー > デフォルト)
- デバッグモジュールを使用します:
- debug: var=myvar - 変数ファイルが読み込まれていることを確認します:
ansible-playbook site.yml -v
冪等性の違反:
- Playbook を 2 回実行し、出力を比較します
- 毎回の実行で
changedが発生していないか確認します command/shellの代わりに、状態ベースのモジュールを使用します
包括的なデバッグガイドについては、references/troubleshooting.md を参照してください。
他のスキルとの連携
infrastructure-as-code:
- Terraform でインフラストラクチャをプロビジョニングします
- Ansible でプロビジョニング後の設定を行います
- Terraform の出力を Ansible のインベントリーに渡します
kubernetes-operations:
- Ansible で K8s クラスターをデプロイします(kubespray)
- Kubernetes でコンテナのオーケストレーションを行います
- Ansible でノードレベルの設定を管理します
building-ci-pipelines:
- CI/CD で ansible-lint を実行し、品質をチェックします
- パイプライン内で Molecule のテストを実行します
- デプロイステージで Playbook を実行します
secret-management:
- シンプルな用途には ansible-vault を使用します
- エンタープライズのシークレットには HashiCorp Vault を使用します
- Vault のルックアップで動的な認証情報を取得します
security-hardening:
- Ansible で CIS ベンチマークを適用します
- セキュリティロールでコンプライアンスを徹底します
- Molecule でセキュリティ強化の有効性を検証します
testing-strategies:
- ロールのテストには Molecule を使用します
- 検証には Testinfra を使用します
- 統合テストスイートを使用します
参考ドキュメント
references/playbook-patterns.md- Playbook の構造、ハンドラー、タグ、変数references/role-structure.md- ロールのディレクトリ構成、ベストプラクティス、コレクションreferences/inventory-management.md- 静的、動的、ハイブリッドなインベントリーパターンreferences/secrets-management.md- ansible-vault と HashiCorp Vault の連携references/testing-guide.md- Molecule、ansible-lint、チェックモード、検証references/idempotency-guide.md- 安全で再現性のある実行を保証する方法references/decision-framework.md- ツールの選定とワークフローの設計references/chef-puppet-migration.md- レガシーツールから Ansible への移行references/troubleshooting.md- よくある問題とデバッグ手法
コード例
examples/playbooks/- Playbook の完全な例examples/roles/- 本番環境向けのロールテンプレートexamples/inventory/- 静的および動的なインベントリー設定examples/molecule/- Molecule のテストシナリオ
ユーティリティスクリプト
scripts/validate-playbook.py- プレイブックの構文と構造を検証しますscripts/generate-inventory.py- クラウドプロバイダーからインベントリーを生成しますscripts/ansible-vault-helper.sh- Vault 管理ユーティリティscripts/molecule-runner.sh- Molecule テストを自動実行します