mcpField
A
ansible

ansible

github.com/alphaonedevクラウド・DevOps46 回インストール
リポジトリ

ansible について

Ansibleは、インフラ構成、アプリケーションのデプロイ、タスクの調整をYAMLのプレイブックで行うオープンソースの自動化ツールです。SSHまたはWinRMを使い、対象ホストにエージェントを導入せず冪等に実行できるため、ホスト間の定型作業を管理するDevOpsチームに適しています。

主な機能

  1. 01SSHまたはWinRMによるエージェントレス実行
  2. 02冪等なYAMLプレイブック
  3. 03再利用可能なモジュールとロール
  4. 04変数とJinja2テンプレート
  5. 05複数ホストでの順序付きタスク

活用シーン

  1. 01複数サーバーの構築と設定
  2. 02再現可能なプレイブックによるアプリのデプロイ
  3. 03CI/CDでのインフラタスク実行

インストール

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

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill ansible

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

詳細

ansible

目的

Ansible は、エージェントレスの YAML プレイブックを使って IT インフラストラクチャを構成し、アプリケーションをデプロイし、タスクをオーケストレーションするオープンソースの自動化ツールです。冪等性のある操作を実現するため、初期状態にかかわらず実行後は同じ結果になります。また、対象ホストにエージェントをインストールせず、SSH 経由で動作します。

使用する場面

サーバーのプロビジョニング、複数のサーバーにまたがる構成管理、動的な環境へのアプリのデプロイなど、DevOps パイプラインで繰り返し実行するインフラストラクチャのタスクに Ansible を使用します。リモートマシンのソフトウェア更新、複数ステップのワークフローのオーケストレーション、CI/CD ツールとの連携など、エージェントレスの自動化が必要な場合に適しています。一方、Prometheus などのツールが適しているリアルタイム監視には使用しないでください。

主な機能

  • エージェントレス実行:SSH または WinRM 経由で接続します。インベントリファイル(例:/etc/ansible/hosts)でホストを指定し、グループ化には [web:children] などの形式を使用します。
  • 冪等性のあるプレイブック:タスクを定義する YAML ファイルを作成します。たとえば、パッケージが存在しない場合にのみインストールするタスクを記述できます。
  • モジュールとロール:パッケージ管理には apt などの組み込みモジュールを使用します。コードを再利用できるようロールに整理し、roles/webserver/tasks/main.yml のようなディレクトリに保存します。
  • 変数とテンプレート:YAML で変数を定義し(例:{ "http_port": 80 })、Jinja2 テンプレートを使って、テンプレートから nginx.conf を生成するような動的な設定を作成します。
  • オーケストレーション:複数のホストにまたがるタスクを順序立てて実行するプレイで依存関係を処理し、実行順序を確保します。

使用パターン

タスクを自動化するには、ホスト、タスク、変数を含むプレイを定義したプレイブック(例:site.yml)を作成します。ansible-playbook コマンドを使って実行します。動的インベントリには、AWS EC2 から情報を取得する場合のように、JSON を出力するスクリプトを使用します。インベントリファイル、ホスト固有の変数を格納する group_vars、モジュール化されたコードを格納するロールでプロジェクトを構成します。変更を適用せずにシミュレーションするため、まず --check フラグを付けてプレイブックをテストしてください。

主なコマンド/API

  • プレイブックの実行:ansible-playbook site.yml --check --diff で変更をシミュレーションして表示します。ホストグループを限定するには -l web を追加します。
  • アドホックコマンド:ansible web -m ping で接続をテストします。任意のコマンドには -a "uptime" を使用します。
  • ロールの管理:ansible-galaxy install geerlingguy.apache でロールを取得します。ansible-galaxy init role_name でカスタムロールを作成します。
  • インベントリと変数:-e "var1=value1" で変数を設定するか、ホストキーの検証を省略するには export ANSIBLE_HOST_KEY_CHECKING=False のような環境変数を使用します。
  • API 連携:ansible_runner ライブラリを介して Ansible の Python API を使用します。たとえば、ansible_runner をインポートし、interface.run(playbook='site.yml', extravars={'key': 'value'}) を実行してプログラムから処理を実行できます。 認証には、SSH キー用の $ANSIBLE_PRIVATE_KEY_FILE=/path/to/key.pem や sudo パスワード用の $ANSIBLE_BECOME_PASS などの環境変数を使用します。

連携に関する注意点

スクリプトからプレイブックを実行して、Ansible を Jenkins などの CI/CD ツールと連携します。たとえば、Jenkinsfile では sh 'ansible-playbook deploy.yml -e "env=prod"' と記述します。クラウドプロバイダーには動的インベントリを使用します。たとえば、export AWS_ACCESS_KEY_ID=$AWS_KEY で AWS を設定してから ansible-playbook -i ec2.py site.yml を実行します。Terraform と組み合わせる場合は、プロビジョニング後に Ansible を実行し、変数をファイルまたは環境変数で渡してください。バージョン管理を利用し、プレイブックを Git に保存してパイプラインで取得します。

エラー処理

プレイブックでは、rescue と always の節を含むブロックを使用します。例:

- block:
    - debug: msg="Task succeeded"
  rescue:
    - debug: msg="Error occurred"
  always:
    - debug: msg="Cleanup step"

コマンドの終了コードを確認します。たとえば、スクリプトでは ansible-playbook site.yml && echo "Success" || echo "Failed" のようにします。よくある問題をデバッグするには、-vvv で詳細な出力を有効にし、SSH 接続やモジュールの失敗を調査します。変数エラーに対処するにはファクト収集を使用します。重要でないタスクには、問題を見落とさないよう適切な場合に限り ignore_errors: yes を設定します。

具体的な使用例

  1. Ubuntu ホストに Web サーバーをデプロイする:Apache をインストールするタスクを含むプレイブック(webserver.yml)を作成します:

    - hosts: webservers
      tasks:
        - name: Install Apache
          apt:
            name: apache2
            state: present
    

    次のコマンドで実行して、権限を昇格します:ansible-playbook webserver.yml -i inventory.txt --become

  2. 複数のホストで NTP を設定する:時刻を同期するプレイブック(ntp_config.yml)を作成します:

    - hosts: all
      tasks:
        - name: Install NTP
          yum:
            name: ntp
            state: latest
        - name: Start NTP service
          service:
            name: ntpd
            state: started
    

    次のコマンドを実行して、特定のグループを対象にします:ansible-playbook ntp_config.yml -l ntp_hosts

グラフの関係性

  • 関連項目:インフラストラクチャー・アズ・コードの terraform、コンテナオーケストレーションの kubernetes、CI/CD 統合の jenkins。いずれも devops-sre クラスター内にあります。
  • 依存関係:シークレット管理には vault と組み合わせて使うことがよくあります。
  • 競合:エージェントベースの管理を優先する場合は、Puppet などのツールとの併用を避けてください。

コメント