はじめに

クラウド基盤チームの常田です。

SoftLayerはSSL-VPNが標準で使えるなど開発環境としての魅力もあるサービスです。
今回は、皆さんの大好きなVagrantからSoftLayerを使ってみたいと思います。いつの間にかSoftLayerを操作するためのVagrantのプラグインが用意されていました。

Install手順

SoftLayerのプラグインは標準レポジトリに登録されているのでそのまま vagrant 経由でInstall可能です。

$ vagrant plugin install vagrant-softlayer
Installing the 'vagrant-softlayer' plugin. This can take a few minutes...
Installed the plugin 'vagrant-softlayer (0.3.1)'!

Vagrantfileの書き方

READMEには完全なVagrantfileが載っていませんでしたのでサンプルを載せておきたいと思います。

  • SSHキーは登録名を指定しますので事前にポータル画面またはコマンドラインから登録が必要です。
  • ダミーのBoxが必要なので box_urlの指定のようにしておきます。
  • 指定したSSHキーを ssh_private_key_path で指定します。
  • Syncdフォルたが rsync 経由で使えるのは便利です。
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
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"
    config.ssh.private_key_path = "/Users/tokida/.ssh/sl_rsa"
    config.ssh.username = "root"

    config.vm.provider :softlayer do | sl, override |
            sl.api_key = "*****"
            sl.username = "SL****"
            sl.datacenter   = "ams01"
            sl.dedicated    = false
            sl.domain       = "niandc.co.jp"
            sl.disk_capacity = { 0 => 25 }
            sl.hostname     = "vagrant01"
            sl.hourly_billing = true
            sl.image_guid   = nil
            sl.local_disk   = true
            sl.max_memory   = 1024
            sl.network_speed = 10
            sl.operating_system = "UBUNTU_LATEST"
            sl.ssh_key = ["tokida"]
            sl.start_cpus   = 1

            override.ssh.username = "root"
    end

end

ここでは上記の記載にとどまっていますが更にオプションを選択することも可能です。

パラメータ 説明 ディフォルト 必須
datacenter DC指定 First available no
dedicated CCI専有 (non-shared host) false no
disk_capacity ディスク容量 no
domain ドメイン名 yes
hostname ホスト名 yes
hourly_billing 時間単価 (falseは月単価) true no
image_guid Flexイメージの指定 no
local_disk ディスクタイプ(falseはSAN) true no
max_memory メモリ容量 (Mb) 1024 no
network_speed ネットワーク速度(Mbps) / 10,100,1000 10 no
operating_system 導入OSの指定 UBUNTU_LATEST no
post_install 起動スクリプトの指定 no
private_only プライベートネットワークのみ false no
ssh_key SSHキー名 yes
start_cpus CPU-Core数 / 1,2,4,8,12,16 1 no
user_data metadataの設定 no
vlan_private Private VLAN番号 自動 no
vlan_public Public VLAN番号 自動 no
  • READMEより転記

これらのオプションで指定できる項目は sl vs create-optionsコマンドで確認することが出来ます。

起動方法

Providerに softlayerを指定して起動します。正しく指定ができれば起動してきます。
通常Vagrantではユーザ「vagrant」で接続をしますが、override.ssh.usernameを指定することによりユーザ「root」で接続する事ができますので普段のSoftLayer同様の操作が可能になります。

$ vagrant up --provider=softlayer
Bringing machine 'default' up with 'softlayer' provider...
==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead.
==> default: This is a bug with the provider. Please contact the creator
==> default: of the provider you use to fix this.
==> default: Creating a new SoftLayer instance...
==> default: Waiting for instance provisioning. This may take a few minutes...
==> default: SoftLayer instance successfully provisioned!
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 5.153.2.111:22
    default: SSH username: root
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Rsyncing folder: /Users/tokida/repos/softlayer/ => /vagrant

5分程度待つと上記のメッセージが出力されPortal側でCCIが起動できていることを確認できます。

使ってみる

$ vagrant ssh

パブリック側のネットワークからsshをしてログインが出来きます。

$ vagrant reload

Reloadではインスタンスが再起動されます。こちらも問題なく動作しているようです。

$ vagrant rebuild

SoftLayerでは、インスタンスを破棄することなくOSを初期化することが出来る OS Relaodという機能がありますがRebuildを指定するとこの機能が利用できるようです。

$ vagrant halt

停止されている事を確認できます。
もっともSoftLayerは停止しても費用には関係がないため、haltコマンドを実行するシチュエーションは無いかもしれません。

$vagrant destroy 

で環境が削除(破棄)されます。

まとめ

VagrantからSoftLayerが操作できると言うことは、プロビジョニング時にChefやAnsibleと組み合わせやすくなるため簡単にそして柔軟にサーバの構築が出来そうです。

また Sync_folder も動作しているため /vagrant で確認することが出来るのは開発環境として便利かと思います。