LoginSignup
12
12

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-18

はじめに

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

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

表示してみる

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

最後に

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

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

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

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12