2015年12月9日水曜日

IDCFクラウドでVagrantとAnsibleを使ってHAProxyを立ててみる! #idcfrontier


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
これで、HAProxyサーバーができます!

まとめ

これで、VagrantとAnsibleを使ったHAProxyサーバーの作成が可能になります!
業務では、このように構成管理をして後に手順書代わりとして、AnsibleのPlaybookを残しています。

「この設定、どうしてこうなった?」は、AnsibleのPlaybookをgitで管理しているので。
gitからPlaybook見ると明らかなので、設定の見通しが良くなりました。

Vagrantで立てたのは、「仮想サーバーを作ったり・壊したりがとっても楽だからです!
Ansibleだけでは簡単に出来なかった、ポートフォワード設定の削除やファイアーウォールの設定削除も「仮想マシンを消すとき」に同時に消してくれます。

Zenback