mcpField
M
managing-configuration

managing-configuration

github.com/ancolemanクラウド・DevOps52563 回インストール46 週間前に更新
リポジトリ

managing-configuration について

システム管理者や運用チーム向けのAnsible構成管理スキルです。再実行可能なPlaybook、再利用可能なロール、インベントリとシークレットの管理、デプロイ前のテストを案内し、ChefやPuppetからの移行と構成のコード化も扱います。

主な機能

  1. 01Playbookの作成と再利用可能なロールの構成
  2. 02静的・動的インベントリの管理
  3. 03ansible-vaultによるシークレット管理
  4. 04Moleculeとチェックモードによるテスト
  5. 05冪等性とGitOpsの実践

活用シーン

  1. 01サーバーの構成とアプリケーションのデプロイ
  2. 02デプロイ前のAnsibleロールのテスト
  3. 03クラウド環境からの動的インベントリ生成
  4. 04ChefやPuppetの構成をAnsibleへ移行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ancoleman/ai-design-components --skill managing-configuration

インストール後、Claude Code で/managing-configurationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

outputs.yaml
examples/inventory/dynamic-aws/
aws_ec2.yml
examples/inventory/static-ini/
hosts
examples/playbooks/
multi-tier-app.yml
simple-webserver.yml
references/
chef-puppet-migration.md
decision-framework.md
idempotency-guide.md
inventory-management.md
playbook-patterns.md
role-structure.md
secrets-management.md
testing-guide.md
troubleshooting.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 で設定します。

ワークフロー:

  1. Terraform で AWS EC2 インスタンス、セキュリティグループ、ロードバランサーを作成します
  2. Terraform の出力として、インスタンスの IP アドレスを Ansible のインベントリーに渡します
  3. Ansible で OS を設定し、パッケージをインストールして、アプリケーションをデプロイします
  4. 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 テストを自動実行します

コメント