LoginSignup
55
66

More than 5 years have passed since last update.

Windows上でansible_localプロビジョナーを使ってみた (Vagrant + Ansibleで環境構築の自動化)

Last updated at Posted at 2016-03-30

Vagrant + VirtualBoxでWindows上に仮想マシンを構築するところまでを、こちら で紹介しました。
今回はAnsibleと連携して、CentOS6.7の初期設定の自動化をするところまで書きたいと思います。
(まとめる時間があまり無いので色々と端折ります)

検証環境は以下です。(2016-03-29時点での最新)

ソフトウェア名 バージョン
Windows 7 (64bit)
Vagrant 1.8.1
VirtualBox 5.0.16
Ansible 1.9.4

※Windowsユーザーで、Cygwinとか面倒だなーって人向けです。

Ansibleってなに?

簡単に言うと、すんごいシンプルな構成管理ツールです。
エージェントレス(SSH接続できればOK)で、シンプルな定義ファイル(YAML, ini形式)が特徴。
ChefやPuppetなど競合の構成管理ツールよりは、とっつきやすいと言われてます。
僕も初めて使ってみましたが理解しやすかったです。

概要をまとめてくれている方がいるので、リンクを貼らせていただきます。

あと、公式ドキュメントがよく出来ています。
各モジュールの構文・オプションなどがしっかり書いてあり、例文も多いです。ここしか見ないって人も多いみたい。

日本語の書籍は少なくて今のところ 入門Ansible だけっぽいですが、4月末にオライリーの 初めてのAnsible が出るようです。

Vagrantと連携

Ansible単体でも実行可能ですが、今回はAnsibleをVagrantのprovisionerに使って、「仮想マシン作成」→「システム初期設定」→「よく使うパッケージのインストール」までを自動化してみます。

Vagrantには、2つのAnsible用provisionerがあります。

provisioner サポートしたバージョン 仕組み
ansible 1.7 ホストOSのAnsibleを使ってプロビジョニング
ansible_local 1.8 ゲストOSのAnsibleを使ってプロビジョニング

ホストOSがWindowsだとAnsibleをインストールできないので、ansible_localを使います。(Cygwinを使えばできるっぽい)
ansible_localは、ゲストOSにAnsibleが入っていなければインストールして、ローカルコネクションでPlaybookを実行します。
なのでWindows環境に追加でインストールするものはありません。

※そもそもローカル開発環境を作るくらいなら、shellスクリプトで初期設定して、vagrant packageでパッケージングしたものを使い回せば良いのではという話もありますが、いつか本番環境をAnsibleで運用したり、チームで開発環境を揃えるということがあるかもしれないので使ってみました。

PlaybookとVagrantfile

まだ全然作成途中ですが、今回作成したファイルは こちら に公開しました。ちょっとずつ更新する予定。

※Playbook作成段階でトライ&エラーを繰り返すときは、Vagrantとは連携せず、Vagrantのsaharaプラグインのサンドボックスモードですぐにロールバックできる状態にして、Ansible単体でPlaybookを実行した方が効率的だと思います。(毎回仮想マシン作成するのは時間の無駄なので)

  • サンドボックスモードON
コマンドプロンプト
vagrant up
vagrant sandbox on

※仮想マシンを停止した状態でサンドボックスモードONにした方が高速と言われているけど、それをロールバックすると共有フォルダがマウントされないかも?なので起動した状態でサンドボックスモードONにします。

  • Playbookを更新して、以下を実行
仮想マシンで実行
ansible-playbook -i /vagrant/playbook/hosts/local /vagrant/playbook/webservers.yml
  • 以前の状態に戻すときはロールバック
コマンドプロンプト
vagrant sandbox rollback

Playbook

  • ディレクトリ構成は、公式のベストプラクティスの構成に近くなるように作成。
  • 例と同じようにwebサーバーとdbサーバー用のPlaybookを作成。
  • 各サーバー共通で実行するタスク(locale, timezone, ntp設定など)をcommonロールとして定義
  • webサーバーで実行するタスク(httpd, phpインストールなど)をwebロールとして定義
  • dbサーバーで実行するタスク(postgresqlインストールなど[予定])をdbロールとして定義

それぞれのPlaybookにどのロールを適用するか定義する。

ロール webサーバー dbサーバー
common
web ×
db ×

Vagrantfile

  • webサーバー用ホスト(192.168.33.10)、dbサーバー用ホスト(192.168.33.20)の仮想マシン構築設定
  • ansible_localによるプロビジョニング指定
  • どのサーバーにどのPlaybookを適用するかの指定

使用方法

1. VirtualBoxとVagrantをインストール

Vagrant1.8以降なら大丈夫です。一応こちら にインストール手順があります。

2. VagrantfileとPlaybookをダウンロード

GitBashやコマンドプロンプトなど
git clone https://github.com/ozawan/vagrant-ansible-centos67.git

gitが入っていない場合はZIP形式でダウンロードしてください。

3. 仮想マシンを起動

GitBashやコマンドプロンプトなど
cd vagrant-ansible-centos67
vagrant up

結構時間がかかりますが、初期設定済みのCentOS6.7が起動するはずです。

※Vagrant Box(bento/centos-6.7)が追加されていない場合は、ダウンロード→追加を行うので更に時間がかかります。

その他の参考にしたサイト

55
66
2

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
55
66