普段思ったことや、雑記。

Menu & Search

Vagrant+Ansibleによる初めてのプロビジョニング

2015年7月5日

仕事でプロビジョニングについて学ぶ機会があったので、簡単なチュートリアルを含めて紹介。というわけで、この記事はプロビジョニングとは何?という方と、Ansible触ってみたい方、Vagrantで簡単にプロビジョニングができる方法を知りたい方向けの記事になっている。

 

プロビジョニングとは

プロビジョにングとは、ざっくりいうと、任意のタイミングで事前に意図するシステム構成を動的にささっと構築してあげることだ。正確な定義的なものについては、下記のリンクを参照。

情報システム用語事典:プロビジョニング(ぷろびじょにんぐ) – ITmedia エンタープライズ

http://www.itmedia.co.jp/im/articles/0606/18/news005.html

 

プロビジョニングとは|provisioning – 意味/解説/説明/定義 : IT用語辞典

http://e-words.jp/w/%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0.html

 

プロビジョニングをよくあるサーバの環境構築の具体的な作業に当てはめて考えると、こうだ。通常はCentOSなり、なんらかのOSを用意すると、まずはサーバの中に入って、Webサーバなり、DBサーバなりをyum installなんてやったりして手動で設定していくことが多いだろう。手動で環境構築をする欠点は言うまでもなく、ヒューマンエラーである。人の手でやっているので、どうしても作業漏れなどのミスが発生する。

今回紹介するプロビジョニングツールのAnsibleは、この点を解消する。Ansibleの場合、Ansibile向けに事前に書かれた手順書をもとに、環境構築を行う。この手順書には、Webサーバをインストールしろとか、sudo権限で実行するとか、色々書いてある。もちろん、手順書が間違っていれば間違ったセットアップになるが、正しい内容であれば、人の手でセットアップする際に起こるようなミスはなく、今後も簡単に環境構築の再現が可能になる。

 

VagrantとAnsible

AnsibleとChefとの違い

今回、なぜプロビジョニングツールにAnsible?という点については疑問を持たれる方も多いと思う。プロビジョニングというキーワードとよくセットで耳にすることが多いのは、おそらくはChefとかだと思う。だが、Chefあたりになると、より複雑なこともできる反面、学習コストがかかるようだ。Ansibleの場合、実際に手を出してみて、前評判でもそうだったが、学習コストはさほどかからないと感じた。また、AnsibleとChefとの根本的な違いといえば、ホスト以外、クライアントとなるマシンにもソフトウェアのインストールが必要か否かである。今回紹介するAnsibleの場合は、ホストとなるコンビュータにAnsibleをインストールし、そこからSSH経由でセットアップ命令を送る。Chefの場合はホスト以外、クライアント側マシンにもChefを事前にセットアップしておく必要があるという違いがある。というわけで導入の敷居がとにかく低いので、Ansibleである。

 

Vagrant

では実際にAnsibleにより、セットアップをしていくことにする。今回、Vagrantという、主にローカルマシンに仮想環境を簡単にセットアップできるツールを使ってチュートリアルをおこなう。Vagrantは開発にはもちろん、今回のような実験にも便利なツールで、使いこなすとめちゃくちゃコトが捗る。とりあえず今回は説明を省いていくので、今回Vagrantについては下記のリンクに説明を譲る。

開発環境の構築・共有を簡単にするVagrant入門 | Think IT(シンクイット)

http://thinkit.co.jp/story/2015/03/19/5740

詳しいことはさておき、チュートリアルだけの人向けとして、Vagrantのセットアップとして、まずはVagrantのセットアップとして下記の手順を実行する。

  1. Vagrant公式のダウンロードエリアより、ローカルマシンのOS向けのVagrantソフトウェアをダウンロードし、それをインストール
  2. Vagrantのプロバイダとして、OracleのVM VirtualBoxを使用するので、Oracle公式ダウンロードエリアよりローカルマシンのOS向けのものをダウンロード、それをインストール
  3. $vagrant -vと叩いて、Vagrantのバージョン表示を確認

 

Vagrat+AnsbileによるDockerセットアップチュートリアル

本題のチュートリアルである。ここではVagrantはすでにセットアップがしてある前提で話を進行する。前提として、ローカルマシンはMacを想定している。

 

1.Ansibleのインストール

まずは、AnsibleをMacにインストールする。

手順については、下記のページを参考にする。

Ansible を Homebrew で Mac OS X にインストールする手順 | WEB ARCH LABO

