【入門】 Ansibleとは? 手を動かして入門

今回はAnsibleの解説と実際に手を動かして使い方を覚えていきます。

Ansibleはよく利用されています、理解しつつ一緒にやってみましょう。

Ansibleとは?

Ansibleは構成管理ツールです。

類似のサービスにはChefPuppetなどがあります。

メモ

AnsibleはYMLというデータ形式で構成

ChefはRuby言語をベースとしたDSLで構成

Puppetは独自DSLで構成

※DSLとは独自言語と理解しておけば大丈夫です。

Ansibleを利用することで、Infrastructure as a Code を実現することが可能になります。

メモ
インフラをコードで管理するという意味です。

例えばホームページ用のサーバーを構築しようとした場合に、

サーバーにWEBサーバーを入れたり、ユーザーを追加したりをすると思います。

その際に手動で構築をしていると他の人が理解できないことや、エラーが発生した場合にどこで間違っているかわからなかったり

問題が発生することは想像できるかと思います。

また、もう1台サーバーを増やそうとしたときに同じ手順を繰り返さないといけないというコストも発生します。

「構成管理ツール」は、そんな問題を解決するツールと考えてよいかと思います。

コードが毎回実行されるので他の人も理解しやすいかつ安全です。

特徴

その中でもAnsibleは下記のような特徴が挙げられます。

  • エージェントレス(導入が簡単)であること
  • Pythonが入ってさえいれば動作すること
  • 設定ファイルが少なく、記述がシンプルであること

Ansibleの使い方

Ansibleが何かがぼんやりわかったと思います。

早速触りながら実際に使い方を理解していってみましょう。

Vagrantを利用して仮想サーバーを構築する

まずは仮想サーバーを立てて、SSHで接続できるようにします。

今回Vagrantを利用し、仮想サーバーを構築しますので、Vagrantの詳しい使い方に関してはこちらに書いてあるので

わからない方は軽く目を通して使い方を覚えておきましょう。

【入門】 Vagrantとは? 仮想サーバーを立ててみる

まずは適当なディレクトリにVagrantfile (設定ファイル)を作成しましょう。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"
end

作成したファイルをおいたディレクトリ内で、

$ vagrant up

を入力し仮想サーバーを立てましょう。

続いて仮想サーバーにSSHをできるようにしておきましょう。

$ vagrant ssh-config --host vagrant >> ~/.ssh/config

これで、仮想サーバーにSSHできるかと思います。

下記のコマンドを入力しSSHを実行しましょう。

$ ssh vagrant

Ansibleの設定

続いて、Ansibleの設定に進んでいきます。

Inventory作成

まずはInventoryというものを作っていきましょう。

Inventoryは、どのサーバーに向けて構成を行うのかを定義するところです。

ファイル名は、hostsで作成しましょう。

[local]
vagrant

これでInventoryファイルの作成が完了です。

指定したvagrantとは、ssh/configで先ほど指定したホスト名になります。

PlayBook作成

続いて、PlayBookを定義していきましょう。

PlayBookどのサーバーに対して、どんな処理を実行するのかを定義するファイルになります。

今回は、local.ymlというPlayBookを作っていきましょう。

- name: PlayBook for local vagrant server
  hosts: local 
  become: yes
  remote_user: vagrant
  roles:
    - nginx

hostsファイルで指定した[local]に向けて、vagrantユーザーとして

nginxというroleを実行するということになります。

roles作成

最後にWEBサーバーであるnginxのroles(具体的な処理)を書いていきましょう。

まずはディレクトリを作成します。

$ mkdir -p roles/nginx/tasks

tasks/の中に、main.ymlを作成します。

- name: Install nginx
  become: yes
  yum:
    name: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    state: present
    lock_timeout: 180

- name: Install nginx package
  yum:
    name: nginx
    state: present
    lock_timeout: 180

- name: Set auto start nginx
  command: chkconfig nginx on

- name: Restart nginx
  command: service nginx restart

ここでは、nginxインストールして、起動するような処理を書いています。

ここまでで実行する準備ができました!

実行してみる

コマンドはこの形が基本です。

$ ansible-playbook -i [Inventory] [PlayBook]

つまり今回は下記のコマンドになります。

$ ansible-playbook -i hosts local.yml

LAY [PlayBook for local vagrant server] *******************************************************************************************************************************************************************

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

TASK [nginx : Install nginx] *******************************************************************************************************************************************************************************
ok: [vagrant]

TASK [nginx : Install nginx package] ***********************************************************************************************************************************************************************
ok: [vagrant]

TASK [nginx : Set auto start nginx] ************************************************************************************************************************************************************************
changed: [vagrant]

TASK [nginx : Restart nginx] *******************************************************************************************************************************************************************************
 [WARNING]: Consider using the service module rather than running 'service'.  If you need to use command because service is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.

changed: [vagrant]

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

問題なく動いてそうです。

WARNINGが出力されているのは気にせずで問題ありません。

WEBサーバーにアクセスしてみましょう。

ローカルホストで確認

Nginxの画面が表示されて入れば成功です!

今回はNginxだけ追加しましたが、DBを追加したり特定の言語を追加したりすることができます。

最後に

Ansibleについて理解できましたでしょうか?

Ansibleは構成管理ツールの中でも人気で世界で利用されています。

ぜひAnsibleを使ってみてください。