Vagrant + DigitalOcean + Ansibleで環境構築
ものすごく今更ながら、実践Vagrantを見ながら、Vagrantを試してる。
- 作者: Mitchell Hashimoto,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/02/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
ついでに気になってたDigitalOceanも試したかったので、 VagrantとSSDなVPS(Digital Ocean)で1時間1円の使い捨て高速サーバ環境を構築する - Glide Note - グライドノート を参考に、DigitalOceanにVagrant+Ansibleで環境を構築する方法を試したので、メモ。
Vagrantのインストール
Download Vagrant - Vagrantからバイナリをダウンロード。
Ansibleのインストール
プロビジョニングには今回Ansibleを使用。インストールはpipから。
pip install ansible
DigitalOcean Pluginのインストール
標準のproviderではDigitalOceanは存在しないが、Pluginが既にあるので、インストール。
https://github.com/smdahlen/vagrant-digitalocean
vagrant plugin install vagrant-digitalocean
MacだとDigital OceanのAPIを叩くためには追加で下記をインストールする必要があるみたい。
brew install curl-ca-bundle
インストール後、.zshrc等に環境変数をセット
export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
DigitalOceanのアカウント作成
DigitalOceanからアカウントを作成。
アカウント作成後、管理画面からssh keyの登録とAPI keyの発行を行う。
Vagrantfileの作成
インスタンスは最小プラン(512MB)、RegionはSingaporeの構成で作成する想定。 注意点としては、「provider.client_id」、「provider.api_key」、「provider.ssh_key_name 」をssh keyの登録やAPI keyの発行で確認したものにきちんと設定すること。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure('2') do |config| config.vm.hostname = "digital-ocean-test" config.vm.provider :digital_ocean do |provider, override| override.ssh.private_key_path = '~/.ssh/id_rsa' override.vm.box = 'digital_ocean' override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box" provider.client_id = 'API key発行時に確認したClient ID' provider.api_key = 'API key発行時に確認したAPI key' provider.region = 'Singapore 1' provider.size = '512MB' provider.ssh_key_name = 'ssh key登録時に登録したssh key name' end config.vm.provision :ansible do |ansible| ansible.playbook = "provision_vagrant.yml" # playbookファイル名 ansible.host_key_checking = false end end
playbookの作成
ansibleでprovisionするためにplaybookを作成。 provisoningの内容は、実践Vagrantの例の通り。
playbookのファイル名は「provision_vagrant.yml」で作成。
- hosts: default user: root tasks: - apt: pkg=apache2 update_cache=yes state=latest - file: path="/var/www" state=absent - file: src="/vagrant" dest="/var/www" state=link
DigitalOceanではユーザ名がrootで作成されるので、「user」を「root」にすること。
Ansibleでは通常provisoning先をINVENTORY FILEに記載する必要があるが、DigitalOcean等、ローカル以外の環境に作成する場合は、IPアドレスが作成後に決まる為、事前にINVENTORY FILEを用意することができない。
Vagrantではこの問題を解消するために、INVENTORY FILEを指定しない場合は、自動でINVENTORY FILEを作成し、それを使用してprovisioningを行ってくれる。*1
vm名をVagrantfileで指定しない場合は、「default」で生成されるので、「hosts」についても「default」を指定。
あと、実践Vagrantにならって、index.htmlも用意しておく。
<strong>Hello</strong>
インスタンスの作成
上記まで用意できたら、あとはVagrantを実行するだけ、providerとしてDigitalOceanを指定して起動。
vagrant up --provider=digital_ocean
起動後はsshでアクセス
vagrant ssh
後はブラウザでアクセスして下記のように表示されれば、OK
使い終わったら、destroyでインスタンスを破棄。
vagrant destroy
参考
http://blog.glidenote.com/blog/2013/12/05/digital-ocean-with-vagrant
https://github.com/smdahlen/vagrant-digitalocean
https://docs.vagrantup.com/v2/provisioning/ansible.html