序章

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がノードに接続してコマンドとプレイブックを実行できることをテストするには、次のコマンドを使用できます。

  1. ansible all -m ping

The ping モジュールは、AnsibleがリモートサーバーでPythonスクリプトを実行できるかどうかのテストに加えて、インベントリファイルで定義されたノードに接続するための有効な資格情報があるかどうかをテストします。 pong の返信は、Ansibleがそのノードでコマンドとプレイブックを実行する準備ができていることを意味します。

別のユーザーとして接続する

デフォルトでは、Ansibleは、対応するSSHキーペアを使用して、現在のシステムユーザーとしてノードに接続しようとします。 別のユーザーとして接続するには、コマンドに次のコマンドを追加します。 -u フラグと対象ユーザーの名前:

  1. ansible all -m ping -u sammy

同じことが有効です ansible-playbook:

  1. ansible-playbook myplaybook.yml -u sammy

カスタムSSHキーの使用

カスタムSSHキーを使用してリモートサーバーに接続している場合は、実行時にキーを提供できます。 --private-key オプション:

  1. ansible all -m ping --private-key=~/.ssh/custom_id

このオプションは、次の場合にも有効です。 ansible-playbook:

  1. ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id

パスワードベースの認証の使用

ノードに接続するためにパスワードベースの認証を使用する必要がある場合は、オプションを追加する必要があります --ask-pass Ansibleコマンドに。

これにより、Ansibleは、接続しようとしているリモートサーバー上のユーザーのパスワードの入力を求めます。

  1. ansible all -m ping --ask-pass

このオプションは、次の場合にも有効です。 ansible-playbook:

  1. ansible-playbook myplaybook.yml --ask-pass

を提供する sudo パスワード

リモートユーザーが実行するためにパスワードを提供する必要がある場合 sudo コマンド、オプションを含めることができます --ask-become-pass Ansibleコマンドに。 これにより、リモートユーザーのsudoパスワードを入力するように求められます。

  1. ansible all -m ping --ask-become-pass

このオプションは、次の場合にも有効です。 ansible-playbook:

  1. ansible-playbook myplaybook.yml --ask-become-pass

カスタムインベントリファイルの使用

デフォルトのインベントリファイルは通常、次の場所にあります。 /etc/ansible/hosts、ただし、 -i Ansibleコマンドとプレイブックを実行するときにカスタムインベントリファイルを指すオプション。 Ansibleは、動的インベントリファイルを構築するためのインベントリスクリプトもサポートしています。これは、サーバーが頻繁に作成および破棄され、インベントリが変動する場合に使用します。 カスタムインベントリファイルは、Gitなどのバージョン管理システムに含めることができるプロジェクトごとのインベントリを設定するのに役立ちます。

  1. ansible all -m ping -i my_custom_inventory

同じオプションが有効です ansible-playbook:

  1. ansible-playbook myplaybook.yml -i my_custom_inventory

ad-hocコマンドの実行

ノードでコマンドを実行するには、 -a オプションの後に実行するコマンドを引用符で囲みます。

これは実行されます uname -a すべてのインベントリ内のノード:

  1. ansible all -a "uname -a"

オプションでAnsibleモジュールを実行することも可能です -m. 次のコマンドはパッケージをインストールします vim の上 server1 あなたの在庫から:

  1. ansible server1 -m apt -a "name=vim"

ノードに変更を加える前に、ドライランを実行して、サーバーがコマンドによってどのように影響を受けるかを予測できます。 これは、 --check オプション:

  1. ansible server1 -m apt -a "name=vim" --check

プレイブックの実行

プレイブックを実行し、その中で定義されているすべてのタスクを実行するには、 ansible-playbook 指図:

  1. ansible-playbook myplaybook.yml

デフォルトを上書きするには hosts プレイブックのオプションと実行を特定のグループまたはホストに制限し、オプションを含める -l あなたのコマンドで:

  1. ansible-playbook -l server1 myplaybook.yml

演劇に関する情報の入手

オプション --list-tasks リモートサーバーに変更を加えずにプレイによって実行されるすべてのタスクを一覧表示するために使用されます。

  1. ansible-playbook myplaybook.yml --list-tasks

