【初心者向けチュートリアル付き】Ansibleとは? 手を動かして入門

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

Ansibleについて理解しつつ一緒にやってみましょう。

Ansibleとは?

Ansibleは構成管理ツールです。 (プロビジョニングツールともいいます。)

Ansibleのような構成管理ツールを使うことで、サーバーの設定やネットワークの設定などを自動で実行できるようになることが大きなメリットであり役割です。

利用例

例えば…

サーバーを作るときに、下記のようにパッケージや言語などをインストールしていきます。

  • Python3.6をインストール
  • Ruby2.6をインストール
  • Nginxをインストール
  • MySQLをインストール

別のサーバーBを作ったときに、同じ手順で同じ環境を作りたいとしても手動だと大変です。

そんなときに構成管理ツールを使うことで、インストールするものをコード化でき、コマンド1つで適用できます

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

メモ

Infrastructure as a Codeとは、

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

コードで管理することで、たくさんのメリットがあります。

  • 他の人も使える
  • いつでも同じ環境を作れる
  • 知らない間にどんどんサーバーが変更されることを防げる
  • コードを見てレビューができる(バグを防ぎ、修正が容易)

類似サービス

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

言語的な違い

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

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

Puppetは独自DSLで構成

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

特徴

その中でも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は構成管理ツールの中でも人気で世界で利用されています。

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

リアルなアプリケーション環境を構築するチュートリアルもあるので、より実践的な内容を学習したい場合におすすめです。

AnsibleでWEBアプリケーション(Rails)環境構築チュートリアル