Ansible プレイブックの基礎

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Ansible プレイブックの基本を学びます。Ansible プレイブックは、リモート ホストで実行する一連のタスクを記述する YAML ファイルです。これらは、複雑な IT 自動化ワークフローの構築ブロックです。最初のプレイブックを作成し、その構造を理解し、実行方法を学びます。この実験が終了すると、Ansible プレイブックの作成と実行に関する実践経験を得ることができ、より高度な Ansible の使用に役立つ基礎を築くことができます。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 99%です。学習者から 100% の好評価を得ています。

最初のプレイブックを作成する

最初に、ローカル マシン上にディレクトリとファイルを作成する簡単な Ansible プレイブックを作成しましょう。これにより、プレイブックの基本構造と実行方法を理解する手助けになります。

まず、/home/labex/project ディレクトリに新しいファイル first_playbook.yml を作成しましょう。

nano /home/labex/project/first_playbook.yml

このコマンドは nano テキスト エディタを開きます。nano に慣れていない場合は心配しないでください。簡単なテキスト エディタです。直接入力できます。

次に、ファイルに以下の内容を追加します。

---
- name: My First Playbook
  hosts: localhost
  connection: local
  tasks:
    - name: Create a directory
      file:
        path: /home/labex/project/test_directory
        state: directory
        mode: "0755"

    - name: Create a file
      copy:
        content: "Hello from Ansible!"
        dest: /home/labex/project/test_directory/hello.txt

このプレイブックを分解して各部分を理解しましょう。

  • 先頭の --- は YAML ファイルの始まりを示します。YAML は Ansible プレイブックに使用される形式です。
  • name: My First Playbook はこのプレイの説明的な名前です。このプレイブックが何をするかを識別するのに役立ちます。
  • hosts: localhost はこのプレイブックがローカル マシン上で実行されることを指定します。実際のシナリオでは、ここにリモート ホストを指定する場合があります。
  • connection: local は Ansible に対して、SSH を使用せずにローカルでプレイブックを実行するように指示します。これは、テストや Ansible コントロール ノード自体で実行する必要のあるタスクに役立ちます。
  • tasks: の後に実行するタスクのリストが続きます。各タスクは、Ansible に実行してもらいたいアクションです。
  • 各タスクには説明用の name があります。これにより、各タスクが何をするかを理解しやすくなり、トラブルシューティングが容易になります。
  • タスクでは Ansible モジュールが使用されます。
    • file モジュールはディレクトリを作成するために使用されます。
    • copy モジュールは特定の内容でファイルを作成するために使用されます。

まだすべてのモジュールを理解していなくても心配しないでください。進めるにつれて、さらに多くのモジュールとその使い方を学びます。

エディタを保存して終了します。nano では、Ctrl+X を押してから Y を押し、その後 Enter を押すことで行えます。

次に、このプレイブックを実行しましょう。ターミナルで次のコマンドを入力します。

ansible-playbook /home/labex/project/first_playbook.yml

このコマンドは Ansible に対して、先ほど作成したプレイブックを実行するように指示します。以下のような出力が表示されるはずです。

PLAY [My First Playbook] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create a directory] ******************************************************
changed: [localhost]

TASK [Create a file] ***********************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

この出力は、Ansible がタスクを正常に実行したことを示しています。「changed」の状態は、Ansible がシステムに変更を加えたこと (ディレクトリとファイルを作成したこと) を示しています。

手動で結果を確認したい場合は、次のコマンドを使用できます。

ls -l /home/labex/project/test_directory
cat /home/labex/project/test_directory/hello.txt

最初のコマンドは作成したディレクトリを表示し、2 番目のコマンドは作成したファイルの内容を表示します。

プレイブックの構造を理解する

最初のプレイブックを作成して実行したので、その構造についてもう少し深く掘り下げてみましょう。プレイブックの構造を理解することは、これからより複雑な自動化タスクを書く上で重要です。

Ansible プレイブックは 1 つ以上のプレイで構成されており、各プレイはいくつかの重要な要素で構成されています。各部分を説明するコメントを追加するために、first_playbook.yml ファイルを編集しましょう。

nano /home/labex/project/first_playbook.yml

内容を以下のように更新します。

---
## プレイブックは 3 つのハイフンで始まります
- name: My First Playbook ## プレイの名前
  hosts: localhost ## このプレイの対象ホスト(複数可)
  connection: local ## 接続タイプ(この場合はローカル)

  tasks: ## 実行するタスクのリスト
    - name: Create a directory ## 最初のタスクの名前
      file: ## このタスクには 'file' モジュールが使用されます
        path: /home/labex/project/test_directory ## 作成するディレクトリのパス
        state: directory ## 望ましい状態(ディレクトリを作成する)
        mode: "0755" ## ディレクトリのパーミッション

    - name: Create a file ## 2 番目のタスクの名前
      copy: ## このタスクには 'copy' モジュールが使用されます
        content: "Hello from Ansible!" ## ファイルに書き込む内容
        dest: /home/labex/project/test_directory/hello.txt ## ファイルの出力先パス

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

このコメント付きのプレイブックのバージョンは、各要素の構造と目的を理解するのに役立ちます。覚えておくべき重要なポイントは以下の通りです。

  1. プレイブックには複数のプレイが含まれていてもよく、各プレイはハイフン (-) で始まります。この場合、プレイは 1 つだけです。
  2. 各プレイは特定のホストを対象とし、タスクのリストを定義します。hosts フィールドは、このプレイが実行されるマシンを指定します。
  3. タスクは Ansible モジュール(例:filecopy)を使用してアクションを実行します。Ansible にはさまざまな目的に対応した多数の組み込みモジュールがあります。
  4. 各タスクには説明的な名前が付けられている必要があります。これにより、タスクが何を行うかを理解しやすくなり、トラブルシューティングがしやすくなります。
  5. YAML ファイルではインデントが重要です。プレイブックが正しくインデントされていることを確認してください。インデントが間違っていると、プレイブックを実行する際にエラーが発生する場合があります。

