vagrant
Ansible

vagrant, Ansible 使ってみた

職場でAnsibleをキャッチアップする機会をもらい、その際にやったことを残していこうと思います。
まだキャッチアップ間もないのでビジバシ突っ込んでいただけると…

環境

  • ホスト PC: Mac
  • Ubuntu ver: 16.04.4
  • 仮想環境: VirtualBox
  • Vagrant: 2.0.3
  • ansible: 2.5.0

Ansibleってなんだ?

  • 構成管理ツール

サーバーのOSやミドルウェアに対して、あるべき姿を定義したり定例的な作業を登録しておくことで作業を効率化・短時間化したり、人的ミスが起きるリスクを減らしたりすることを目的としたツール。

[公式ドキュメント]
http://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

vagrantで仮想環境を作ってみる

  • vagrantとは?

仮想マシンの作成と環境構築をまとめて実行できるようにしたツールのこと

[公式ドキュメント]
https://www.vagrantup.com/docs/

Ubuntu 16.04のBoxをダウンロードする

ダウンロードするBoxを探した時に参考にしたサイトはこちら
http://www.vagrantbox.es/

# Boxを取得する
$vagrant box add ubuntu-16.04 https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box

取得できているか確認します

$vagrant box list
ubuntu-16.04     (virtualbox, 0)

できてるーっ

次にVagrantを初期化します
このコマンドを打つことによってVagrantfileという設定ファイルが作成されます

$vagrant init ubuntu-16.04
# ubuntu-16.04はBoxの名前になります
  • vagrantを実行
$vagrant up
  • vagrantで立てたサーバーに対して sshで接続
$vagrant ssh
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-116-generic x86_64)

vagrantで立てたサーバーに対してssh接続できました!

Ansibleを使ってみる

vagrantを使い仮想環境を作り上げることが出来たので、実際にAnsibleを使っていきたいと思います

Vagrantfileを編集し、仮想環境上にサーバーを2つたてる

  • vagrantfileを以下のように設定し、仮想環境上にサーバーを2つたてます
VAGRANTFILE_API_VERSION = '2'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu-16.04"

  # VM
  config.vm.define :'host1' do |host|
    host.vm.hostname = 'host1'
    host.vm.network :forwarded_port, guest: 22, host: 2001, id: "ssh"
    host.vm.network :private_network, ip: "192.168.100.11"
  end

  config.vm.define :'host2' do |host|
    host.vm.hostname = 'host2'
    host.vm.network :forwarded_port, guest: 22, host: 2002, id: "ssh"
    host.vm.network :forwarded_port, guest: 80, host: 8000, id: "http"
    host.vm.network :private_network, ip: "192.168.100.12"
  end

  config.vbguest.auto_update = false
end

Vagrantfileを編集後に

$vagrant up

Ansibleサーバーをhost1,Ansibleに制御されるサーバーをhost2とします。
Ansible はエージェントインストールの必要がないのでSSH でログインできる環境であれば、ただそれだけで構成管理の対象にすることができます

起動後にAnsibleでhost1からhost2にsshするために秘密鍵をコピーします

$ vagrant ssh-config host1 > ssh_config
$ scp -F ssh_config .vagrant/machines/host2/virtualbox/private_key host1:.ssh/id_rsa

host1からhost2にssh接続できるかを確認します

$vagrant ssh host1
$vagrant ssh host2

いよいよAnsibleをインストールします

host1にAnsibleをインストール

# host1にsshで接続
$vagrant ssh host1

# Ansibleをインストール
$sudo apt-get update
$sudo apt-get install software-properties-common
$sudo apt-add-repository ppa:ansible/ansible
$sudo apt-get update
$sudo apt-get install ansible


vagrant@host1:~$ ansible --version
ansible 2.5.0

Ansibleをインストールすることが出来ました!

Ansibleは安全のために、あらかじめ指定したサーバー以外は接続しないようになっているので/etc/ansible/hostsファイルに接続先のIPを追加しましょう

/etc/ansible/hosts

192.168.100.12

疎通確認を行います

$ansible 192.168.100.12 -m ping
192.168.100.12 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

無事成功しました!

一旦は疎通確認が成功したところまでまとめました。
次回はplaybookについてまとめていこうと思います!
ありがとうございました!