同様に、リモートサーバーでタスクを実行せずに、プレイの影響を受けるすべてのホストを一覧表示することができます。

  1. ansible-playbook myplaybook.yml --list-hosts

タグを使用して、プレイの実行を制限できます。 プレイで利用可能なすべてのタグを一覧表示するには、オプションを使用します --list-tags:

  1. ansible-playbook myplaybook.yml --list-tags

プレイブックの実行の制御

オプションを使用できます --start-at-task プレイブックの新しいエントリポイントを定義します。 その後、Ansibleは指定されたタスクの前にあるものをすべてスキップし、その時点から残りのプレイを実行します。 このオプションには、引数として有効なタスク名が必要です。

  1. ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"

特定のタグに関連付けられたタスクのみを実行するには、オプションを使用できます --tags. たとえば、次のようにタグ付けされたタスクのみを実行する場合 nginx また mysql、次を使用できます:

  1. ansible-playbook myplaybook.yml --tags=mysql,nginx

特定のタグの下にあるすべてのタスクをスキップする場合は、 --skip-tags. 次のコマンドが実行されます myplaybook.yml、としてタグ付けされたすべてのタスクをスキップします mysql:

  1. ansible-playbook myplaybook.yml --skip-tags=mysql

AnsibleVaultを使用して機密データを保存する

Ansibleプレイブックがパスワード、APIキー、クレデンシャルなどの機密データを扱う場合は、暗号化メカニズムを使用してそのデータを安全に保つことが重要です。 Ansibleは提供します ansible-vault ファイルと変数を暗号化します。

バイナリファイルだけでなくAnsibleデータファイルも暗号化できますが、より一般的には ansible-vault 機密データを含む可変ファイルを暗号化します。 このツールを使用してファイルを暗号化した後は、ファイルを最初に暗号化したときに定義された関連するパスワードを指定することによってのみ、その内容を実行、編集、または表示できます。

新しい暗号化ファイルの作成

次のコマンドを使用して、新しい暗号化されたAnsibleファイルを作成できます。

  1. ansible-vault create credentials.yml

このコマンドは、次のアクションを実行します。

  • まず、新しいパスワードの入力を求められます。 編集、表示、またはこれらの値を使用してプレイブックやコマンドを実行するためだけに使用する場合でも、ファイルの内容にアクセスするときは常にこのパスワードを入力する必要があります。
  • 次に、デフォルトのコマンドラインエディタが開き、ファイルに目的の内容を入力できます。
  • 最後に、編集が終わったら、 ansible-vault ファイルを暗号化されたデータとして保存します。

既存のAnsibleファイルの暗号化

既存のAnsibleファイルを暗号化するには、次の構文を使用できます。

  1. ansible-vault encrypt credentials.yml

これにより、ファイルにアクセスするたびに入力する必要のあるパスワードの入力を求められます credentials.yml.

暗号化されたファイルの内容の表示

以前に暗号化されたファイルの内容を表示する場合 ansible-vault 内容を変更する必要はありません。次を使用できます。

  1. ansible-vault view credentials.yml

これにより、ファイルを最初に暗号化したときに選択したパスワードを入力するように求められます。 ansible-vault.

暗号化されたファイルの編集

以前にAnsibleVaultで暗号化されたファイルの内容を編集するには、次のコマンドを実行します。

  1. ansible-vault edit credentials.yml

これにより、ファイルを最初に暗号化するときに選択したパスワードを入力するように求められます credentials.ymlansible-vault. パスワードの検証後、デフォルトのコマンドラインエディタがファイルの暗号化されていない内容で開き、変更を加えることができます。 終了したら、通常どおりにファイルを保存して閉じることができ、更新されたコンテンツは暗号化されたデータとして保存されます。

暗号化されたファイルの復号化

以前に暗号化されたファイルを永続的に元に戻す場合 ansible-vault 暗号化されていないバージョンでは、次の構文を使用してこれを行うことができます。

  1. ansible-vault decrypt credentials.yml

これにより、ファイルを最初に暗号化したときに使用したものと同じパスワードを入力するように求められます credentials.ymlansible-vault. パスワードの検証後、ファイルの内容は暗号化されていないデータとしてディスクに保存されます。

複数のVaultパスワードの使用

Ansibleは、異なるボールトIDでグループ化された複数のボールトパスワードをサポートします。 これは、開発、テスト、実稼働環境など、さまざまな環境専用のボールトパスワードが必要な場合に役立ちます。