file モジュールは汎用性が高く、ファイルやディレクトリの作成、変更、削除に使用できます。この例では、ディレクトリを作成するために使用しています。

copy モジュールは、ファイルをリモート ロケーションにコピーするために使用されます。この例では、特定の内容で新しいファイルを作成するために使用しています。

これらの基本構造を理解することは、これからより複雑なプレイブックを作成する際に役立ちます。

プレイブックに変数を追加する

変数を使うことで、プレイブックをより柔軟で再利用可能にすることができます。これにより、プレイブック自体を変更することなく、さまざまなシナリオに対応できるプレイブックを書くことができます。変数を使ってプレイブックを変更してみましょう。

first_playbook.yml ファイルを編集します。

nano /home/labex/project/first_playbook.yml

内容を以下のように更新します。

---
- name: My First Playbook
  hosts: localhost
  connection: local
  vars:
    dir_path: /home/labex/project/test_directory
    file_content: "Hello from Ansible! The time is {{ ansible_date_time.iso8601 }}"

  tasks:
    - name: Create a directory
      file:
        path: "{{ dir_path }}"
        state: directory
        mode: "0755"

    - name: Create a file
      copy:
        content: "{{ file_content }}"
        dest: "{{ dir_path }}/hello.txt"

    - name: Display file content
      debug:
        msg: "The content of the file is: {{ file_content }}"

この更新されたプレイブックの変更点と新しい要素を分解してみましょう。

  1. 変数を定義するために vars セクションを追加しました。ここでは、プレイブック内で何度も使用する値を設定できます。
  2. dir_pathfile_content が現在変数になっています。これらの値を一か所で簡単に変更することで、複数のタスクに影響を与えることができます。
  3. 変数を参照するために {{ }} 構文を使用しています。これは Ansible に対して、変数をその値に置き換えるように指示するものです。
  4. 現在のタイムスタンプを含めるために、Ansible の組み込み変数 ansible_date_time.iso8601 を使用しています。Ansible には、プレイブックで使用できる多くのそのような変数が用意されています。
  5. debug モジュールを使用する新しいタスクが追加されています。debug モジュールは、プレイブックの実行中に情報を表示する際に非常に役立ち、トラブルシューティングに役立ちます。

変数の使用により、このプレイブックはより柔軟になります。たとえば、ディレクトリ パスを変更したい場合、vars セクションのみを変更すればよく、各タスクで変更する必要はありません。

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

次に、更新されたプレイブックを実行しましょう。

ansible-playbook /home/labex/project/first_playbook.yml

タスクの実行状況が表示され、現在のタイムスタンプ付きのファイル内容が表示されるデバッグ メッセージも含まれるはずです。出力は以下のようになります。

PLAY [My First Playbook] ******************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create a directory] ******************************************************
ok: [localhost]

TASK [Create a file] ***********************************************************
changed: [localhost]

TASK [Display file content] ****************************************************
ok: [localhost] => {
    "msg": "The content of the file is: Hello from Ansible! The time is 2023-06-09T12:34:56Z"
}

PLAY RECAP *********************************************************************
localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

実際のタイムスタンプは、プレイブックを実行する際には異なります。

これは、変数がプレイブックをより動的にする方法を示しています。現在、ファイル内容にはタイムスタンプが含まれており、プレイブックを実行するたびに異なります。

まとめ

この実験では、Ansible プレイブックの基本を学びました。最初の簡単なプレイブックを作成してから、その構造を理解し、変数を使ってプレイブックをより動的で再利用可能にするまでの道のりをたどりました。

この実験の要点は以下の通りです。

  1. Ansible プレイブックは YAML 形式で書かれ、指定されたホストで実行する一連のタスクを記述します。
  2. プレイブックは 1 つ以上のプレイで構成されており、各プレイにはタスクのリストが含まれています。
  3. タスクは Ansible モジュールを使用して対象ホストでアクションを実行します。この実験では、filecopydebug モジュールを使用しました。
  4. 変数を定義してプレイブックで使用することができ、柔軟性と再利用可能性を高めることができます。変数は {{ }} 構文を使用して参照されます。
  5. debug モジュールは、プレイブックの実行中に情報を表示する際に役立ち、トラブルシューティングに役立ちます。
  6. YAML ファイルと Ansible プレイブックでは、適切なインデントが重要です。

Ansible の学習を続けるにつれて、プレイブックは複雑な IT タスクを自動化するための強力なツールであることがわかります。さまざまなシナリオに対応するプレイブックを書く練習をして、その構造と機能に慣れましょう。今日作成したプレイブックを変更してみましょう。ディレクトリ パスを変更したり、タスクを追加したり、異なるモジュールを使用したりしてみてください。

これからの実験では、条件分岐、ループ、ロールなどのより高度なプレイブック機能について学びます。これにより、さらに強力で柔軟な自動化ワークフローを作成することができます。

覚えておいてください。Ansible をマスターするキーは練習と探求心です。プレイブックでさまざまなモジュールや構造を試してみることを恐れないでください。Ansible のドキュメントは、学習を続け、技術力を伸ばす上で非常に優れたリソースです。