
「IDCF Cloud Advent Calendar 2015 - Qiita」の8日目です!
前回は『AnsibleだけでHAProxy』を立ててみました。
今回は、Vagrantを使ってIDCFクラウドに「仮想マシン」を立ち上げて、Ansibleで設定してみたいと思います!
ええ、そうです。ただVagrant使いたかっただけです。。。
もくじ
前提条件
- IDCFクラウドアカウント作成済み
- IDCFクラウドのAPIキー取得済み
- 実行クライアントは Ubuntu 14.04
- 立ち上げるサーバーも Ubuntu 14.04
- Python 2.7(3はAnsible未対応のため)
- Ansible
- cs(Pythonのcs)
- cloudmonkey
- HAProxy v1.5
- Ruby2.0(後に必要になる)
- Vagrant(Vagrantupからダウンロード)
構築手順
今回も、まずは構築手順から書いていきます!途中までは前回と一緒です!
IDCFにサインアップして、東日本リージョンを有効化 と APIキー取得
ここは細かい手順を割愛します!IDCFさんが提供している手順書で、
- 「東日本リージョン」を有効化
- APIキーの取得
Ansibleが動く環境を構築する
すでにAnsibleの動く環境がある方は読み飛ばしてください
これがちょっと面倒なんですが。最初しかやらないので、さらっと終わらせましょう!
現在最新のAnsibleバージョンが「1.9.4」でした。
可能な限りできるだけ新しいバージョンを使ってください。
ではまず、Linuxのマシンを作ります!
IDCFクラウドのポータルから「Ubuntu Server 14.04 LTS」を立ち上げます。

