Ansibleの使用方法:リファレンスガイド
序章
Ansible は、リモートサーバーのセットアップと保守のタスクを容易にする最新の構成管理ツールです。
このチートシートスタイルガイドは、Ansibleを操作するときに一般的に使用されるコマンドとプラクティスへのクイックリファレンスを提供します。 Ansibleの概要とインストールおよび構成方法については、 Ubuntu20.04にAnsibleをインストールおよび構成する方法に関するガイドを確認してください。
このガイドの使用方法:
- このガイドは、自己完結型のコマンドラインスニペットを含むチートシート形式です。
- 完了しようとしているタスクに関連するセクションにジャンプします。
- あなたが見るとき
highlighted text
このガイドのコマンドでは、このテキストは独自のインベントリからのホスト、ユーザー名、およびIPアドレスを参照する必要があることに注意してください。
Ansible用語集
次のAnsible固有の用語は、このガイド全体で主に使用されています。
- Control Machine / Node :Ansibleがインストールされ、ノード上でコマンドを接続して実行するように構成されているシステム。
- Node :Ansibleによって制御されるサーバー。
- インベントリファイル:Ansibleが制御するサーバーに関する情報を含むファイル。通常は次の場所にあります。
/etc/ansible/hosts
. - Playbook :リモートサーバーで実行される一連のタスクを含むファイル。
- Role :Webサーバーのインストールなどの目標に関連するプレイブックやその他のファイルのコレクション。
- Play :完全なAnsibleの実行。 play は、エントリポイントとして機能する単一のプレイブックから含まれる複数のプレイブックとロールを持つことができます。
これらのコマンドの実際の例が必要な場合は、 Ubuntu20.04でAnsibleを使用してサーバーの初期設定を自動化する方法に関するガイドを参照してください。 ノードとして使用するには、少なくとも1台のリモートサーバーが必要です。
ノードへの接続のテスト
Ansibleがノードに接続してコマンドとプレイブックを実行できることをテストするには、次のコマンドを使用できます。
- ansible all -m ping
The ping
モジュールは、AnsibleがリモートサーバーでPythonスクリプトを実行できるかどうかのテストに加えて、インベントリファイルで定義されたノードに接続するための有効な資格情報があるかどうかをテストします。 pong の返信は、Ansibleがそのノードでコマンドとプレイブックを実行する準備ができていることを意味します。
別のユーザーとして接続する
デフォルトでは、Ansibleは、対応するSSHキーペアを使用して、現在のシステムユーザーとしてノードに接続しようとします。 別のユーザーとして接続するには、コマンドに次のコマンドを追加します。 -u
フラグと対象ユーザーの名前:
- ansible all -m ping -u sammy
同じことが有効です ansible-playbook
:
- ansible-playbook myplaybook.yml -u sammy
カスタムSSHキーの使用
カスタムSSHキーを使用してリモートサーバーに接続している場合は、実行時にキーを提供できます。 --private-key
オプション:
- ansible all -m ping --private-key=~/.ssh/custom_id
このオプションは、次の場合にも有効です。 ansible-playbook
:
- ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id
パスワードベースの認証の使用
ノードに接続するためにパスワードベースの認証を使用する必要がある場合は、オプションを追加する必要があります --ask-pass
Ansibleコマンドに。
これにより、Ansibleは、接続しようとしているリモートサーバー上のユーザーのパスワードの入力を求めます。
- ansible all -m ping --ask-pass
このオプションは、次の場合にも有効です。 ansible-playbook
:
- ansible-playbook myplaybook.yml --ask-pass
を提供する sudo
パスワード
リモートユーザーが実行するためにパスワードを提供する必要がある場合 sudo
コマンド、オプションを含めることができます --ask-become-pass
Ansibleコマンドに。 これにより、リモートユーザーのsudoパスワードを入力するように求められます。
- ansible all -m ping --ask-become-pass
このオプションは、次の場合にも有効です。 ansible-playbook
:
- ansible-playbook myplaybook.yml --ask-become-pass
カスタムインベントリファイルの使用
デフォルトのインベントリファイルは通常、次の場所にあります。 /etc/ansible/hosts
、ただし、 -i
Ansibleコマンドとプレイブックを実行するときにカスタムインベントリファイルを指すオプション。 Ansibleは、動的インベントリファイルを構築するためのインベントリスクリプトもサポートしています。これは、サーバーが頻繁に作成および破棄され、インベントリが変動する場合に使用します。 カスタムインベントリファイルは、Gitなどのバージョン管理システムに含めることができるプロジェクトごとのインベントリを設定するのに役立ちます。
- ansible all -m ping -i my_custom_inventory
同じオプションが有効です ansible-playbook
:
- ansible-playbook myplaybook.yml -i my_custom_inventory
ad-hocコマンドの実行
ノードでコマンドを実行するには、 -a
オプションの後に実行するコマンドを引用符で囲みます。
これは実行されます uname -a
すべてのインベントリ内のノード:
- ansible all -a "uname -a"
オプションでAnsibleモジュールを実行することも可能です -m
. 次のコマンドはパッケージをインストールします vim
の上 server1
あなたの在庫から:
- ansible server1 -m apt -a "name=vim"
ノードに変更を加える前に、ドライランを実行して、サーバーがコマンドによってどのように影響を受けるかを予測できます。 これは、 --check
オプション:
- ansible server1 -m apt -a "name=vim" --check
プレイブックの実行
プレイブックを実行し、その中で定義されているすべてのタスクを実行するには、 ansible-playbook
指図:
- ansible-playbook myplaybook.yml
デフォルトを上書きするには hosts
プレイブックのオプションと実行を特定のグループまたはホストに制限し、オプションを含める -l
あなたのコマンドで:
- ansible-playbook -l server1 myplaybook.yml
演劇に関する情報の入手
オプション --list-tasks
リモートサーバーに変更を加えずにプレイによって実行されるすべてのタスクを一覧表示するために使用されます。
- ansible-playbook myplaybook.yml --list-tasks
同様に、リモートサーバーでタスクを実行せずに、プレイの影響を受けるすべてのホストを一覧表示することができます。
- ansible-playbook myplaybook.yml --list-hosts
タグを使用して、プレイの実行を制限できます。 プレイで利用可能なすべてのタグを一覧表示するには、オプションを使用します --list-tags
:
- ansible-playbook myplaybook.yml --list-tags
プレイブックの実行の制御
オプションを使用できます --start-at-task
プレイブックの新しいエントリポイントを定義します。 その後、Ansibleは指定されたタスクの前にあるものをすべてスキップし、その時点から残りのプレイを実行します。 このオプションには、引数として有効なタスク名が必要です。
- ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"
特定のタグに関連付けられたタスクのみを実行するには、オプションを使用できます --tags
. たとえば、次のようにタグ付けされたタスクのみを実行する場合 nginx
また mysql
、次を使用できます:
- ansible-playbook myplaybook.yml --tags=mysql,nginx
特定のタグの下にあるすべてのタスクをスキップする場合は、 --skip-tags
. 次のコマンドが実行されます myplaybook.yml
、としてタグ付けされたすべてのタスクをスキップします mysql
:
- ansible-playbook myplaybook.yml --skip-tags=mysql
AnsibleVaultを使用して機密データを保存する
Ansibleプレイブックがパスワード、APIキー、クレデンシャルなどの機密データを扱う場合は、暗号化メカニズムを使用してそのデータを安全に保つことが重要です。 Ansibleは提供します ansible-vault
ファイルと変数を暗号化します。
バイナリファイルだけでなくAnsibleデータファイルも暗号化できますが、より一般的には ansible-vault
機密データを含む可変ファイルを暗号化します。 このツールを使用してファイルを暗号化した後は、ファイルを最初に暗号化したときに定義された関連するパスワードを指定することによってのみ、その内容を実行、編集、または表示できます。
新しい暗号化ファイルの作成
次のコマンドを使用して、新しい暗号化されたAnsibleファイルを作成できます。
- ansible-vault create credentials.yml
このコマンドは、次のアクションを実行します。
- まず、新しいパスワードの入力を求められます。 編集、表示、またはこれらの値を使用してプレイブックやコマンドを実行するためだけに使用する場合でも、ファイルの内容にアクセスするときは常にこのパスワードを入力する必要があります。
- 次に、デフォルトのコマンドラインエディタが開き、ファイルに目的の内容を入力できます。
- 最後に、編集が終わったら、
ansible-vault
ファイルを暗号化されたデータとして保存します。
既存のAnsibleファイルの暗号化
既存のAnsibleファイルを暗号化するには、次の構文を使用できます。
- ansible-vault encrypt credentials.yml
これにより、ファイルにアクセスするたびに入力する必要のあるパスワードの入力を求められます credentials.yml
.
暗号化されたファイルの内容の表示
以前に暗号化されたファイルの内容を表示する場合 ansible-vault
内容を変更する必要はありません。次を使用できます。
- ansible-vault view credentials.yml
これにより、ファイルを最初に暗号化したときに選択したパスワードを入力するように求められます。 ansible-vault
.
暗号化されたファイルの編集
以前にAnsibleVaultで暗号化されたファイルの内容を編集するには、次のコマンドを実行します。
- ansible-vault edit credentials.yml
これにより、ファイルを最初に暗号化するときに選択したパスワードを入力するように求められます credentials.yml
と ansible-vault
. パスワードの検証後、デフォルトのコマンドラインエディタがファイルの暗号化されていない内容で開き、変更を加えることができます。 終了したら、通常どおりにファイルを保存して閉じることができ、更新されたコンテンツは暗号化されたデータとして保存されます。
暗号化されたファイルの復号化
以前に暗号化されたファイルを永続的に元に戻す場合 ansible-vault
暗号化されていないバージョンでは、次の構文を使用してこれを行うことができます。
- ansible-vault decrypt credentials.yml
これにより、ファイルを最初に暗号化したときに使用したものと同じパスワードを入力するように求められます credentials.yml
と ansible-vault
. パスワードの検証後、ファイルの内容は暗号化されていないデータとしてディスクに保存されます。
複数のVaultパスワードの使用
Ansibleは、異なるボールトIDでグループ化された複数のボールトパスワードをサポートします。 これは、開発、テスト、実稼働環境など、さまざまな環境専用のボールトパスワードが必要な場合に役立ちます。
カスタムボールトIDを使用して新しい暗号化ファイルを作成するには、 --vault-id
ラベルと場所とともにオプション ansible-vault
そのボールトのパスワードを見つけることができます。 ラベルは任意の識別子にすることができ、場所は次のいずれかになります。 prompt
、これは、コマンドがパスワードまたはパスワードファイルへの有効なパスを入力するように求めるプロンプトを表示する必要があることを意味します。
- ansible-vault create --vault-id dev@prompt credentials_dev.yml
これにより、devという名前の新しいボールトIDが作成されます。 prompt
パスワードソースとして。 この方法をグループ変数ファイルと組み合わせることで、アプリケーション環境ごとに個別のansibleボールトを作成できます。
- ansible-vault create --vault-id prod@prompt credentials_prod.yml
devとprodをボールトIDとして使用して、環境ごとに個別のボールトを作成する方法を示しましたが、必要な数のボールトを作成でき、任意の識別子を使用できます。ボールトIDとしての選択。
これらのファイルを表示、編集、または復号化するには、同じボールトIDとパスワードソースを提供する必要があります。 ansible-vault
指図:
- ansible-vault edit credentials_dev.yml --vault-id dev@prompt
パスワードファイルの使用
サードパーティのツールを使用してAnsibleでサーバーをプロビジョニングするプロセスを自動化する必要がある場合は、ボールトパスワードの入力を求められることなく提供する方法が必要になります。 パスワードファイルを使用してこれを行うことができます ansible-vault
.
パスワードファイルは、プレーンテキストファイルまたは実行可能スクリプトにすることができます。 ファイルが実行可能スクリプトの場合、このスクリプトによって生成された出力がボールトパスワードとして使用されます。 それ以外の場合、ファイルの生の内容がボールトパスワードとして使用されます。
でパスワードファイルを使用するには ansible-vault
、ボールトコマンドのいずれかを実行するときは、パスワードファイルへのパスを指定する必要があります。
- ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml
Ansibleは、を使用して暗号化されたコンテンツを区別しません prompt
または、入力パスワードが同じである限り、パスワードソースとしてのパスワードファイル。 実際には、これは、を使用してファイルを暗号化しても問題がないことを意味します prompt
その後、パスワードファイルを使用して、 prompt
方法。 逆もまた真です。パスワードファイルを使用してコンテンツを暗号化し、後で使用することができます。 prompt
メソッド、Ansibleによってプロンプトが表示されたときに同じパスワードを提供します。
柔軟性とセキュリティを拡張するために、ボールトのパスワードをプレーンテキストファイルに保存する代わりに、Pythonスクリプトを使用して他のソースからパスワードを取得できます。 公式のAnsibleリポジトリには、プロジェクトの特定のニーズに合ったカスタムスクリプトを作成するときに参照できるボールトスクリプトのいくつかの例が含まれています。
AnsibleVaultを介して暗号化されたデータを使用してPlaybookを実行する
以前に暗号化されたデータを使用するプレイブックを実行するときはいつでも ansible-vault
、playbookコマンドにボールトパスワードを指定する必要があります。
デフォルトのオプションを使用した場合 prompt
このプレイブックで使用されるデータを暗号化するときのパスワードソース、オプションを使用できます --ask-vault-pass
Ansibleにパスワードの入力を求めるプロンプトを表示するには:
- ansible-playbook myplaybook.yml --ask-vault-pass
パスワードの入力を求める代わりにパスワードファイルを使用した場合は、オプションを使用する必要があります --vault-password-file
代わりは:
- ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py
ボールトIDで暗号化されたデータを使用している場合は、最初にデータを暗号化したときに使用したものと同じボールトIDとパスワードソースを提供する必要があります。
- ansible-playbook myplaybook.yml --vault-id dev@prompt
ボールトIDでパスワードファイルを使用する場合は、パスワードソースとしてラベルの後にパスワードファイルへのフルパスを指定する必要があります。
- ansible-playbook myplaybook.yml --vault-id dev@vault_password.py
プレイで複数のボールトを使用する場合は、 --vault-id
それらのそれぞれのパラメータ、順不同:
- ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt
デバッグ
Ansibleコマンドやプレイブックの実行中にエラーが発生した場合は、問題に関する詳細情報を取得するために、出力の詳細度を上げることをお勧めします。 あなたはそれを含めることによってそれを行うことができます -v
コマンドのオプション:
- ansible-playbook myplaybook.yml -v
詳細が必要な場合は、 -vvv
これにより、出力の冗長性が高まります。 Ansible経由でリモートノードに接続できない場合は、 -vvvv
接続のデバッグ情報を取得するには:
- ansible-playbook myplaybook.yml -vvvv
結論
このガイドでは、サーバーのプロビジョニング時に使用する可能性のある最も一般的なAnsibleコマンドのいくつかについて説明します。たとえば、ノードでリモートコマンドを実行する方法や、さまざまなカスタム設定を使用してプレイブックを実行する方法などです。
Ansibleワークフローに役立つと思われるコマンドのバリエーションとフラグは他にもあります。 使用可能なすべてのオプションの概要を取得するには、helpコマンドを使用できます。
- ansible --help
Ansibleとそのすべての利用可能なコマンドおよび機能のより包括的なビューが必要な場合は、公式のAnsibleドキュメントを参照してください。
Ansibleの別の実用的な例をご覧になりたい場合は、Ubuntu20.04にAnsibleを使用してDockerをインストールおよびセットアップする方法に関するガイドをご覧ください。