Ansible のアドホックコマンド

AnsibleBeginner
オンラインで実践に進む

はじめに

この実験では、Ansible のアドホックコマンドについて学びます。アドホックコマンドは、完全なプレイブックが必要なく実行できる迅速な単発のタスクです。システムステータスの確認、ファイルの管理、または複数のサーバーでの迅速なコマンドの実行など、簡単な操作に最適です。この実験が終了するまでに、アドホックコマンドを効果的に使用する方法を理解しています。これは、Ansible で管理される環境での迅速なタスクの実行とトラブルシューティングにとって重要です。

Ansible のアドホックコマンド構造の理解

Ansible のアドホックコマンドの基本構造を理解することから始めましょう。一般的な構文は次のとおりです。

ansible [pattern] -m [module] -a "[module options]"

ここで:

  • [pattern]は、対象とするインベントリ内のホストまたはホストグループです。
  • -m [module]は、使用する Ansible モジュールを指定します。
  • -a "[module options]"は、モジュールに引数を提供します。

コマンドを実行する前に、適切なインベントリファイルがあることを確認しましょう。インベントリファイルを作成または編集します。

nano /home/labex/project/inventory

次の内容を追加します。

localhost ansible_connection=local

[webservers]
localhost

[dbservers]
localhost

エディタを保存して終了します。

次に、インベントリ内のすべてのホストに ping を送信する簡単なアドホックコマンドを試してみましょう。

ansible all -i /home/labex/project/inventory -m ping

次のような出力が表示されるはずです。

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

このコマンドは、pingモジュールを使用して、インベントリ内のすべてのホストへの接続性を確認します。allキーワードはすべてのホストを対象とします。

このコマンドを分解してみましょう。

  • allはパターンで、インベントリ内のすべてのホストを対象とします。
  • -i /home/labex/project/inventoryは使用するインベントリファイルを指定します。
  • -m pingは、Ansible にpingモジュールを使用するように指示します。

Command モジュールを使ったコマンドの実行

アドホックコマンドで最も一般的に使用されるモジュールの 1 つは、commandモジュールです。これを使うと、対象のホストで任意のコマンドを実行できます。

すべてのホストのディスク使用量を確認するために、commandモジュールを使ってみましょう。

ansible all -i /home/labex/project/inventory -m command -a "df -h"

ローカルマシンのディスク使用状況が表示されるはずです。

次に、webservers グループのホストだけでコマンドを実行してみましょう。

ansible webservers -i /home/labex/project/inventory -m command -a "uptime"

このコマンドは、webservers グループのすべてのホストの稼働時間を表示します。

commandモジュールはデフォルトのモジュールなので、このモジュールを使っている場合は-m commandを省略できます。たとえば:

ansible dbservers -i /home/labex/project/inventory -a "free -m"

このコマンドは、dbservers グループのすべてのホストのメモリ使用量を表示します。

覚えておいてください。commandモジュールは、シェル変数や|><&などの操作をサポートしていません。それらを使う場合は、shellモジュールを使う必要があります。

アドホックコマンドでの他の便利なモジュールの使用

commandモジュールは汎用性が高いですが、Ansible にはアドホックコマンドで非常に便利な多くの他のモジュールが用意されています。それらのいくつかを見てみましょう。

  1. copyモジュール:
    このモジュールは、ローカルマシンからリモートホストにファイルをコピーするために使用されます。簡単なファイルを作成してすべてのホストにコピーしてみましょう。

    echo "Hello from Ansible" > /home/labex/project/hello.txt
    ansible all -i /home/labex/project/inventory -m copy -a "src=/home/labex/project/hello.txt dest=/tmp/hello.txt"

    このコマンドは、ローカルマシンのhello.txtファイルをすべてのリモートホストの/tmpディレクトリにコピーします。

  2. fileモジュール:
    このモジュールは、ファイルとディレクトリを管理するために使用されます。すべての webservers にディレクトリを作成してみましょう。

    ansible webservers -i /home/labex/project/inventory -m file -a "path=/tmp/test_dir state=directory mode=0755"

    このコマンドは、すべての webservers の/tmpディレクトリにtest_dirという名前のディレクトリを作成し、パーミッションを 0755 に設定します。

  3. setupモジュール:
    このモジュールは、リモートホストに関する情報を収集するために使用されます。プレイブックの最初に自動的に実行されますが、アドホックコマンドでも使用できます。

    ansible dbservers -i /home/labex/project/inventory -m setup

    このコマンドは、dbservers グループのホストに関する大量の情報を表示します。出力を制限するには、フィルタを使用できます。

    ansible dbservers -i /home/labex/project/inventory -m setup -a "filter=ansible_distribution*"

    これは、オペレーティングシステムの配布に関連する情報のみを表示します。

これらの例は、アドホックコマンドを使ってさまざまなタスクを迅速に実行するために、さまざまなモジュールをどのように使用するかを示しています。

まとめ

この実験では、Ansible のアドホックコマンドとそれを効果的に使用する方法について学びました。以下が要点です。

  1. アドホックコマンドは、完全なプレイブックを作成することなく実行できる迅速な単発のタスクです。

  2. アドホックコマンドの基本構造は次のとおりです。

    ansible [pattern] -m [module] -a "[module options]"
  3. pingモジュールは、ホストへの接続性を確認するのに役立ちます。

  4. commandモジュールを使うと、対象のホストで任意のコマンドを実行できます。これはデフォルトのモジュールなので、-m commandを省略できます。

  5. アドホックコマンドに便利な他のモジュールには、次のものがあります。

    • copy:リモートホストにファイルをコピーするため
    • file:ファイルとディレクトリを管理するため
    • setup:リモートホストに関する情報を収集するため
  6. インベントリファイルで定義されたグループ名を使って、特定のホストグループを対象にすることができます。

  7. アドホックコマンドは迅速なタスクに最適ですが、より複雑または繰り返し可能な操作の場合は、プレイブックの方が適しています。

アドホックコマンドは Ansible の強力な機能で、インフラストラクチャ全体で迅速なタスクを実行できます。トラブルシューティング、情報収集、または迅速な変更に特に役立ちます。ただし、より複雑または繰り返し可能なタスクの場合は、プレイブックを使用する方が良いでしょう。

Ansible を使い続ける際には、アドホックコマンドでさまざまなモジュールを使って練習しましょう。Ansible のドキュメントを調べて、さらに多くのモジュールとその使い方を学びましょう。アドホックコマンドは強力ですが、プレイブックのような冪等性と再現性は備えていません。したがって、本番環境では慎重に使用してください。