- ゾーン: tesla
- マシンタイプ: light.S1
- イメージ: Ubuntu Server 14.04 LTS 64-bit
- ボリューム: ルートディスク 15GB
- SSH Keyは、作成するか「なし」
最低限Ansibleに必要なパッケージのインストール
立ち上げたUbuntu Serverにログインします!セットアップしていきます!
1 2 3 4 | sudo apt-get update sudo apt-get install python-pip sudo pip install ansible sudo pip install sshpubkeys |
Ansibleでその他のパッケージのインストール
さらなる環境構築をAnsibleのPlaybookにしましたので、こちらを使ってみると「この後」早いです!Ansibleの動作確認にもなりますしね!
snickerjp/ansible_env_playbook
実際のコマンド
1 2 3 4 | sudo apt-get install git git clone https: //github .com /snickerjp/ansible_env_playbook .git cd ansible_env_playbook cp hosts.template hosts |
main.ymlの編集
- vars:
- tasks:
1 2 3 4 5 6 7 8 9 10 | vars: key_name: snickerjp@tk2 #zone_name: augusta zone_name: tesla tasks: - name: ssh のキーをクラウドに送信する authorized_key: user=snickerjp key= "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" state=present |
Ansible実行
1 | ansible-playbook main.yml -i hosts -c local --ask- sudo -pass |
これで、環境構築が終わるはずです~!
Ansibleを使わないでやる方法
1 2 3 4 5 6 | sudo apt-get install python-dev sudo apt-get install python-markupsafe sudo apt-get install vim sudo pip install cs sudo pip install cloudmonkey sudo git clone https: //github .com /snickerjp/idcf_ansible_playbook .git /opt/idcf_ansible_playbook |
ここまでは前回と同じです!
Vagrantを使って、IDCFクラウドの仮想マシン(Ubuntu)を立ち上げる
Vagrant環境作成
先にVagrant環境を作ります!1 | cp vagrant.yml.template vagrant.yml |
vagrant.ymlの編集
- vars:
1 2 3 4 5 6 7 8 9 10 11 12 13 | vars: key_name: [IDCFクラウドにアップしたSSHキーの名前] #zone_name: augusta zone_name: tesla CLOUDSTACK_API_KEY: [API キー] CLOUDSTACK_SECRET_KEY: [シークレットキー] # cloudmonkey list publicipaddresses filter=id,workname CLOUDSTACK_PF_IP_ADDRESS_ID: [上記コマンドの返り値] CLOUDSTACK_PF_PUBLIC_PORT: 22 VAGRANT_SSH_USERNAME: root VAGRANT_SSH_PRIVATE_KEY: ~/. ssh /id_rsa cloudstack_host: [エンドポイントURL :idcfcloud.comまで] cloudstack_template_name: Ubuntu Server 14.04 LTS 64-bit |
Ansible実行
1 | ansible-playbook vagrant.yml -i hosts -c local --ask- sudo -pass |
これで、Vagrant環境構築が終わるはずです~!
Ansibleを使わない『Vagrant環境構築』
1 2 3 4 5 6 7 8 9 10 | wget -O /tmp/vagrant .deb https: //releases .hashicorp.com /vagrant/1 .7.4 /vagrant_1 .7.4_x86_64.deb dpkg -i /tmp/vagrant .deb vagrant plugin install dotenv vagrant plugin install vagrant-cloudstack sudo git clone https: //github .com /snickerjp/vagrant-idcf .git /opt/vagrant-idcf cd /opt/vagrant-idcf sudo cp dotenv.template . env sudo cp Vagrantfile.template.rb Vagrantfile sudo vi . env sudo vi Vagrantfile |
Vagrant で IDCFクラウドの仮想マシンを立ち上げる!
Ansibleだと、vars:で設定した値が入っていますが、手作業または後で変えたい時のために設定ファイルの項目を書いておきます。.envの編集
以下は設定例です
1 2 3 4 5 6 7 8 9 10 | CLOUDSTACK_API_KEY = '<api>' CLOUDSTACK_SECRET_KEY = '<シークレットキー>' # cloudmonkey list publicipaddresses filter=id,workname CLOUDSTACK_PF_IP_ADDRESS_ID = '< ポートフォワーディングに使用するIPアドレスのID>' # cloudmonkey list sshkeypairs filter=name CLOUDSTACK_SSH_KEYPAIR = 'sshkeypairの名前' CLOUDSTACK_PF_PUBLIC_PORT = '22' VAGRANT_SSH_USERNAME = 'root' VAGRANT_SSH_PRIVATE_KEY = '~/.ssh/id_rsa_idcfcloud' < /api > |
Vagrantfileの編集
Ansible実行した時は、以下を追加しています。
1 2 3 4 | config.vm.provision "ansible" do |ansible| ansible.verbose = "v" ansible.playbook = "../idcf_ansible_playbook/main.yml" end |
もろもろ設定
1 2 3 4 5 6 | # 環境に合わせて権限を変更してください sudo chown snickerjp:snickerjp -R /opt/vagrant-idcf cd /opt/vagrant-idcf # 環境に合わせて変更してください sudo vi . env sudo vi Vagrantfile |
HAProxyのセットアップ
1 2 3 4 5 6 7 8 9 10 11 12 | sudo chown snickerjp:snickerjp -R /opt/idcf_ansible_playbook cd /opt/idcf_ansible_playbook # SSLオフロード用の証明書を作成 cat server.key server.crt >> roles /ansible-haproxy-ssl/files/hogehoge .pem # templateを展開 sh init.sh # hosts: の項目をdefaultに変更してください vi main.yml # Ansible Provisioning実行 cd /opt/vagrant-idcf vagrant up --provider=cloudstack vagrant provision |


まとめ
これで、VagrantとAnsibleを使ったHAProxyサーバーの作成が可能になります!業務では、このように構成管理をして後に手順書代わりとして、AnsibleのPlaybookを残しています。
「この設定、どうしてこうなった?」は、AnsibleのPlaybookをgitで管理しているので。
gitからPlaybook見ると明らかなので、設定の見通しが良くなりました。
Vagrantで立てたのは、「仮想サーバーを作ったり・壊したりがとっても楽だからです!」
Ansibleだけでは簡単に出来なかった、ポートフォワード設定の削除やファイアーウォールの設定削除も「仮想マシンを消すとき」に同時に消してくれます。
