Ansible AWSでansibleコマンドを使う

AWS上で仮想実行環境を構築しAnsibleコマンドを使います。playbookではなく、コマンドのみでansibleを試します。AWSのEC2でRHEL7.7のサーバを準備し、pythonの仮想実行環境を構築します。ansibleをインストールして、localhostにモジュールを使いansibleコマンドを実行します。

AWS EC2でt2.microを立てる

ansibleをAWS上で試します。
Cent OS7のAMIを選択して作成しました。

cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)

Ansibleユーザの作成とSSH接続をできるようにする

sudo su
useradd -s /bin/bash -m ansible
passwd ansible
echo "ansible ALL=(ALL) NOPASSWD:ALL" |tee -a /etc/sudoers.d/ansible
sudo su ansible

仮想実行環境(virtualenv)にansibleをインストール

仮想実行環境を作成します。

sudo localectl set-locale LANG=ja_JP.utf8
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python-devel 
sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
sudo yum install -y python
su - ansible
cd
pip3 install virtualenv --user
virtualenv venv
source ~/venv/bin/activate
pip3 install ansible

仮想実行環境に再接続するときは再度以下を実行しますので、忘れないようにしましょう。

su - ansible
cd
source ./venv/bin/activate

コマンドを打ってみてヘルプの内容が表示されれば環境構築成功です。

ansible-playbook --help
ansible --help

Ansibleコマンドを試す

ansibleのコマンドを試します。
簡単なコマンドとして、localhostに対してsetupモジュールを実行します。
setupは機器の情報を取得するモジュールです。自分自身の情報を取得するというコマンドです。
多くの情報を取得できます。

ansible localhost -m setup

もし上手くいかなければ、localhostにsshで接続できないことが考えられます。
sshでlocalhostに接続できていることが必須です。

ssh localhost

ansibleでshellコマンドを打つにはcommandモジュールを使います。
shellコマンドは任意のコマンドで使えます。venvディレクトリがあることが確認できますね。

ansible localhost -m command -a "ls"
localhost | CHANGED | rc=0 >>
venv

対象はIPアドレスでも記載できます。

ansible 127.0.0.1 -m command -a "ls"
127.0.0.1 | CHANGED | rc=0 >>
venv

基本モジュール

setup, commandモジュール以外にも様々なモジュールがあります。
モジュールを把握することで、ansibleで何ができるかがわかります。
気になる公式ドキュメントのページを検索するのが良いです。
全てのモジュールが一覧で掲載されているページで、ブラウザの検索機能で検索して詳細を確認しましょう。

入門として、良く使うモジュールをご紹介します。


<yumモジュール> 

yumはstateパラメータでpresent(install)等を指定できます。
stateはabcent,installed,latest,present,removedがあります。
presentとするとインストールできます。
pythonのインストールを実行し、既ににインストールされているため、changedはfalseとなっていますね。

 ansible localhost -m yum -a "state=present name=python"
localhost | SUCCESS => {
    "ansible_facts": {
        "pkg_mgr": "yum"
    },
    "changed": false,
    "msg": "",
    "rc": 0,
    "results": [
        "python-2.7.5-92.el7_9.x86_64 providing python is already installed"
    ]
}

<debugモジュール>

debugモジュールはdebug表示ができます。

ansible localhost -m debug -a "var=groups"
localhost | SUCCESS => {
    "groups": {
        "all": [],
        "ungrouped": []
    }
}

Ansibleのインベントリーファイルを作成する

何に何をするかでいう、何にをまとめて定義することができます。
inventoryファイルでは操作対象をまとめてグループ化して定義することができます。

web_serversにlocalhostを入れて、localhostをグループ指定する形に変更してみます。
db_serversでは、192.168.11.1~192.168.11.5までの5台のサーバをグループ化しています。
<inventory.ini>

[web_servers]
localhost
[db_servers]
db-1 ansible_host=192.168.11.[1:5]

コマンドは-i オプションをつけて、インベントリファイルを指定します。同様のことができます。

ansible -i inventory.ini web_servers -m setup

べきとう性のないモジュール

以下のコマンドはべきとう性が担保されないコマンドです。使う場合は条件分岐を入れた上で、動作確認をしっかりする必要があります。べきとう性とは、ある操作を複数回やっても同じ結果になる性質です。べきとう性はAnsibleの強みの1つであり、失わないようにplaybookを作っていく必要があります。シンプルにするためにも既にあるモジュールを使いこなすことや、モジュールの使い方にも注意して使っていきましょう。

command
expect
psexec
raw
script
shell
telnet

終わりに

AWSでansibleの環境を構築して、シンプルなansibleコマンドを試しました。playbookを使い複数機器を操作することについても、今後記事にしていき勉強していきたいと思います。べきとう性を失わないように自動化を行なっていくことや、ansibleの癖も掴んでいきたいと思います。