ども!なのまるです!
「IDCF Cloud Advent Calendar 2015 - Qiita」の一日目です!
軽いネタにしようと思ったんですが、やっているうちに結構重たくなってきました~
Ansibleを使って、
- 仮想マシンの立ち上げ
- HAProxyのインストール
- SSLオフロード
もくじ
前提条件
- IDCFクラウドアカウント作成済み
- IDCFクラウドのAPIキー取得済み
- 実行クライアントは Ubuntu 14.04
- 立ち上げるサーバーも Ubuntu 14.04
- Python 2.7(3はAnsible未対応のため)
- Ansible
- cs(Pythonのcs)
- cloudmonkey
- HAProxy v1.5
構築手順
いろいろ説明があった方がいいと思うのですが、先に構築手順を書いておきます!後ろの方に、各説明を入れておきます!
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
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', '~snickerjp/.ssh/id_rsa.pub') }}" state=present
Ansible実行
ansible-playbook main.yml -i hosts -c local --ask-sudo-pass
これで、環境構築が終わるはずです~!
Ansibleを使わないでやる方法
Ansibleを使わないと、そこそこ面倒ですwsudo 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
Ansibleを使って、IDCFクラウドの仮想マシン(Ubuntu)を立ち上げる
先ほどの処理で、AnsibleのPlaybookをgithubから持ってきています。権限を自分の環境に合ったものに変更してください!
sudo chown snickerjp:snickerjp -R /opt/idcf_ansible_playbook cd /opt/idcf_ansible_playbook sh init.sh # これで、templateが展開されますsnickerjp/idcf_ansible_playbook
snickerjp/idcf_ansible_playbook
IDCFクラウドのAPI設定をする
cloudstack.iniを編集[cloudstack] # IDCF WEST endpoint #endpoint = idcf_end_point # IDCF EAST endpoint endpoint = idcf_end_point key = API Key secret = Secret Key
仮想マシンを立ち上げるPlaybookを編集
- ゾーン: tesla
- イメージ: Ubuntu Server 14.04 LTS 64-bit
infra.ymlを編集
vars: vm_name: haproxy-vm-1 firewall_ip: [idcf public ip] key_name: [idcf collect pubkey] #zone_name: augusta zone_name: tesla
以下の部分を環境に合わせて、書き換えてください。
- template:(イメージID)
- service_offering:(マシンタイプ)
- name: 仮想マシンを作成する local_action: module: cs_instance name: "{{ vm_name }}" hypervisor: VMware #template: c1387e4f-4a72-4d8b-ba6b-5276361aaa6b #west # EAST [Ubuntu Server 14.04 LTS 64-bit] template: 90fec2e6-4fdf-4df6-bdad-c3eb5d57a6f6 service_offering: light.S1 ssh_key: "{{ key_name }}" zone: "{{ zone_name }}"
Ansibleを実行して仮想マシンが立ち上がるのを確認
ansible-playbook infra.yml -i hosts -c localこんな感じで、エラーがなければ大丈夫!
PLAY [localhost] ************************************************************** GATHERING FACTS *************************************************************** ok: [localhost] TASK: [sshのキーをクラウドに送信する] **************************** ok: [localhost -> 127.0.0.1] TASK: [仮想マシンを作成する] **************************************** changed: [localhost -> 127.0.0.1] TASK: [httpを通過させるようファイヤーウォールの設定を修正] *** changed: [localhost -> 127.0.0.1] TASK: [sshを通過させるようファイヤーウォールの設定を修正] *** changed: [localhost -> 127.0.0.1] TASK: [ポートフォワーディング80-> haproxy-vm-1:80] ***************** changed: [localhost -> 127.0.0.1] TASK: [ポートフォワーディング22-> haproxy-vm-1:22] ***************** changed: [localhost -> 127.0.0.1] PLAY RECAP ******************************************************************** localhost : ok=7 changed=5 unreachable=0 failed=0立ち上がりました!
2回目の実行だとこんな感じ・・・
何も起こりませーん(冪等性が担保されていました!)
PLAY [localhost] ************************************************************** GATHERING FACTS *************************************************************** ok: [localhost] TASK: [sshのキーをクラウドに送信する] **************************** ok: [localhost -> 127.0.0.1] TASK: [仮想マシンを作成する] **************************************** ok: [localhost -> 127.0.0.1] TASK: [httpを通過させるようファイヤーウォールの設定を修正] *** ok: [localhost -> 127.0.0.1] TASK: [sshを通過させるようファイヤーウォールの設定を修正] *** ok: [localhost -> 127.0.0.1] TASK: [ポートフォワーディング80-> haproxy-vm-1:80] ***************** ok: [localhost -> 127.0.0.1] TASK: [ポートフォワーディング22-> haproxy-vm-1:22] ***************** ok: [localhost -> 127.0.0.1] PLAY RECAP ******************************************************************** localhost : ok=7 changed=0 unreachable=0 failed=0
補足: イメージIDの取得方法
イメージIDはIDCFのクラウドポータルからはわかりません!cloudstackのAPIを使うツール「cloudmokey」を使います!
cloudmonkey > (プロンプトになる) > set url 「idcf_end_point」を入れる > set apikey 「API Key」を入れる > set secretkey 「Secret Key」を入れる # 動作確認 > sync 500 APIs discovered and cached
- イメージのID取得例
cloudmonkey list templates templatefilter=all filter=id,name |grep -1 Ubuntuこんな感じで出てきました!
~ 略 ~ id = 782a845c-24bc-4538-a4c9-4821290200b3 name = Ubuntu-1GB-2 ================================================================================ -- id = f3fbd637-8e42-4506-a114-e3f1e3a00924 name = Ubuntu Server 10.04 LTS 64-bit ================================================================================ -- id = 90fec2e6-4fdf-4df6-bdad-c3eb5d57a6f6 name = Ubuntu Server 14.04 LTS 64-bit ================================================================================
HAProxy を入れて SSLオフロードを設定する
hosts を書き換える
ここをさっきの[idcf public ip]と同じにしてください[haproxy-vm] XXX.XXX.XXX.XXX
HAProxyの設定
idcf_ansible_playbook/roles/ansible-haproxy-ssl/の- defaults/main.yml
- vars/main.yml
- (必要あれば)templates/haproxy.cfg.j2
defaults/main.yml
は、以下の部分を直せばいいかなー
- haproxy_backend_httpchk
- haproxy_backend_servers
# Backend settings. haproxy_backend_name: 'habackend' haproxy_backend_mode: 'http' haproxy_backend_balance_method: 'roundrobin' haproxy_backend_httpchk: 'HEAD / HTTP/1.1\r\nHost:localhost' # List of backend servers. #haproxy_backend_servers: [] haproxy_backend_servers: - name: web01 address: 10.3.0.170:80 - name: web02 address: 10.3.0.150:80
サーバー証明書の準備
HAProxyでは、「秘密鍵と証明書をまとめた、一つのファイル」を使います!cat server.key server.crt >> roles/ansible-haproxy-ssl/files/hogehoge.pem
vars/main.yml
は、(ファイル名を変えた場合)以下の部分編集
- haproxy_pem
--- # vars file for ansible-haproxy-ssl haproxy_pem: hogehoge.pem
Ansible で HAProxy 構築
以下のコマンドを実行!ansible-playbook main.yml -i hosts -c ssh --ask-sudo-pass--ask-sudo-passはsudoするときパスワードが必要な場合
以上で、完了です!
まとめ
どうでしょうか!?CloudStackベースのIDCFでAPIを使って「仮想マシンの立ち上げ」
Ansibleで「HAProxy SSLオフローダー」構築簡単にできることを確認してもらえたかと思いますー
長くなっちゃってすみませんでしたー!m(__)m
2日目よろしくですー!
各コンポーネントの説明
Ansibleについて
AnsibleはPythonとSSHさえ使えれば動く『構成管理ツール』です!最近は国内でも、利用事例が多くなってきている注目のツールです!
Ansible is Simple IT Automation
Ansible is Simple IT Automation
これからやってみようという方は、こちらの入門書がお勧めです!
HAProxyについて
HAProxy はオープンソースとして開発されているLVS 負荷分散ソフトウェアです!1.5から、『SSL』に対応しました!
HAProxy - The Reliable, High Performance TCP/HTTP Load Balancer
IDCFクラウドについて
IDCFクラウドは言わずと知れた、国内クラウド一つです!Cloudstackをベースにしているため、CloudstackのAPIを使うことができます!(全てではないですが。)
クラウドサービスならIDCFクラウド -使いやすく、パワフル
IDCFクラウド -使いやすく、よりパワフルに|IDCフロンティア