カスタムボールトIDを使用して新しい暗号化ファイルを作成するには、 --vault-id ラベルと場所とともにオプション ansible-vault そのボールトのパスワードを見つけることができます。 ラベルは任意の識別子にすることができ、場所は次のいずれかになります。 prompt、これは、コマンドがパスワードまたはパスワードファイルへの有効なパスを入力するように求めるプロンプトを表示する必要があることを意味します。

  1. ansible-vault create --vault-id dev@prompt credentials_dev.yml

これにより、devという名前の新しいボールトIDが作成されます。 prompt パスワードソースとして。 この方法をグループ変数ファイルと組み合わせることで、アプリケーション環境ごとに個別のansibleボールトを作成できます。

  1. ansible-vault create --vault-id prod@prompt credentials_prod.yml

devprodをボールトIDとして使用して、環境ごとに個別のボールトを作成する方法を示しましたが、必要な数のボールトを作成でき、任意の識別子を使用できます。ボールトIDとしての選択。

これらのファイルを表示、編集、または復号化するには、同じボールトIDとパスワードソースを提供する必要があります。 ansible-vault 指図:

  1. ansible-vault edit credentials_dev.yml --vault-id dev@prompt

パスワードファイルの使用

サードパーティのツールを使用してAnsibleでサーバーをプロビジョニングするプロセスを自動化する必要がある場合は、ボールトパスワードの入力を求められることなく提供する方法が必要になります。 パスワードファイルを使用してこれを行うことができます ansible-vault.

パスワードファイルは、プレーンテキストファイルまたは実行可能スクリプトにすることができます。 ファイルが実行可能スクリプトの場合、このスクリプトによって生成された出力がボールトパスワードとして使用されます。 それ以外の場合、ファイルの生の内容がボールトパスワードとして使用されます。

でパスワードファイルを使用するには ansible-vault、ボールトコマンドのいずれかを実行するときは、パスワードファイルへのパスを指定する必要があります。

  1. 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にパスワードの入力を求めるプロンプトを表示するには:

  1. ansible-playbook myplaybook.yml --ask-vault-pass

パスワードの入力を求める代わりにパスワードファイルを使用した場合は、オプションを使用する必要があります --vault-password-file 代わりは:

  1. ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

ボールトIDで暗号化されたデータを使用している場合は、最初にデータを暗号化したときに使用したものと同じボールトIDとパスワードソースを提供する必要があります。

  1. ansible-playbook myplaybook.yml --vault-id dev@prompt

ボールトIDでパスワードファイルを使用する場合は、パスワードソースとしてラベルの後にパスワードファイルへのフルパスを指定する必要があります。

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py

プレイで複数のボールトを使用する場合は、 --vault-id それらのそれぞれのパラメータ、順不同:

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt

デバッグ

Ansibleコマンドやプレイブックの実行中にエラーが発生した場合は、問題に関する詳細情報を取得するために、出力の詳細度を上げることをお勧めします。 あなたはそれを含めることによってそれを行うことができます -v コマンドのオプション:

  1. ansible-playbook myplaybook.yml -v

詳細が必要な場合は、 -vvv これにより、出力の冗長性が高まります。 Ansible経由でリモートノードに接続できない場合は、 -vvvv 接続のデバッグ情報を取得するには:

  1. ansible-playbook myplaybook.yml -vvvv

結論

このガイドでは、サーバーのプロビジョニング時に使用する可能性のある最も一般的なAnsibleコマンドのいくつかについて説明します。たとえば、ノードでリモートコマンドを実行する方法や、さまざまなカスタム設定を使用してプレイブックを実行する方法などです。

Ansibleワークフローに役立つと思われるコマンドのバリエーションとフラグは他にもあります。 使用可能なすべてのオプションの概要を取得するには、helpコマンドを使用できます。

  1. ansible --help

Ansibleとそのすべての利用可能なコマンドおよび機能のより包括的なビューが必要な場合は、公式のAnsibleドキュメントを参照してください。

Ansibleの別の実用的な例をご覧になりたい場合は、Ubuntu20.04にAnsibleを使用してDockerをインストールおよびセットアップする方法に関するガイドをご覧ください。