LoginSignup
12
12

More than 5 years have passed since last update.

Vagrant から SoftLayer の仮想サーバを Provisioning する

Last updated at Posted at 2014-09-18

概要

CentOS6.5上に、Vagrant と Vagrant Softlayer Plug-in の導入方法を検証します。
加えて、Vagrantfile を作成し、実際に Vagrant から SoftLayer の仮想サーバ(Public Cloud Instances)を Provisioning する方法を検証します。

Vagrantとは…

vagrant.png

Vagrantは、様々な仮想環境をCUIから簡単に構築・管理するツールです。
Vagrantを使うことによって、数行程度のコマンドで様々な仮想環境を作ることができます。
仮想環境は、VirtualBox/VMWare/KVMなどの仮想化ソフトから、AWS/Softlayer/AzureなどIaaSまで対応しています。

Softlayerとは…

softlayer.jpg

ソフトレイヤー社は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
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_pathsl.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 でも 新しい仮想サーバが確認できます。

vagrant_single.png

仮想サーバに 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のエラー対応)

参考

下記サイトを参考にさせて頂きました。ありがとうございました。

関連

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12