Ansibleとは
- Ansibleの特徴
- エージェントレスでサーバ構築を自動化してくれるツールです。
- 構築対象のサーバはsshdが動作していてSSHで接続できればOKです。
- 設定ファイルはYAMLで書きます。プログラムの知識(Ruby、Python、etc.)は不要です。
- 数台~数十台規模のサーバ構築を想定しています。
準備
-
Amsibleのインストール
AnsibleをAmazon Linuxにインストールします。
Amazon LinuxにEPELからAnsibleをインストールする場合、yum install
に--enablerepo=epel
オプションを指定します。[ec2-user@ip-172-31-24-21 ~]$ sudo su - [root@ip-172-31-24-21 ~]# yum --enablerepo=epel install ansible
途中「y」と答えながらインストールに成功すると、Ansibleは、/etc/ansible にインストールされます。
このまま Ansible を実行しようとすると、以下のエラーメッセージがでます。Traceback (most recent call last): File "/usr/bin/ansible", line 44, in <module> import ansible.constants as C ImportError: No module named ansible.constants
pipでAnsibleをインストールするとエラーが解消します。
[root@ip-172-31-24-21 ~]# pip install ansible
-
Ansibleの管理対象マシンを設定
/etc/ansible/hostsファイルに管理対象マシンを登録します。「#」はコメント行を意味します。
#172.31.21.132 ec2_client01 #172.31.30.162 ec2_client02
[webservers]のようにグループ指定を行うことができます。今回は、グループ指定をしていないため、全体に登録されたことになります。
-
EC2インスタンス作成
以下の3台のEC2 Amazon Linuxインスタンスを作成します。マシン名 IPアドレス 用途 ec2_ansible 172.31.24.21 Ansible実行マシン ec2_client01 172.31.21.132 設定対象マシン1 ec2_client02 172.31.30.162 設定対象マシン2 設定はデフォルト(22番ポートのみ通信可能)のままでOKです。
-
SSH接続の設定
Ansible実行マシンから設定対象マシンに自動でSSH接続できるように設定します。
Ansible実行マシン(ec2_ansible)に /root/.ssh/config ファイルを作成します。/root/.ssh/configHost ec2_client01 HostName 172.31.21.132 Port 22 User ec2-user IdentityFile ~/.ssh/ansible-key Host ec2_client02 HostName 172.31.30.162 Port 22 User ec2-user IdentityFile ~/.ssh/ansible-key
Ansible実行マシン(ec2_ansible)の ~/.ssh に秘密鍵(ansible-key)を配置します。設定対象マシン1、設定対象マシン2の ~/.ssh/には公開鍵を配置します。
ssh コマンドで、Ansible実行マシンから設定対象マシン1/2にSSH接続できるようになります。/root/.ssh/config[root@ip-172-31-24-21 ansible]# ssh ec2_client01 [root@ip-172-31-24-21 ansible]# ssh ec2_client02
※ 初回は問い合わせがありますが、2回目以降は自動でログインします。
動作確認
-
失敗テスト
-m オプションでAnsibleのモジュールを実行することができます。
EC2のインスタンスを停止したままansible all -m ping
コマンドを実行すると以下のように失敗します。[root@ip-172-31-24-21 ansible]# ansible all -m ping ec2_client01 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true } ec2_client02 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }
-
成功テスト
EC2のインスタンスを起動してansible all -m ping
コマンドを実行すると以下のように成功します。[root@ip-172-31-24-21 ansible]# ansible all -m ping ec2_client01 | SUCCESS => { "changed": false, "ping": "pong" } ec2_client02 | SUCCESS => { "changed": false, "ping": "pong" }
-
コマンド実行
-a オプションで、コマンドを実行することができます。[root@ip-172-31-24-21 ~]# ansible all -a "pwd" ec2_client01 | SUCCESS | rc=0 >> /home/ec2-user ec2_client02 | SUCCESS | rc=0 >> /home/ec2-user
Next Step
次は、Oracle JDKをPlaybookを使ってインストールしてみます。
AnsibleのPlayBookでOracle JDKをインストールする