search
LoginSignup
26
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
26
Help us understand the problem. What are the problem?