AWSのLightsailのWordPress(BitNami)へ移行する際の要点まとめ
BitNami(AW…
仕事でプロビジョニングについて学ぶ機会があったので、簡単なチュートリアルを含めて紹介。というわけで、この記事はプロビジョニングとは何?という方と、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権限で実行するとか、色々書いてある。もちろん、手順書が間違っていれば間違ったセットアップになるが、正しい内容であれば、人の手でセットアップする際に起こるようなミスはなく、今後も簡単に環境構築の再現が可能になる。
今回、なぜプロビジョニングツールにAnsible?という点については疑問を持たれる方も多いと思う。プロビジョニングというキーワードとよくセットで耳にすることが多いのは、おそらくはChefとかだと思う。だが、Chefあたりになると、より複雑なこともできる反面、学習コストがかかるようだ。Ansibleの場合、実際に手を出してみて、前評判でもそうだったが、学習コストはさほどかからないと感じた。また、AnsibleとChefとの根本的な違いといえば、ホスト以外、クライアントとなるマシンにもソフトウェアのインストールが必要か否かである。今回紹介するAnsibleの場合は、ホストとなるコンビュータにAnsibleをインストールし、そこからSSH経由でセットアップ命令を送る。Chefの場合はホスト以外、クライアント側マシンにもChefを事前にセットアップしておく必要があるという違いがある。というわけで導入の敷居がとにかく低いので、Ansibleである。
では実際にAnsibleにより、セットアップをしていくことにする。今回、Vagrantという、主にローカルマシンに仮想環境を簡単にセットアップできるツールを使ってチュートリアルをおこなう。Vagrantは開発にはもちろん、今回のような実験にも便利なツールで、使いこなすとめちゃくちゃコトが捗る。とりあえず今回は説明を省いていくので、今回Vagrantについては下記のリンクに説明を譲る。
開発環境の構築・共有を簡単にするVagrant入門 | Think IT(シンクイット)
詳しいことはさておき、チュートリアルだけの人向けとして、Vagrantのセットアップとして、まずはVagrantのセットアップとして下記の手順を実行する。
本題のチュートリアルである。ここではVagrantはすでにセットアップがしてある前提で話を進行する。前提として、ローカルマシンはMacを想定している。
まずは、AnsibleをMacにインストールする。
手順については、下記のページを参考にする。
Ansible を Homebrew で Mac OS X にインストールする手順 | WEB ARCH LABO
ansible —-versionコマンドで、Ansibleのバージョン情報が確認できれば、完了である。
<>任意の作業ディレクトリを作成する。今回は対象の仮想マシンのOSにUbuntuを使うので、ここでは仮にubuntuというディレクトリを作成する。
$mkdir ubuntu $cd ubuntu
次に、Ubuntuマシンの作成をする。クリーンな状態のUbuntuマシンの作成は、わずか2つのコマンドで完了する。
$vagrant box add ubuntu/trusty64 $vagrant init ubuntu/trusty64
これで一旦仮想マシンの作成を完了とする。以後特に断りがないかぎり、/ubuntu直下での作業となる。
Vagrantコマンドで作成したマシンの設定は、Vagrantfileに記載されている。VagrantfileはRubyで書かれているが、コメントでだいぶフォローされていて、基本はコメント部を外せば基本的な設定ができるようになっている。今回は基本外の設定なので、下記の記述を記述する。
Vagrant.configure(2) do |config| #上にはいっぱい設定のコメントが書いてある config.vm.provision :ansible do |ansible| ansible.playbook = "playbook.yml" end end
コードの中のplaybook.ymlとは、これから作成するAnsible向けのセットアップ手順書のことである。
AnsibleはPlaybookを元に、そこに書かれた命令を対象のクライアントマシンへ送る。PlaybookはYAMLと呼ばれる形式で書かれている。Dockerをインストールして、vagrantユーザをDockerグループに追加するまでである。/ubuntu配下に、playbool.ymlを作成し、下記の内容を記述する。
※下記のPlaybookのコードはVagrantの仮想マシンをAnsible Provisionerで自動構成する | Developers.IOとVagrant & 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
最後に、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のバージョンが表示されたらセットアップ完了!
VagrantでNode.jsやRailsのセットアップを手動で行って面倒だなあ…と思ったことは度々あった。あとは、Vagrantで手動でセットアップ、管理した場合に、地味に取り回しが悪いのが、VagrantのBOXファイルを所有することだ。重たい環境になると、BOXファイルの容量が600〜700MBなんてこともザラなので、頻度的にはそう何度も使わないのに、いちいち大容量のBOXファイルを所持しているのも疑問だ。なので、今後はセットアップ手順をPlaybookに起こし、それを管理するのが個人でもスマートだなあと思った。
とりあえずのところ、初めてのプロビジョニング体験であったわけだが、知っておいて損はない知識だと感じ、大いに満足!
プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。
Discussion about this post