chef, itamae, ansibleのいずれかで動作環境を作って人に渡す必要がありまして。
プロビジョニングツール(構成管理ツール)って言うらしいです。
Dockerみたいな感じなのかな?っていうふわっとした印象からお勉強スタート。
どれを選ぶか
とりあえずGoogle先生で「chef itamae ansible」で検索かけて、
上から10記事くらい流し見してみました。
ふむふむ。
おおざっぱにまとめると
・chefはいろいろできるけど学習コストが高い。ボツ。
・itamaeはシンプルで学習コスト低い。日本人が開発してる。Rubyで書く。
・Ansibleも学習コスト低い。利用者が多い。YAMLで書く。
って感じ。
シンプルで学習コストが低いものを求めている場合で、
Rubyに慣れていればitamae、そうじゃなければAnsibleっていう選び方でいい気がする。
利用者が多いっていう点も鑑みて、今回はAnsibleを使うことにします。
読み方調べたら「アンシブル」でした。
参考)http://yomikata.org/word/ansible
ドットインストールでお勉強開始
うーん、ネットに情報はいっぱい落ちてるけど断片的だしどうやってざっくり勉強しようかな…
あ、ドットインストールにAnsible講座ありました。ありがとうドットインストール!
Ansible講座は有料だったので、迷わず課金しました。
参考)https://dotinstall.com/lessons/basic_ansible
Vagrantでサーバーを立ち上げる
ローカルでAnsibleを使うこともできるらしいんだけど、調べてるとほぼ全員がVagrantを入れてました。
Vagrantは仕事でも使ってたけど、ほかの子に設定してもらったから自分ではいじったことない。。。
ま、やってみましょ。
# フォルダをつくって移動
$ mkdir Vagrant
$ mkdir Vagrant/ansible_lessons
$ cd Vagrant/ansible_lessons
VagrantCloudというサイトで、
参考)https://app.vagrantup.com/boxes/search
centos
で検索、最新バージョンのcentosからコマンドをコピーしてきて、
$ vagrant init centos/7
-bash: vagrant: command not found
これでvagrantファイルができるはず… と思ったら、
そんなコマンドないよって怒られちゃいました。
いきなりはやっぱだめですよねぇ…
Vagrantを使えるようにするため、またまたドットインストールをざっと流し見していきます。
参考)https://dotinstall.com/lessons/basic_vagrant
まずはバーチャルボックスの最新版をダウンロード、インストール。
参考)https://www.virtualbox.org/
Vagrantの最新版をダウンロード、インストール。
参考)https://www.vagrantup.com/
そんでVagrantのバージョンを調べると…?
$ vagrant --version
Vagrant 2.1.1
よかった、無事vagrantコマンドが使えるようになりました。
気を取り直してもう1回。
$ vagrant init centos/7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
よし、ちゃんとcentOSが入ったみたいですね。
次はVagrantfileファイルを編集します。
# vim立ち上げ
$ vi Vagrantfile
# インサートモードに切り替え(今後省略)
i
# 下記をコメントアウトして、
# config.vm.box = "centos/7"
# 以下を追加
config.vm.define "host" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "host"
node.vm.network :private_network, ip: "192.168.100.101"
end
config.vm.define "web" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "web"
node.vm.network :private_network, ip: "192.168.100.101"
end
config.vm.define "db" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "db"
node.vm.network :private_network, ip: "192.168.100.101"
end
# ノーマルモードに戻して(今後省略)
ESC
# 上書き保存して終了(今後省略)
ZZ
そしたらVagrantを立ち上げます。
$ vagrant up
ちょっと時間がかかります。
うええ、なんかIPアドレスを変更してよ!ってエラー吐かれたお。
Macのネットワーク環境設定に載ってたIPアドレスをそのままコピペしたんだけど、
外部と繋がっちゃうIPアドレスはプライベートネットワークに使っちゃいけないんだって。
なるほど。
これ自分で決めていいのかな?
調べていくと"192.168.33.10"を割り当てている人が多い。
ドットインストールだと"192.168.43.51"、"192.168.43.52"、"192.168.43.53"って3つ使ってる。
そっか!それぞれにIPアドレス変えないと見分けつかないよね。
"192.168.33.11"、"192.168.33.12"、"192.168.33.13"に書き直して試してみました。
気を取り直してもう一回!
$ vagrant up
今度はサクサク進み出しました。数分待つ。
無事終わったので、ステータスを確認。
$ vagrant status
無事3台とも走ってます!
Ansibleをインストール
host側からwebサーバーとdbサーバーをいじくるので、まずはhostにssh接続をします。
$ vagrant ssh host
Ansibleをインストールするにはepel(いーぺる)というリポジトリが必要なんだって。
「epel download」で検索して、epel-releaseのリンクをコピー。
# コピーしたリンクをwgetしてダウンロード
$ wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
...(省略)...
2018-06-09 01:50:29 (91.9 KB/s) - `epel-release-6-8.noarch.rpm' へ保存完了 [14540/14540]
# epelのリポジトリを有効にする(↑のファイル名使う)
$ sudo rpm -Uvh epel-release-6-8.noarch.rpm
# Ansibleをインストール
$ sudo yum -y install ansible
...(省略)...
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
うええ、エラーがいっぱいあるって言われてるよぅ。
調べてみたら、依存関係にあるファイルがあるとエラーになるんだって。
例えば、こっち入れる前にこっち入れといて〜みたいなのが依存関係。
1つ2つならいいけど、いっぱいあると解決難しそう。
そういうのを無視して、インストールできるところだけやっちゃうのが --skip-broken
らしい。
やってみよ!
$ sudo yum -y install ansible --skip-broken
...(省略)...
パッケージは依存関係に問題があるため、飛ばします:
PyYAML-3.10-11.el7.x86_64 (base から)
ansible-2.5.3-1.el6.noarch (epel から)
libtomcrypt-1.17-26.el7.x86_64 (extras から)
libtommath-0.42.0-6.el7.x86_64 (extras から)
libyaml-0.1.4-11.el7_0.x86_64 (base から)
python-babel-0.9.6-8.el7.noarch (base から)
python-backports-1.0-8.el7.x86_64 (base から)
python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch (base から)
python-cffi-1.6.0-5.el7.x86_64 (base から)
python-crypto2.6-2.6.1-2.el6.x86_64 (epel から)
python-enum34-1.0.4-1.el7.noarch (base から)
python-httplib2-0.9.2-1.el7.noarch (extras から)
python-idna-2.4-1.el7.noarch (base から)
python-ipaddress-1.0.16-2.el7.noarch (base から)
python-jinja2-26-2.6-3.el6.noarch (epel から)
python-keyczar-0.71c-1.el6.noarch (epel から)
python-markupsafe-0.11-10.el7.x86_64 (base から)
python-paramiko-2.1.1-4.el7.noarch (extras から)
python-ply-3.4-11.el7.noarch (base から)
python-pycparser-2.14-1.el7.noarch (base から)
python-setuptools-0.9.8-7.el7.noarch (base から)
python-six-1.9.0-2.el7.noarch (base から)
python2-crypto-2.6.1-15.el7.x86_64 (extras から)
python2-cryptography-1.7.2-2.el7.x86_64 (base から)
python2-pyasn1-0.1.9-7.el7.noarch (base から)
sshpass-1.06-2.el7.x86_64 (extras から)
一応できました。
26個のパッケージが依存関係に問題あるから飛ばしましたってメッセージでました。
飛ばされたやつはどうなるんや?
調べたらやっぱりこのままじゃまずいらしい。
参考)http://oxynotes.com/?p=6777
依存関係の解消にこれが効くらしいので叩いてみる。
$ package-cleanup --problems
-bash: package-cleanup: コマンドが見つかりません
Umm... 参考サイトに
「package-cleanup」を使った解決法も提示されていますが、そもそもyum-utilsがインストールされていないと利用することができません
とあるので、yum-utilsをインストールしてみます。
$ yum install yum-utils
このコマンドを実行するには root である必要があります。
# くっ。sudoさんつけてみる。
$ sudo yum install yum-utils
...(省略)...
完了しました!
# よっしゃ。では再チャレンジ!
$ package-cleanup --problems
読み込んだプラグイン:fastestmirror
No Problems Found
えええ、そんなのないって言われたお(´Д⊂ヽ
さっきの26個をひとつずつインストールしていくのかしら…
すこし手間がかかりますが、上記の検索等を利用して依存関係を解決するのが正攻法です。
って参考サイトのコメントを信じて、とりあえず $ sudo yum install
を上から順にかけていきました。
26個中13個がインストール完了、9個がすでに入ってる、4個がやっぱり依存関係でエラーでした。
エラーになった4個をもう1回ずつ $ sudo yum install
かけたけどダメ。
もう一回 $ sudo yum -y install ansible --skip-broken
をやってみたけど、
やはり4つだけ残りました。
このまま無視して進めたりしないかな?と思ってAnsibleのバージョンを聞いてみました。
$ ansible --version
-bash: ansible: コマンドが見つかりません
あ、ダメでした。
調べていくと、CentOS6までのやり方と、今回入れようとしたCentOS7とではやり方が違うらしいです。
参考サイトを真似してコマンド打ってみます。
参考)https://teratail.com/questions/86173
$ sudo yum install epel-release
...(省略)...
完了しました!
だがしかし、そのあとAnsibleをインストールしようとしても状況は変わらじ…
ググってもなかなか解決方法が出てこない。
困ったときは、英語が苦手でも公式サイトを見る!
pipというものを使ってインストールすることもできるらしいので、そちらでやってみます。
参考)https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
# pipをインストール
$ sudo easy_install pip
# pipでAnsibleをインストール
$ sudo pip install ansible
# ちゃんとインストールできたか、Ansibleのバージョン確認
$ ansible --version
ansible 2.5.4
config file = None
configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
あんなに苦労したのに、あっさりできちゃいました。ホッ。
SSH接続の設定
SSH接続はGitとか、レンタルサーバーとの接続でやったことあるぞ。
設定したIPアドレスを使ってweb側とdb側に接続することもできる(らしい)けど、
いちいちIPアドレスを打たなくても「web」「db」でアクセスできるようにします。
# configファイルを作る
$ vi .ssh/config
# 設定を書く
Host web
HostName 192.168.33.12
Host db
HostName 192.168.33.13
# パーミッションを変更
$ chmod 600 .ssh/config
次は秘密鍵と公開鍵を設定していきます。
# 鍵を作るお
$ ssh-keygen -t rsa
# ファイル名聞かれたらデフォルトのまま何も入れずにエンター
# パスフレーズも練習だし空のままエンター
# 公開鍵(id_rsa.pub)をwebにコピーする
$ ssh-copy-id web
# パスワード聞かれたら、vagrant
# 公開鍵(id_rsa.pub)をdbにもコピーする
$ ssh-copy-id db
# パスワード聞かれたら、vagrant
無事 $ ssh web
や $ ssh db
で接続できるようになりました!
hostに戻ってくるときは、 $ logout
とか $ exit
ですよ!←よく忘れる。
Ansibleを軽く使ってみる
Inventory(いべんとり)ファイルを作ります。
# hostsという名前でInventoryファイルを作る
$ vi hosts
# 処理対象となるサーバのアドレスを書く
[web]
192.168.33.12
[db]
192.168.33.13
Ansibleを使ってサーバーに処理を加えます。
# 全部のサーバーに
# iオプションでInventoryファイルの場所を指定して
# テスト用のpingモジュールを実行
$ ansible all -i hosts -m ping
192.168.33.12 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.33.13 | SUCCESS => {
"changed": false,
"ping": "pong"
}
「ピン」っていうと「ポン」って返ってくる。かわいい。すき。
次に、 -i hosts
を毎回書かなくてもいいように設定していきます。
# ansible.cfgファイルを作る
$ vi ansible.cfg
# デフォルトのホストファイルを書く
[defaults]
hostfile = ./hosts
# -i hostsを省略して実行できる…
$ ansible all -m ping
[DEPRECATION WARNING]: [defaults]hostfile option, The key is misleading as it can also be a list of hosts, a directory or a list of
paths , use [defaults] inventory=/path/to/file|dir instead. This feature will be removed in version 2.8. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
WARNING出ちゃいましたね。
仰せのままに、 hostfile =
と書いたところを inventory =
に変更しました。
無事WARNING消えました。
Playbookを作る
さっきみたいにansibleコマンドをつらつら書くこともできるけれど、
Playbookの中にやりたいことをまとめて書くことができるそうです。
Playbookってネーミングセンスがすき。楽しそう。
# YAML(やむる)ファイルを作成
$ vi playbook.yml
# hitomiユーザーを追加する指示を書く
- hosts: all
sudo: yes
tasks:
- name: add a new user
user: name=hitomi
# 実行
$ ansible-playbook playbook.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature
will be removed in version 2.6. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [all] ******************************************
TASK [Gathering Facts] ******************************
ok: [192.168.33.12]
ok: [192.168.33.13]
TASK [add a new user] *******************************
changed: [192.168.33.12]
changed: [192.168.33.13]
PLAY RECAP ******************************************
192.168.33.12 : ok=2 changed=1 unreachable=0 failed=0
192.168.33.13 : ok=2 changed=1 unreachable=0 failed=0
ドットインストールと違うWARNINGが出ましたね。
sudo
はもうださいから become
を使ってねって感じ。書き直して実行します。
$ vi playbook.yml
# sudoをbecomeに書き直し
- hosts: all
become: yes
tasks:
- name: add a new user
user: name=hitomi
# 再実行
$ ansible-playbook playbook.yml
PLAY [all] ******************************************
TASK [Gathering Facts] ******************************
ok: [192.168.33.13]
ok: [192.168.33.12]
TASK [add a new user] TASK [add a new user] *******************************
ok: [192.168.33.12]
ok: [192.168.33.13]
PLAY RECAP PLAY RECAP ******************************************
192.168.33.12 : ok=2 changed=0 unreachable=0 failed=0
192.168.33.13 : ok=2 changed=0 unreachable=0 failed=0
無事WARNINGが消えました。
Ansibleの冪等性(べきとうせい)の恩恵で、2回目はchanged=0になってます。
ちゃんとユーザーが追加されているかも確認します。
# webにログイン
$ ssh web
# ユーザーの一覧を出す
$ cat /etc/passwd
...(省略)...
vagrant:x:1000:1000:vagrant:/home/vagrant:/bin/bash
vboxadd:x:997:1::/var/run/vboxadd:/bin/false
hitomi:x:1001:1002::/home/hitomi:/bin/bash
最後にひとみちゃんが追加されていますね。よしよし。
$ exit
してhostに戻っておきます。
モジュールについては公式ドキュメントをみるといろいろあります。
参考)https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
Apacheのインストールと起動
webサーバーでApacheのインストールと起動をするよう、playbookに書いてみます。
# playbook.yml編集
$ vi playbook.yml
# インストールと起動
- hosts: all
become: yes
tasks:
- name: add a new user
user: name=hitomi
- hosts: web
become: yes
tasks:
- name: install apache
yum: name=httpd state=latest
- name: start apache and enabled
service: name=httpd state=started enabled=yes
# 実行
$ ansible-playbook playbook.yml
webサーバーのIPアドレス192.168.33.12をブラウザで叩くと、Apacheが入ってるのが分かります。
静的ページの表示
# 静的ページを作るよ
$ vi index.html
# いつものやーつ
<html>
Hello World!
</html>
# playbookで
$ vi playbook.yml
# オーナーを変えて、さっきのindex.htmlをコピー(前回までのところは省略)
- name: change owner
file: dest=/var/www/html owner=vagrant recurse=yes
- name: copy index.html
copy: src=./index.html dest=/var/www/html/index.html owner=vagrant
# 実行
$ ansible-playbook playbook.yml
192.168.33.12をブラウザで叩くと、無事にHello World!されました。こんにちは世界!
PHPの表示
# playbookで
$ vi playbook.yml
# php関連ファイルをインストールしてApacheを再起動(前回までのところは省略)
- name: install php packages
yum: name={{item}} state=latest
with_items:
- php
- php-devel
- php-mbstring
- php-mysql
notify:
- restart apache
- name: copy hello.php
copy: src=./hello.php dest=/var/www/html/hello.php owner=vagrant
handlers:
- name: restart apache
service: name=httpd state=restarted
# phpが動いているか確認するためのテストファイルを用意
$ vi hello.php
# いつものやーつ
<?php
echo "Hello PHP!";
# 実行
$ ansible-playbook playbook.yml
ブラウザで下記を叩くと、無事にHello PHP!されました。こんにちはPHP!
http://192.168.33.12/hello.php
私の今回の目的だとドットインストールで勉強するのはここまでかな。
動作環境を人に渡すには?
なんとなくAnsibleの基本動作は分かったけれど、
今回の目的は「あるWEBアプリケーションを作って、その動作環境を用意して渡すこと」です。
「Ansibleで作った動作環境を人に渡す」って、最終的にはどういうカタチになるんでしょう?
メール添付なのか、Git管理なのか、なんか予想つかないカタチなのか。
調べていきます。
......ネットサーフィン中......
なんとなくイメージ沸いてきました。
こんな↓構成で作って、圧縮してメールで送ればいいのかな。
それかGitHubに公開して落としてもらうか。
app/
├─ html/ ・・・WEBアプリケーションのソースコード
├─ ansible.cfg
├─ hosts
├─ playbook.yml
└─ Vagrantfile
練習ではVagrantで3つ仮想サーバーを立ち上げたうちの1つをホストにしたけれど、
今回はローカルをそのままホストにする。
共有する相手には下記2つのコマンドを実行してもらえれば、
同じ環境で動作確認ができるって感じ?
$ vagrant up
$ ansible-playbook playbook.yml
相手のPCにVagrantやAnsibleが入ってなかったら入れてもらわないとだけど… 大丈夫な気がする。
さて、こんな素人考えが本当に実行できるのか試してみましょ。
Vagrantでサーバー立ち上げ2
Vagrantfileファイルは横着して、vim使わないでansible_lessonsのときに作ったものをコピペしちゃいました。
今回はdbサーバー不要なので、中身の設定はwebだけにします。
config.vm.define "web" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "web"
node.vm.network :private_network, ip: "192.168.33.10"
end
さて立ち上がるでしょうか。
$ vagrant up
$ vagrant status
無事webサーバーが走ってます。
ローカル環境にAnsibleをインストール
さっきと同じ方法でAnsibleをインストールしてもいいけど、
Macにインストールするもっと簡単な方法あるんじゃないの?
って調べてみたらHomebrew使うと一発みたいです。
あれ?仕事ではHomebrew使うけど、自宅のMacにHomebrew入ってたっけ?
$ brew help
-bash: brew: command not found
はい、入ってませんでした。まいっか、ついでに入れちゃおう。
参考サイトを元に、ガシガシ行きます。
参考)https://weblabo.oscasierra.net/homebrew-1/
参考)https://weblabo.oscasierra.net/ansible-homebrew-install-1/
まずXcodeをインストール。
https://itunes.apple.com/jp/app/xcode/id497799835
って、ダウンロードまでしてたのにインストールしてなかったの?過去の私!?
って、インストールいつまでかかんだよ!終わらないじゃん!って2度ツッコミ。
ググッたら私と同じで、Xcodeのインストールが終わらない人続出らしい。
ここ見てiTunesHelperってプロセスを強制終了したら、インストールできました。
参考)https://gabekore.org/app-store-xcode-install
次にコマンドラインツールをインストール。
$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
と思ったらすでに入ってたw
しかしどうも様子が変なので調べてみました。
こちらのサイトの方と同じ現象の模様。コマンドラインツールのパスがおかしいんだって!
参考)https://techracho.bpsinc.jp/hachi8833/2016_09_09/25454
対応方法はこちら↓
$ xcode-select -p
# 「/Library/Developer/CommandLineTools」と表示されれば正常なのでここでおしまい
# 「/Applications/Xcode.app/Contents/Developer」と表示されたらパスがおかしいので次に進む
# パスを変更
$ sudo xcode-select -switch /Library/Developer/CommandLineTools
$ xcode-select -p
# 「/Library/Developer/CommandLineTools」と出力されることを
気を取り直して、コマンドラインツールをインストール。
$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
と思ったけど同じメッセージ。そふとうぇああっぷでーとって、あれか。
私がずっとmacOSのアップデートを面倒臭がってるせいかな。やってみる。
......macOSのアップデート......
再起動の後、画面が真っ黒になってマウスカーソルだけ表示される不具合onz
そういえばこれずっと続いてるんでした… 放置してた…
2回再起動したけど全然アップデートできないでやんの。
今はmacのクリーンインストールとかしてる時間はないので、
Homebrew使う方法はいったん諦めてさっきと同じくpipでやります。
# pipをインストール
$ sudo easy_install pip
# pipでAnsibleをインストール
$ sudo pip install ansible
# ちゃんとインストールできたか、Ansibleのバージョン確認
$ ansible --version
ansible 2.5.4
config file = None
configured module search path = [u'/Users/topstar0624/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /Library/Python/2.7/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.10 (default, Jul 15 2017, 17:16:57) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
ハァハァ。たったこれだけのことに1時間以上かかったぞ。
最初からpipにすればよかった… まなんとかなりました。
ローカルからplaybook実行
秘密鍵の設定とかあれこれ考えてこねくりしたけど、
お相手の手間を減らさないとAnsibleで動作環境を作る意味がないよな〜とウンウンうなりまして。
「こんな書き方できたらいいのにな」を想像しては検索してを繰り返して、なんとか形になりました。
お相手は基本的にこの2つだけコマンド打てば、ブラウザでWEBアプリケーションを確認できます。
$ vagrant up
$ ansible-playbook playbook.yml
# パスを聞かれたら、vagrant
秘密鍵とか.ssh/configの設定とか一切いらない!いい感じな気がする。
どうやったかをまとめていきます。
ファイル構成は、最初思いついたやつのままでいけました。
app/
├─ html/ ・・・WEBアプリケーションのソースコード
| └─ index.html ・・・Hello World!を表示するだけの簡単なお仕事
├─ ansible.cfg
├─ hosts
├─ playbook.yml
└─ Vagrantfile
<html>
Hello Worldだよ!
</html>
[defaults]
inventory = ./hosts
ask_pass = True
[app]
192.168.33.10 ansible_ssh_pass=vagrant ansible_ssh_user=vagrant
- hosts: app
become: yes
tasks:
- name: Apacheをインストール
yum: name=httpd state=latest
- name: Apacheを起動
service: name=httpd state=started enabled=yes
- name: オーナーチェンジ
file: dest=/var/www/html owner=vagrant recurse=yes
- name: htmlディレクトリのコピー
copy: src=./html dest=/var/www/ owner=vagrant
Vagrant.configure("2") do |config|
config.vm.define "app" do |node|
node.vm.box = "bento/centos-7"
node.vm.hostname = "app"
node.vm.network :private_network, ip: "192.168.33.10"
end
end
# appディレクトリに移動
$ cd /path/to/app/
# vagrant立ち上げ
$ vagrant up
# playbook実行
$ ansible-playbook playbook.yml
# パスを聞かれたら、vagrant
# ブラウザで下記にアクセスして動作確認
# 192.168.33.10
# vagrantを止める
$ vagrant halt
よしよし、なかなかいいものができた気がするお!(●´ϖ`●)