##概要
CentOS6.5上に、Vagrant と Vagrant Softlayer Plug-in の導入方法を検証します。
加えて、Vagrantfile を作成し、実際に Vagrant から SoftLayer の仮想サーバ(Public Cloud Instances)を Provisioning する方法を検証します。
Vagrantは、様々な仮想環境をCUIから簡単に構築・管理するツールです。
Vagrantを使うことによって、数行程度のコマンドで様々な仮想環境を作ることができます。
仮想環境は、VirtualBox/VMWare/KVMなどの仮想化ソフトから、AWS/Softlayer/AzureなどIaaSまで対応しています。
ソフトレイヤー社は2005年にアメリカ合衆国テキサス州ダラスで創業。SaaS、PaaSの基盤となるIaaSを仮想共有型、物理専有型などで提供し、クラウドコンピューティングの全域で事業を展開。 2013年7月8日にIBMが買収完了を発表。引用:Wikipedia
##前提
Softlayer上に仮想サーバ(Public Cloud Instances)をProvisioningする関係上、Softlayer周りの手続が済んでいることが前提です。
- SoftLayer に Account を持っていること
- SoftLayer の APIKey を取得していること
- SoftLayer に RSA公開鍵 を登録していること
- SoftLayer に SSL-VPN で接続できること
APIKey の取得は Customer Portal から可能です。
[Account]Tab → [Users] → [APIKey]
RSA公開鍵 の登録、SSL-VPN接続 は下記を参考にしてください。
ソフトレイヤー探検隊:第10回 プロビジョニング・スクリプトとSSH鍵でのログイン
##仮想サーバ注文
まず、Vagrant を導入する仮想サーバ(Public Cloud Instances、以下Vagrantサーバ)を注文します。手元にある Linux マシンに Vagrant を導入するのでも構いませんが、手っ取り早く、ここでも SoftLayer上の仮想サーバ を利用します。
VagrantサーバのSpec は 最低限の下記でOKです。
- CPU:1 core
- Memory:1 GB
- OS:CentOS 6.x - Minimal Install (64 bit)
- DataCenter: どこでも
- ProvisioningScript: ProvisioningScript for CentOS
- SSLKey: 登録済のKeyを指定
ProvisioningScript で git や openssl の 導入をしています。また、Password 認証禁止のおまじないもかけているので、SSLKeyも指定してあげてください。
ProvisioningScript と SSLKey の詳細は下記を参考にしてください。
ソフトレイヤー探検隊:第10回 プロビジョニング・スクリプトとSSH鍵でのログイン
##環境セットアップ
注文した Vagrantサーバ に root で Login できたら いよいよ Vagrant 環境のセットアップです。
###ruby 環境整備
Vagrant の導入・稼働には ruby が必要なので環境を整備します。
####rbenv/ruby-build 導入
ruby の導入には rbenv/ruby-build が便利です。
github から導入します。
cd /opt
git clone git://github.com/sstephenson/rbenv.git
git clone git://github.com/sstephenson/ruby-build.git
####rbenv/ruby-build 設定
ruby-build のセットアップと 環境変数を定義します。
cd ruby-build
sudo ./install.sh
echo 'export RBENV_ROOT="/opt/rbenv"' >> /etc/profile
echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile
echo 'eval "$(rbenv init -)"' >> /etc/profile
source /etc/profile
rbenv を実行し、バージョンを確認してみます。
# rbenv
rbenv 0.4.0-98-g13a474c
####ruby 導入
執筆時点(2014.09.17)での Stable Version である 2.1.2 を導入します。
rbenv install 2.1.2
rbenv global 2.1.2
ruby 2.1.2 が使えるようになりました。
# rbenv version
2.1.2 (set by /opt/rbenv/version)
# ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
####bundler 導入
ruby 入れたので、bundler も入れます。
入れたら、確認。
gem install bundler
rbenv rehash
# gem list bundler
bundler (1.7.3)
###Vagrant 導入
執筆時点(2014.09.17)で最新の Vagrant を導入します。
最新版の確認先は こちら です。
sudo rpm -Uvh https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.5_x86_64.rpm
確認します。
# vagrant version
Installed Version: 1.6.5
Latest Version: 1.6.5
###SoftLayer plug-in 導入
softlayer plug-in は vagrant コマンドから簡単に導入可能です。NOKOGIRI~
のおまじないは試行錯誤の結果なので、忘れずに記述してください。
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-softlayer
確認。
# vagrant plugin list
vagrant-login (1.0.1, system)
vagrant-share (1.1.1, system)
vagrant-softlayer (0.3.3)
###Vagrant 設定
Vagrant の SoftLayer plug-in まで導入が済んだので、設定を進めます。
####環境変数定義
Vagrantfile に 直接 APIKey を記述するのが気持ち悪いので(好みですが…)、環境変数に定義します。当然、それぞれの環境の Username と API Key に読み替えてください
echo 'SL_USERNAME=SL??????' >> /etc/profile
echo 'SL_API_KEY="1234567890abcdefghijk"' >> /etc/profile
source /etc/profile
####Vagrantfile 初期化
適当なディレクトリに移動し、Default の Vagrantfile を作成します。
mkdir /vagrant
cd /vagrant
vagrant init
# vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
####Vagrantfile 設定
Vagrant で SoftLayerの仮想サーバを Provisiong するために、Vagrantfile を下記に置き換えます。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "dummy"
config.vm.box_url = "https://github.com/audiolize/vagrant-softlayer/raw/master/dummy.box"
config.vm.synced_folder ".", "/vagrant", type: "rsync", disabled: true
config.ssh.private_key_path = "/root/.ssh/id_rsa"
config.ssh.username = "root"
config.vm.provider :softlayer do | sl, override |
sl.api_key = ENV['SL_API_KEY']
sl.username = ENV['SL_USERNAME']
sl.datacenter = "hkg02"
sl.dedicated = false
sl.hourly_billing = true
sl.hostname = "vagrant01"
sl.domain = "domain.jp"
sl.start_cpus = 1
sl.max_memory = 1024
sl.local_disk = true
sl.disk_capacity = { 0 => 25 }
sl.network_speed = 10
sl.operating_system = "CENTOS_6_64"
sl.ssh_key = [ "APIKEY" ]
override.ssh.username = "root"
end
end
各設定値の詳細は下記を参考にしてください。
VagrantでSoftLayerを操作する
-
sl.api_key
sl.username
は先ほど定義した環境変数を指定します -
sl.ssh_key
は CustmerPortal に登録した SSL公開鍵 を指定します -
config.ssh.private_key_path
はsl.ssh_key
と対になる 秘密鍵を指定します -
config.vm.synced_folder
は無効化しています。課題で触れる『【補足】Synced Foldersのエラー対応』の為です
##Provisioning
いよいよ、Vagrant で 仮想サーバ を注文してみます。
先ほど設定したVagrantfileと同じディレクトリ上でコマンドを実行します。
vagrant up
成功しました。
# vagrant up
Bringing machine 'vagrant01' up with 'softlayer' provider...
==> vagrant01: Creating a new SoftLayer instance...
==> vagrant01: Waiting for instance provisioning. This may take a few minutes...
==> vagrant01: SoftLayer instance successfully provisioned!
==> vagrant01: Waiting for machine to boot. This may take a few minutes...
vagrant01: SSH address: 119.81.167.234:22
vagrant01: SSH username: root
vagrant01: SSH auth method: private key
==> vagrant01: Machine booted and ready!
# vagrant status
Current machine states:
vagrant01 running (softlayer)
###Customer Portal での確認
Customer Portal でも 新しい仮想サーバが確認できます。
###仮想サーバに ssh してみる
sshログインも vagrant 経由でできます。
vagrant ssh
# vagrant ssh
[root@vagrant01 ~]# uname -a
Linux vagrant01.domain.jp 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@vagrant01 ~]# exit
#
###仮想サーバの廃棄
放っておくと、どんどんお金がかかってしまうので作った仮想サーバを破棄します。
破棄も vagrant から実行します。
作るのも 1 command なら、棄てるのも 1 command です。
vagrant destroy
# vagrant destroy
vagrant01: Are you sure you want to destroy the 'vagrant01' VM? [y/N] y
==> vagrant01: Destroying the SoftLayer instance...
# vagrant status
Current machine states:
vagrant01 not created (softlayer)
※失敗したことはないですが、一応 CustomerPortal からも仮想サーバが表示されないことを確認することをお勧めします。
##結果
- CentOS6.5 上に SoftLayer を操作できる Vagrant 環境を整備できました
- 実際に、Vagrant から SoftLayer に仮想サーバの Provisioning ができました
Vagrant から SoftLayer を操れるようになると、Chef との組み合わせも容易になりますし、Jenkins との連携もやりやすくなります。Let's インフラCI!!
##課題
- Vagrant が 仮想サーバの PublicIPに対して ssh しようとするので、PrivateIPに対してするような設定の組み込み
- Synced Foldersのエラー対応検討(参考:【補足】Synced Foldersのエラー対応)
##参考
下記サイトを参考にさせて頂きました。ありがとうございました。
##関連