Mac に Ansible をインストールして EC2 に ping するまで
Mac に Ansible をインストール
brew install ansible
ansible — Homebrew Formulae
https://formulae.brew.sh/formula/ansible
EC2 Linux 環境を構築
- EC2 で Linux 環境構築する手順は省略
- EC2 インスタンスに ssh 接続できるようにしておく
/etc/ansible/hosts に EC2 インスタンスを登録
% cat /etc/ansible/hosts
ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
/etc/ansible/hosts
って何?
- Ansible では、インベントリと呼ばれる単位で、複数のホストに対して操作を行う
- インベントリを定義したらパターンを使用して Ansible を実行したいホストやグループを指定する
- このインベントリのデフォルトの場所が
/etc/ansible/hosts
となる。
- コマンドラインで
-i
or--inventory
or--inventory-file
オプションを使用して、任意のインベントリファイルを指定することも可能
How to build your inventory — Ansible Documentation
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
ping
% ansible --user ec2-user all --module-name ping
[WARNING]: Platform linux on host ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com is using the discovered Python interpreter at /usr/bin/python, but future
installation of another Python interpreter could change the meaning of that path. See https://docs.ansible.com/ansible/2.10/reference_appendices/interpreter_discovery.html
for more information.
ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
この ping って何?
- Ansible の ping モジュール
- リモートノードに ssh による通信が可能か、リモートノードで Python が動かくか確認するもの
- ICMP での ping ではない
ansible.builtin.ping – Try to connect to host, verify a usable python and return pong on success — Ansible Documentation
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html#ansible-collections-ansible-builtin-ping-module
Ansible.Builtin — Ansible Documentation
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/
この警告は何なのか
- POSIX 環境で実行されるほとんどの Ansible モジュールは、ターゲットホスト上で Python インタプリタを必要としまする
- 特に設定しない限り Ansible は、 Python モジュールがそのホストで初めて実行されたときに、各ターゲットホスト上で適切な Python インタプリタを検出しようとする
- この動作を Interpreter Discovery という
- Interpreter Discovery を防ぐには2つの方法がある
- 個々のホストやグループに対して ansible_python_interpreter インベントリ変数を設定する
- グローバルに ansible.cfg の [defaults] セクションで interpreter_python キーを使用する
- グローバルに設定してしまったほうが楽なので、今回は 2. の方法で対処する
[小ネタ] Pythonのバージョンを指定してAnsible実行時に表示される警告を消す | DevelopersIO
https://dev.classmethod.jp/articles/ansible-interpreter-warning/
Interpreter Discovery — Ansible Documentation
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html
警告を消すために ~/.ansible.cfg を作成
% cat ~/.ansible.cfg
[defaults]
interpreter_python=/usr/bin/python
~/.ansible.cfg
って何?
- Ansible の設定ファイル
Controlling how Ansible behaves: precedence rules — Ansible Documentation
https://docs.ansible.com/ansible/latest/reference_appendices/general_precedence.html
再度 ping
% ansible --user ec2-user all --module-name ping
ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
- 警告が消えたのでヨシ!
この記事を試した環境
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.7
BuildVersion: 19H512
% ansible --version
ansible 2.10.5
config file = /Users/myname/.ansible.cfg
configured module search path = ['/Users/myname/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/Cellar/ansible/2.10.6/libexec/lib/python3.9/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.9.1 (default, Feb 3 2021, 07:04:15) [Clang 12.0.0 (clang-1200.0.32.29)]