Linux

【Ansible入門】Ansibleでインフラ構築自動化

Linux

Ansibleの実行環境セットアップ

Ansibleとは?

AnsibleとはRed Hat, Inc.とコミュニティが開発しているオープンソースの自動開発構成ツールです。インフラ構成を定義するコードをPlaybookに記述することで、手動で行っていたシステム構築・設定変更などを自動化することが可能です。

事前準備

Red Hat系Linux(今回はCentOSを使用します)
CentOSバージョン:CentOS Linux release 7.7.1908 (Core)

Ansibleのインストール

1.EPELリポジトリを有効にし、Ansibleをインストールします。
  ※EPELはFedoraプロジェクトが公開している通常のbaseリポジトリでは含まれていない新しいパッケージをまとめているリポジトリです。

$ sudo yum install epel-release
$ sudo yum install ansible

2.Ansibleバージョンの確認

$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/azureuser/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

Ansibleのインストールは以上になります。

Adhocコマンド実行方法

Ansibleでは基本的に「Playbook」を作成しターゲットノードに対して処理を実行しますが、Playbookを作るまでもないような処理の場合、「Adhocコマンド」が使用することもできます。Adhocコマンドでは特定のモジュールとパラメータを指定し処理を実行できます。

Pingモジュールを使ってターゲットノードに接続できるか試してみます。ターゲットノードは今回、localhost(自分自身)とします。

$ ansible localhost -m ping

以下の結果が返ってきます。これは対象のホスト(今回は自分自身)に対して正常にpingが通ったことになります。

$ ansible localhost -m ping 
localhost | SUCCESS => {
      "changed": false,
      "ping": "pong"
}

また、pingモジュール以外にもshellモジュールを実行することも可能です。shellモジュールの場合はターゲットノードに実行するシェルコマンドを指定します。

$ ansible localhost -m shell -a date

以下の結果が返ってきます。

$ ansible localhost -m shell -a date 
localhost | CHANGED | rc=0 >>
2020年  3月 29日 日曜日 15:12:28 JST

Playbook作成と実行

Playbook作成

「/etc/ansible/nginx_install.yml」を次の内容で作成します。
 ※インデント、コロン後ろのスペースに注意

---
- hosts: all
  vars:
    ansible_become: yes
    ansible_become_method: sudo
  tasks:
    - name: Install Nginx
      yum:
        name: nginx
        state: latest

インベントリファイル(hosts)編集

今回はローカル環境にインストールするので以下を追記します。
/etc/ansible/hosts

localhost ansible_connection=local

Playbook実行

$ ansible-playbook -i hosts nginx_install.yml

実行結果
changed=1となっています。

$ ansible-playbook -i hosts nginx_install.yml

PLAY [all] **************************************************************************************

TASK [Gathering Facts] **************************************************************************
ok: [localhost]

TASK [Install Nginx] ****************************************************************************
changed: [localhost]

PLAY RECAP **************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

インストール状況の確認

yumで確認してみると、正常にインストールされています。

$ sudo yum list installed | grep nginx
nginx.x86_64                           1:1.16.1-1.el7                 @epel
nginx-all-modules.noarch               1:1.16.1-1.el7                 @epel
nginx-filesystem.noarch                1:1.16.1-1.el7                 @epel
nginx-mod-http-image-filter.x86_64     1:1.16.1-1.el7                 @epel
nginx-mod-http-perl.x86_64             1:1.16.1-1.el7                 @epel
nginx-mod-http-xslt-filter.x86_64      1:1.16.1-1.el7                 @epel
nginx-mod-mail.x86_64                  1:1.16.1-1.el7                 @epel
nginx-mod-stream.x86_64                1:1.16.1-1.el7                 @epel

Playbookを再実行

Nginxがインストール済の状況でPlaybookを再実行してみます。

$ ansible-playbook -i hosts nginx_install.yml

PLAY [all] **************************************************************************************

TASK [Gathering Facts] **************************************************************************
ok: [localhost]

TASK [Install Nginx] ****************************************************************************
ok: [localhost]

PLAY RECAP **************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

先ほど、「changed=1」でしたが今回は 「changed=0」となりました。
既にNginxがインストール済(最新の状態)であたため処理をスキップしたことになります。これはAnsibleのモジュールではなんどやっても同じ結果を保証してくれる設計となっています。これを冪等性が担保されると言います。

まとめ

いかがでしたでしょうか。今までの手動でのインフラ構築では設定値の誤りやバージョン違いや構築作業にかかる時間など課題がありました。Ansibleを利用すればこれらの課題を解消することができます。はじめは大変かもしれませんが、Ansibleを使いこなして作業の自動化をおこないたいですね。

今回は以上となります。ご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました