はじめに
Ansibleは、リモートサーバーのセットアップとメンテナンスを容易にする現代の構成管理ツールです。
このチートシート形式のガイドでは、Ansibleを使用する際によく使用されるコマンドやプラクティスについてのクイックリファレンスを提供しています。Ansibleの概要やインストール、設定方法については、当社のガイド「Ubuntu 20.04にAnsibleをインストールおよび構成する方法」をご覧ください。
このガイドの使用方法:
- このガイドはチートシート形式で、独立したコマンドラインスニペットが含まれています。
- 完了したいタスクに関連するセクションに移動してください。
- このガイドのコマンドで
強調表示されたテキスト
を見た場合、このテキストはあなた自身のインベントリからホスト、ユーザー名、IPアドレスを参照する必要があることに注意してください。
Ansible用語集
このガイド全体で広く使用されている以下のAnsible固有の用語があります:
- コントロールマシン / ノード:Ansibleがインストールされ、構成されていて、ノードに接続してコマンドを実行するシステムです。
- ノード:Ansibleによって制御されるサーバーです。
- インベントリファイル:Ansibleが制御するサーバーに関する情報を含むファイルで、通常は
/etc/ansible/hosts
に配置されます。 - プレイブック:リモートサーバーで実行する一連のタスクを含むファイルです。
- ロール:ウェブサーバーをインストールするなどの目標に関連するプレイブックや他のファイルのコレクションです。
- プレイ:完全なAnsible実行。 プレイは複数のプレイブックとロールを持つことができ、単一のプレイブックから含まれるエントリポイントとして機能します。
これらのコマンドの実践例が必要な場合は、Ubuntu 20.04で初期サーバー設定を自動化する方法のガイドを参照してください。少なくとも1つのリモートサーバーをノードとして使用する必要があります。
ノードへの接続のテスト
Ansibleがノードに接続してコマンドやプレイブックを実行できるかどうかをテストするには、次のコマンドを使用できます:
ping
モジュールは、インベントリファイルで定義されたノードに接続するための有効な資格情報があるかどうか、およびAnsibleがリモートサーバーでPythonスクリプトを実行できるかどうかをテストします。pongという応答が返ってきた場合、Ansibleはそのノードでコマンドやプレイブックを実行する準備ができています。
異なるユーザーとして接続する
デフォルトでは、Ansible は現在のシステムユーザーとしてノードに接続し、それに対応するSSHキーペアを使用します。異なるユーザーとして接続するには、コマンドに-u
フラグと意図したユーザーの名前を追加します:
同様のことがansible-playbook
にも適用されます:
カスタムSSHキーの使用
リモートサーバーに接続するためにカスタムSSHキーを使用している場合、実行時に--private-key
オプションでそれを指定できます:
このオプションはansible-playbook
にも適用されます:
パスワードベースの認証の使用
ノードに接続するためにパスワードベースの認証を使用する必要がある場合は、Ansibleコマンドにオプション--ask-pass
を追加する必要があります。
これにより、Ansibleがリモートサーバーのユーザーのパスワードを要求します。
このオプションは、ansible-playbook
にも有効です:
sudo
パスワードの提供
リモートユーザーがsudo
コマンドを実行するためにパスワードを提供する必要がある場合は、Ansibleコマンドにオプション--ask-become-pass
を含めることができます。これにより、リモートユーザーにsudoパスワードを入力するように求められます:
このオプションは、ansible-playbook
にも有効です:
カスタムインベントリファイルの使用
デフォルトのインベントリファイルは通常/etc/ansible/hosts
にありますが、Ansibleコマンドやプレイブックを実行する際にカスタムインベントリファイルを指定するために-i
オプションを使用することもできます。 Ansibleはまた、インベントリが頻繁に作成および破棄されるサーバーでインベントリが変動する場合に使用するためのインベントリスクリプトをサポートしています。カスタムインベントリファイルは、Gitなどのバージョン管理システムに含めることができるプロジェクトごとのインベントリの設定に役立ちます:
同じオプションは、ansible-playbook
にも有効です:
アドホックコマンドの実行
ノードでコマンドを実行するには、引用符で囲んだコマンドに続いて-a
オプションを使用します。
これにより、インベントリ内のすべてのノードでuname -a
が実行されます:
また、Ansibleモジュールを-m
オプションとともに実行することも可能です。次のコマンドは、インベントリ内のserver1
にパッケージvim
をインストールします:
ノードに変更を加える前に、サーバーがコマンドによってどのように影響を受けるかを予測するためにドライランを実行することもできます。これは--check
オプションを含めることで行えます:
プレイブックの実行
プレイブックを実行し、それに定義されているすべてのタスクを実行するには、ansible-playbook
コマンドを使用します:
プレイブックのデフォルトのhosts
オプションを上書きし、特定のグループまたはホストに実行を制限するには、コマンドに-l
オプションを含めます:
プレイに関する情報の取得
オプション--list-tasks
は、リモートサーバーに対して変更を加えることなく、プレイによって実行されるすべてのタスクをリストアップするために使用されます。
同様に、リモートサーバー上でタスクを実行せずに、プレイによって影響を受けるすべてのホストをリストアップすることができます。
プレイの実行を制限するためにタグを使用できます。プレイで利用可能なすべてのタグをリストアップするには、オプション--list-tags
を使用します:
プレイブックの実行の制御
プレイブックの新しいエントリポイントを定義するためにオプション--start-at-task
を使用できます。その場合、Ansibleは指定されたタスクの前に来るものをスキップし、そのポイント以降のプレイを実行します。このオプションには有効なタスク名が引数として必要です:
特定のタグに関連付けられたタスクのみを実行するには、オプション--tags
を使用できます。たとえば、nginx
またはmysql
とタグ付けされたタスクのみを実行したい場合は、次のようにします:
特定のタグの下にあるすべてのタスクをスキップする場合は、--skip-tags
を使用します。次のコマンドは、myplaybook.yml
を実行し、mysql
とタグ付けされたすべてのタスクをスキップします:
機密データを保存するためのAnsible Vaultの使用
Ansibleのプレイブックがパスワード、APIキー、資格情報などの機密データを扱う場合、そのデータを暗号化メカニズムを使用して安全に保持することが重要です。 Ansibleはファイルや変数を暗号化するためのansible-vault
を提供しています。
Ansibleのデータファイルやバイナリファイルを暗号化することは可能ですが、機密データを含む変数ファイルを暗号化することが一般的です。このツールでファイルを暗号化した後は、ファイルを最初に暗号化したときに定義した関連するパスワードを提供することで、そのコンテンツを実行、編集、表示することができます。
新しい暗号化ファイルの作成
次のコマンドを使用して、新しい暗号化されたAnsibleファイルを作成できます:
このコマンドは、以下のアクションを実行します。
- 最初に、新しいパスワードを入力するように求められます。ファイルの内容にアクセスする際には、編集、表示、またはそれらの値を使用してプレイブックやコマンドを実行する場合でも、このパスワードを提供する必要があります。
- 次に、デフォルトのコマンドラインエディタが開き、希望の内容でファイルを埋めることができます。
- 最後に、編集が完了したら、
ansible-vault
がファイルを暗号化されたデータとして保存します。
既存の Ansible ファイルの暗号化
既存の Ansible ファイルを暗号化するには、次の構文を使用できます:
これにより、ファイル credentials.yml
にアクセスする際に入力する必要があるパスワードがプロンプトされます。
暗号化されたファイルの内容の表示
以前に ansible-vault
で暗号化されたファイルの内容を表示したいが、内容を変更する必要がない場合は、次を使用できます:
これにより、最初にファイルを ansible-vault
で暗号化したときに選択したパスワードを入力するように求められます。
暗号化されたファイルの編集
以前に Ansible Vault で暗号化されたファイルの内容を編集するには、次のコマンドを実行してください:
これにより、最初に ansible-vault
を使用してファイル credentials.yml
を暗号化したときに選択したパスワードを入力するように求められます。パスワードが検証されると、デフォルトのコマンドラインエディタが開き、ファイルの復号化された内容が表示され、変更を加えることができます。変更が完了したら、通常通りにファイルを保存して閉じると、更新された内容が暗号化されたデータとして保存されます。
暗号化されたファイルの復号化
以前に ansible-vault
で暗号化されたファイルを永久に復号化したい場合は、次の構文を使用してください:
これにより、ファイル credentials.yml
を最初に ansible-vault
で暗号化したときに使用した同じパスワードを入力するように求められます。パスワードが検証されると、ファイルの内容が暗号化解除されてディスクに保存されます。
複数のボールトパスワードの使用
Ansibleは、異なるボールトIDにグループ化された複数のボールトパスワードをサポートしています。これは、開発、テスト、および本番環境など、異なる環境に専用のボールトパスワードを持ちたい場合に便利です。
カスタムのボールトIDを使用して新しい暗号化ファイルを作成するには、--vault-id
オプションを含め、ラベルと、そのボールトのパスワードをansible-vault
が見つける場所を指定します。ラベルは任意の識別子であり、場所はprompt
であるか、コマンドがパスワードの入力を求めるようにするか、有効なパスである必要があります。
これにより、パスワードソースとしてprompt
を使用するdevという名前の新しいボールトIDが作成されます。この方法をグループ変数ファイルと組み合わせることで、各アプリケーション環境ごとに独立したAnsibleボールトを持つことができます:
我々は、環境ごとに別々のボールトを作成する方法を示すためにdevとprodをボールトIDとして使用しましたが、必要に応じて任意の数のボールトを作成し、ボールトIDとして任意の識別子を使用することができます。
これらのファイルを表示、編集、または復号化するには、同じボールトIDとパスワードソースを指定してansible-vault
コマンドを使用する必要があります:
パスワードファイルの使用
サードパーティツールを使用してAnsibleでサーバーのプロビジョニングプロセスを自動化する必要がある場合、プロンプトなしでボールトのパスワードを提供する方法が必要です。それを行う方法は、ansible-vault
を使用してパスワードファイルを使用することです。
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
ansible-vault
とパスワードファイルを使用するには、ボールトコマンドを実行する際にパスワードファイルへのパスを提供する必要があります:
Ansibleは、入力パスワードが同じであれば、prompt
またはパスワードファイルを使用して暗号化されたコンテンツの区別を付けません。実際の意味では、prompt
を使用してファイルを暗号化し、後で同じパスワードをパスワードファイルに格納してprompt
メソッドでAnsibleにプロンプトが表示されたときに同じパスワードを提供することができます。逆も同様です: パスワードファイルを使用してコンテンツを暗号化し、後でprompt
メソッドを使用して、Ansibleによってプロンプトが表示されたときに同じパスワードを提供することができます。
拡張された柔軟性とセキュリティのために、ボールトパスワードをプレーンテキストファイルに保存する代わりに、Pythonスクリプトを使用して他のソースからパスワードを取得することができます。公式のAnsibleリポジトリには、プロジェクトの特定のニーズに適したカスタムスクリプトを作成する際の参考として使用できる、いくつかのボールトスクリプトの例がいくつか含まれています。
Ansible Vaultで暗号化されたデータを使用してPlaybookを実行する
Playbookを実行する際に、以前にansible-vault
で暗号化されたデータを使用する場合、Playbookコマンドにボールトパスワードを提供する必要があります。
このPlaybookで使用されるデータを暗号化する際にデフォルトのオプションとprompt
パスワードソースを使用した場合は、オプション--ask-vault-pass
を使用して、Ansibleにパスワードを入力させることができます。
パスワードをプロンプトする代わりにパスワードファイルを使用した場合は、オプション--vault-password-file
を使用する必要があります。
ボールトIDで暗号化されたデータを使用する場合は、最初にデータを暗号化したときと同じボールトIDとパスワードソースを指定する必要があります。
ボールトIDとパスワードファイルを使用する場合は、ラベルを指定してその後にパスワードファイルの完全なパスをパスワードソースとして指定する必要があります。
複数のボールトを使用する場合は、特定の順序はなく、それぞれに対して--vault-id
パラメータを指定する必要があります。
デバッグ
Ansibleコマンドやプレイブックを実行する際にエラーが発生した場合は、問題に関する詳細情報を取得するために出力の冗長性を増やすことが良い考えです。コマンドに-v
オプションを含めることでそれが可能です:
さらに詳細が必要な場合は、-vvv
を使用することで出力の冗長性を増やすことができます。Ansibleを介してリモートノードに接続できない場合は、接続のデバッグ情報を取得するために-vvvv
を使用してください:
結論
このガイドでは、サーバーをプロビジョニングする際に使用する可能性のある一般的なAnsibleコマンドのいくつかについて説明します。ノード上でリモートコマンドを実行する方法や、さまざまなカスタム設定を使用してプレイブックを実行する方法などが含まれます。
他にも、Ansibleワークフローで役立つ可能性のあるコマンドのバリエーションやフラグがあります。利用可能なすべてのオプションの概要を取得するには、helpコマンドを使用できます:
Ansibleとそのすべての利用可能なコマンドや機能についてより包括的なビューをご覧になりたい場合は、公式のAnsibleドキュメントを参照してください。
Ansibleのさらなる実践的な例をご覧になりたい場合は、Ubuntu 20.04にDockerをインストールして設定するためのAnsibleの使用方法ガイドをご覧ください。
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide