Ansible 最初の一歩 @ AWS EC2


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/config
    Host 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をインストールする