Ansible
チュートリアル

【Ansibleチュートリアル】基礎の基礎の基礎の基礎編

はじめに

これはあくまで個人的なメモです。

Ansibleを触る機会があったので
詰まったところなどを解消しつつメモ程度にチュートリアルとして残したくQiitaを利用しました。

前提条件

  • Vagrantがインストールされている
  • VirtualBoxがインストールされている

vagrant Boxを手に入れよう

centos6.7となっておりますがこれは任意に名前を付ける事が可能な為
centos-6.7などの場合もあります。

box listを確認する

hostPC(mac)
$ vagrant box list

centos6.7 (virtualbox, 0)

boxをダウンロードする(※centos6.7があればスキップ)

hostPC(mac)
$ vagrant box add centos6.7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box

作業ディレクトリを作りvagrantファイルを編集する

作業ディレクトリの作成と移動

hostPC(mac)
$ mkdir ~/ansible
$ cd ~/ansible

Vagrantfileの作成

hostPC(mac)
# centos6.7の部分はvagrantのbox名
$ vagrant init centos6.7
$ vi Vagrantfile

自分は全消しで以下を記入しました。

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

Vagrant.configure("2") do |config|
  config.ssh.insert_key = false

  config.vm.define "webserver1" do |webserver1|
    webserver1.vm.hostname = "webserver1"
    webserver1.vm.box = "centos6.7"
    webserver1.vm.network "private_network", ip: "192.168.33.21"
  end

  config.vm.define "webserver2" do |webserver2|
    webserver2.vm.hostname = "webserver2"
    webserver2.vm.box = "centos6.7"
    webserver2.vm.network "private_network", ip: "192.168.33.22"
  end

end

vagrant立ち上げ

hostPC(mac)
$ vagrant up

詳細確認

hostPC(mac)
$ vagrant ssh-config

Host webserver1
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/{User名}/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host webserver2
  HostName 127.0.0.1
  User vagrant
  Port 2201
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/{User名}/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

今回は
webserver1をansibleの適用対象とし
webserver2をansible環境として運用しましょう。

この時私は失敗したと思いました。
ansibleという名前と
targetで分ければよかったと。。。orz

ansibleインストール

hostPC(mac)
$ vagrant ssh webserver2
(ssh)webserver2
[vagrant@webserver2 ~]$ sudo yum -y install ansible

ssh-keyの設定関係

ansible環境から対象環境へsshで接続できるように
sshのキーをwebserver2=>webserver1へ送ります。

ssh-keyの生成とコピー

(ssh)webserver2
[vagrant@webserver2 ~]$ ssh-keygen -t rsa
[vagrant@webserver2 ~]$ ssh-copy-id vagrant@192.168.33.21
# 色々聞かれますがenter連打でokです
# 最後にpasswordを聞かれますが、vagrantが初期パスワードになっています

ssh接続確認

(ssh)webserver2
[vagrant@webserver2 ~]$ ssh vagrant@192.168.33.21
[vagrant@webserver1 ~]$

# 2から1にノンパスで行けるようになったので成功です

インベントリの作成

インベントリは、反映先サーバの一覧のようです。

一般的には、hostsという名前で利用されるようです。

インベントリの作成

hostPC(mac)
$ vi ~/ansible/hosts
~/ansible/hosts
[webserver]
192.168.33.21

気分転換に疎通確認をしてみる

(ssh)webserver2
[vagrant@webserver2 ~]$ cd /vagrant/
[vagrant@webserver2 vagrant]$ ansible all -i hosts -m ping

192.168.33.21 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

(ここからが本編)Playbookを作成する

playbookを利用しtargetであるwebserver1にnginxをインストールさせます

またplaybookには大きく分けて3つの定義が必要になるそうです

  • target

    • どこに・誰が実行するか
  • vars

    • 変数を指定する(taskで使用する)
  • task

    • どんなことをするかモジュール使って記述する

以上を踏まえてplaybookを作成します

playbookを記述する

hostPC(mac)
$ vi ~/ansible/nginx.yml
~/ansible/nginx.yml
- hosts: webserver
  become: True
  tasks:
  - name: install nginx repo
    yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present
  - name: install nginx
    yum: name=nginx
  - name: restart nginx
    service: name=nginx state=restarted

それぞれの意味

  • hosts:
    • hostの指定。今回はグループを指定している。
  • become:
    • sudoとして実行する
  • tasks:
    • 実行するタスク。ここに記述した順に実行されていく
  • name:
    • タスクの名前
  • yum:
    • yumモジュールを利用
  • service:
    • Serviceモジュールを利用

※Ansibleでは決まったディレクトリなどから情報を暗黙的に取得するため、依存関係を理解しておく必要がある。

ansible実行

適用実行する

(ssh)webserver2
[vagrant@webserver2 vagrant]$ ansible-playbook -i hosts nginx.yml

スクリーンショット_2018-01-18_16_03_46.png

もう一度実行してみる

(ssh)webserver2
[vagrant@webserver2 vagrant]$ ansible-playbook -i hosts nginx.yml

nginxはすでにinstallされている為okとなっています。
ただしrestartタスクは何度でもできるものとなっている為
changed=1になっている事がわかります。

スクリーンショット 2018-01-18 15.58.49.png

表示してみる

http://192.168.33.21

スクリーンショット 2018-01-18 15.56.26.png

最後に

インストール物などを全てコードベースで残す事ができるのは便利ですね。
何か変更があった際、githubなどで差分などを確認できますし
何より目に見える形で残せるのはとても良いです!

共有も簡単でインストールに間違いなども起こらないのでステキです!

参考元:VagrantでAnsible超初歩ハンズオン
   :【チュートリアル】Ansible 基本のキ (インストールから複数サーバへの変更適用)
   :Ansible Documentation