はじめに
この実験では、Ansible プレイブックの基本を学びます。Ansible プレイブックは、リモート ホストで実行する一連のタスクを記述する YAML ファイルです。これらは、複雑な IT 自動化ワークフローの構築ブロックです。最初のプレイブックを作成し、その構造を理解し、実行方法を学びます。この実験が終了すると、Ansible プレイブックの作成と実行に関する実践経験を得ることができ、より高度な Ansible の使用に役立つ基礎を築くことができます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Ansible プレイブックの基本を学びます。Ansible プレイブックは、リモート ホストで実行する一連のタスクを記述する YAML ファイルです。これらは、複雑な IT 自動化ワークフローの構築ブロックです。最初のプレイブックを作成し、その構造を理解し、実行方法を学びます。この実験が終了すると、Ansible プレイブックの作成と実行に関する実践経験を得ることができ、より高度な Ansible の使用に役立つ基礎を築くことができます。
最初に、ローカル マシン上にディレクトリとファイルを作成する簡単な 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
があります。これにより、各タスクが何をするかを理解しやすくなり、トラブルシューティングが容易になります。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 つだけです。hosts
フィールドは、このプレイが実行されるマシンを指定します。file
や copy
)を使用してアクションを実行します。Ansible にはさまざまな目的に対応した多数の組み込みモジュールがあります。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 }}"
この更新されたプレイブックの変更点と新しい要素を分解してみましょう。
vars
セクションを追加しました。ここでは、プレイブック内で何度も使用する値を設定できます。dir_path
と file_content
が現在変数になっています。これらの値を一か所で簡単に変更することで、複数のタスクに影響を与えることができます。{{ }}
構文を使用しています。これは Ansible に対して、変数をその値に置き換えるように指示するものです。ansible_date_time.iso8601
を使用しています。Ansible には、プレイブックで使用できる多くのそのような変数が用意されています。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 プレイブックの基本を学びました。最初の簡単なプレイブックを作成してから、その構造を理解し、変数を使ってプレイブックをより動的で再利用可能にするまでの道のりをたどりました。
この実験の要点は以下の通りです。
file
、copy
、debug
モジュールを使用しました。{{ }}
構文を使用して参照されます。debug
モジュールは、プレイブックの実行中に情報を表示する際に役立ち、トラブルシューティングに役立ちます。Ansible の学習を続けるにつれて、プレイブックは複雑な IT タスクを自動化するための強力なツールであることがわかります。さまざまなシナリオに対応するプレイブックを書く練習をして、その構造と機能に慣れましょう。今日作成したプレイブックを変更してみましょう。ディレクトリ パスを変更したり、タスクを追加したり、異なるモジュールを使用したりしてみてください。
これからの実験では、条件分岐、ループ、ロールなどのより高度なプレイブック機能について学びます。これにより、さらに強力で柔軟な自動化ワークフローを作成することができます。
覚えておいてください。Ansible をマスターするキーは練習と探求心です。プレイブックでさまざまなモジュールや構造を試してみることを恐れないでください。Ansible のドキュメントは、学習を続け、技術力を伸ばす上で非常に優れたリソースです。