今回はAnsibleの解説と実際に手を動かして使い方を解説していきます。
Ansibleについて理解しつつ一緒にやってみましょう。
Ansibleとは?
Ansibleは構成管理ツールです。 (プロビジョニングツールともいいます。)
Ansibleのような構成管理ツールを使うことで、サーバーの設定やネットワークの設定などを自動で実行できるようになることが大きなメリットであり役割です。
例えば…
サーバーを作るときに、下記のようにパッケージや言語などをインストールしていきます。
- Python3.6をインストール
- Ruby2.6をインストール
- Nginxをインストール
- MySQLをインストール
別のサーバーBを作ったときに、同じ手順で同じ環境を作りたいとしても手動だと大変です。
そんなときに構成管理ツールを使うことで、インストールするものをコード化でき、コマンド1つで適用できます。
Ansibleを利用することで、Infrastructure as a Codeを実現することが可能になります。
Infrastructure as a Codeとは、
インフラをコードで管理するという意味です。
コードで管理することで、たくさんのメリットがあります。
- 他の人も使える
- いつでも同じ環境を作れる
- 知らない間にどんどんサーバーが変更されることを防げる
- コードを見てレビューができる(バグを防ぎ、修正が容易)
類似サービス
類似のサービスにはChefやPuppetなどがあります。
AnsibleはYMLというデータ形式で構成
ChefはRuby言語をベースとしたDSLで構成
Puppetは独自DSLで構成
※DSLとは独自言語と理解しておけば大丈夫です。
特徴
その中でもAnsibleは下記のような特徴が挙げられます。
- エージェントレス(導入が簡単)であること
- Pythonが入ってさえいれば動作すること
- 設定ファイルが少なく、記述がシンプルであること
Ansibleの使い方
Ansibleが何かがぼんやりわかったと思います。
早速触りながら実際に使い方を理解していってみましょう。
Vagrantを利用して仮想サーバーを構築する
まずは仮想サーバーを立てて、SSHで接続できるようにします。
今回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を使ってみてください。
リアルなアプリケーション環境を構築するチュートリアルもあるので、より実践的な内容を学習したい場合におすすめです。