「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にログインします!セットアップしていきます!
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
実際のコマンド
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:
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実行
ansible-playbook main.yml -i hosts -c local --ask-sudo-pass
これで、環境構築が終わるはずです~!
Ansibleを使わないでやる方法
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環境を作ります!cp vagrant.yml.template vagrant.yml
vagrant.ymlの編集
- vars:
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実行
ansible-playbook vagrant.yml -i hosts -c local --ask-sudo-pass
これで、Vagrant環境構築が終わるはずです~!
Ansibleを使わない『Vagrant環境構築』
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最後のあたりが、Ansibleではないと面倒ですね・・・
Vagrant で IDCFクラウドの仮想マシンを立ち上げる!
Ansibleだと、vars:で設定した値が入っていますが、手作業または後で変えたい時のために設定ファイルの項目を書いておきます。.envの編集
以下は設定例です
CLOUDSTACK_API_KEY = '' 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'
Vagrantfileの編集
Ansible実行した時は、以下を追加しています。
config.vm.provision "ansible" do |ansible| ansible.verbose = "v" ansible.playbook = "../idcf_ansible_playbook/main.yml" end
もろもろ設定
# 環境に合わせて権限を変更してください sudo chown snickerjp:snickerjp -R /opt/vagrant-idcf cd /opt/vagrant-idcf # 環境に合わせて変更してください sudo vi .env sudo vi Vagrantfile
HAProxyのセットアップ
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だけでは簡単に出来なかった、ポートフォワード設定の削除やファイアーウォールの設定削除も「仮想マシンを消すとき」に同時に消してくれます。