http://weblabo.oscasierra.net/ansible-homebrew-install-1/

ansible —-versionコマンドで、Ansibleのバージョン情報が確認できれば、完了である。

 

2.Dockerをセットアップする対象マシンをVagrantにて作成

<>任意の作業ディレクトリを作成する。今回は対象の仮想マシンのOSにUbuntuを使うので、ここでは仮にubuntuというディレクトリを作成する。

$mkdir ubuntu
$cd ubuntu

次に、Ubuntuマシンの作成をする。クリーンな状態のUbuntuマシンの作成は、わずか2つのコマンドで完了する。

$vagrant box add ubuntu/trusty64
$vagrant init ubuntu/trusty64

これで一旦仮想マシンの作成を完了とする。以後特に断りがないかぎり、/ubuntu直下での作業となる。

 

3.UbuntuマシンのプロビジョニングにAnsibleを使う設定をおこなう

Vagrantコマンドで作成したマシンの設定は、Vagrantfileに記載されている。VagrantfileはRubyで書かれているが、コメントでだいぶフォローされていて、基本はコメント部を外せば基本的な設定ができるようになっている。今回は基本外の設定なので、下記の記述を記述する。

Vagrant.configure(2) do |config|
  #上にはいっぱい設定のコメントが書いてある
  config.vm.provision :ansible do |ansible|
    ansible.playbook = "playbook.yml"
  end
end

コードの中のplaybook.ymlとは、これから作成するAnsible向けのセットアップ手順書のことである。

4.playbook.ymlを作成する。

AnsibleはPlaybookを元に、そこに書かれた命令を対象のクライアントマシンへ送る。PlaybookはYAMLと呼ばれる形式で書かれている。Dockerをインストールして、vagrantユーザをDockerグループに追加するまでである。/ubuntu配下に、playbool.ymlを作成し、下記の内容を記述する。

※下記のPlaybookのコードはVagrantの仮想マシンをAnsible Provisionerで自動構成する | Developers.IOVagrant & Ansible Quickstart Tutorial – adamcod.esを参考にさせてもらいました。

---
- hosts: all
  sudo: true
  tasks:
    - name: install latest docker
    shell: curl -sSL https://get.docker.com/ubuntu/ | sudo sh
    - name: add vagrant user to docker group
    command: gpasswd -a vagrant docker

5.vagrant upしてプロビジョニングを実行!

最後に、Ubuntuマシンを起動し、プロビジョニングを実行する。Ansibleは本来であれば、セットアップ対象マシンの公開鍵などが必要だったりするが、Vagrant向けであればAnsibleのセットアップの設定がVagrant向けで用意されているので、今回は気にしない。何も考えずに、下記の起動コマンドを打つ。

$vagrant up

初期のセットアップは長いので、ちょっと時間をおいて、セットアップが終了したら、

$vagrant ssh

でUbuntuマシンにログイン、Dockerがインストールされているかを確認する

vagrant@vagrant-ubuntu-trusty-64:~$ docker version
Client version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64

Dockerのバージョンが表示されたらセットアップ完了!

 

最後に、Ansibleについて感想

VagrantでNode.jsやRailsのセットアップを手動で行って面倒だなあ…と思ったことは度々あった。あとは、Vagrantで手動でセットアップ、管理した場合に、地味に取り回しが悪いのが、VagrantのBOXファイルを所有することだ。重たい環境になると、BOXファイルの容量が600〜700MBなんてこともザラなので、頻度的にはそう何度も使わないのに、いちいち大容量のBOXファイルを所持しているのも疑問だ。なので、今後はセットアップ手順をPlaybookに起こし、それを管理するのが個人でもスマートだなあと思った。

とりあえずのところ、初めてのプロビジョニング体験であったわけだが、知っておいて損はない知識だと感じ、大いに満足!

Article Tags
mmiyauchi

プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。

Related article

AWSのLightsailのWordPress(BitNami)へ移行する際の要点まとめ

BitNami(AW…

クロスプラットフォームでプロセスを殺せるツールのfkill-cliが便利すぎる

クロスプラットフォームでプロセスを殺せるツールのfkill-cliが便利すぎる

MacでOffice…

ドメイン更新料金が安くて、仮想通貨がもらえるレジストラ「Uniregistry」が良い

ドメイン更新料金が安くて、仮想通貨がもらえるレジストラ「Uniregistry」が良い

Whois情報のプラ…

Discussion about this post

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Type your search keyword, and press enter to search