OTOBANK Engineering Blog

オトバンクはコンテンツが大好きなエンジニアを募集しています!

話題の IDCF クラウドで Debian サーバーを一瞬で起動したい

さて、ごあいさつだけではアレなので、引き続き @riaf がお送りします。

IDCF クラウド登場

先日、大リニューアルが行われた IDCF クラウド というサービスがあります。 仮想マシンの起動が劇的に高速化されたり、料金がすごく下がったりなど、とてもパワフルなアップデートで話題になっていたので当然のようにアカウントを取得していろいろ遊んでいます。

仮想マシンを作成するときに選択できるテンプレートには CentOS、Ubuntu Server、RHEL、Windows Server があるんですが、僕はずっと Debian を使ってきているので Debian が選びたいんです。しかし現状用意されている Debian を使おうとすると、iso を選んで仮想マシンが起動したあとにインストールを行わなければいけないので、いくらマシンの起動が早くても悔しい思いをするわけです。さくらの VPS のセットアップを思い出しながら。

無いなら作ればいいじゃない、ということで、IDCF クラウドには My Template というメニューがあり、独自に作成した Template を元に仮想マシンを起動できる機能がありますので、そこに Debian のテンプレートを登録したらいい、というわけですね。わかりました。やりましょう。

テンプレートを作成する

まずお手元に用意していただくのは Packer、VMware、VMware OVF Tools の 3 点セットでございます。僕は OSX で作業をしたので、OSX を前提に進めますが、たぶん違う OS を使っていても似たような構成で動くはずです。

用意した環境は以下の通りです。

  • Packer v0.7.1
  • VMWare Fusion 7.0.0
  • VMWare OVF Tool 3.5
  • (OSX 10.10 Yosemite)

OSX で Packer を使うには Homebrew を使うと楽チンです。

$ brew tap homebrew/binary
$ brew install packer

Packer Template ファイルを作る

まずは packer のテンプレートファイルを作成します。ファイル名は debian-7-wheezy.json としました。

{
  "builders": [
    {
      "boot_command": [
        "<esc><wait>",
        "/install.amd/vmlinuz<wait>",
        " auto=true<wait>",
        " netcfg/get_domain={{ .Name }}.example.com<wait>",
        " netcfg/get_hostname={{ .Name }}<wait>",
        " preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg<wait>",
        " vga=788<wait>",
        " initrd=/install.amd/initrd.gz<wait>",
        " -- quiet<wait>",
        "<enter><wait>"
      ],
      "disk_size": 15360,
      "guest_os_type": "Debian7-64",
      "headless": true,
      "http_directory": "http",
      "iso_checksum": "8a3c2ad7fd7a9c4c7e9bcb5cae38c135",
      "iso_checksum_type": "md5",
      "iso_urls": [
        "http://ftp.jaist.ac.jp/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-netinst.iso",
        "http://cdimage.debian.org/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-netinst.iso"
      ],
      "shutdown_command": "echo 'passw0rd' | sudo -S shutdown -h now",
      "ssh_password": "passw0rd",
      "ssh_port": 22,
      "ssh_username": "otobank",
      "ssh_wait_timeout": "7200s",
      "type": "vmware-iso"
    }
  ],
  "post-processors": [{
    "type": "ovftool",
    "only": ["vmware-iso"],
    "format": "ova"
  }]
}

Preseed ファイル

そして、自動インストールを行うため Debian の Preseed ファイル を元に、 http/preseed.cfg に配置しました。 ユーザー名の設定、タイムゾーンの設定などをカスタマイズしています。

OVA ファイルを出力する設定

IDCF クラウドでは VMware の OVA ファイルを用意する必要があるので、OVA ファイルに変換する packer-post-processor-ovftool をインストールします。

$ go get github.com/iancmcc/packer-post-processor-ovftool
$ go install github.com/iancmcc/packer-post-processor-ovftool

~/.packerconfig

{
  "post-processors": {
    "ovftool": "packer-post-processor-ovftool"
  }
}

以上で OVA 変換ができるようになります。 先ほどの debian-7-wheezy.json の最後のほうにある

  "post-processors": [{
    "type": "ovftool",
    "only": ["vmware-iso"],
    "format": "ova"
  }]

のあたりがこいつを使う設定になります。

Packer Build

本来なら、もう少し Debian のカスタマイズなど行ったテンプレートを用意したいところですが、とりあえずは Debian マシンが起動するところを確かめたいのでほぼ素の状態のマシンで今回は build してしまうことにしました。 このあたりは今後 Ansible なんかを使ってカッコよく構築したいところです。

ビルドの前に念のため validate をしてから、

packer validate debian-7-wheezy.json

build します

packer build debian-7-wheezy.json

うまくいくと packer_vmware-iso_vmware.ova というファイルが出力されます。それなりに時間がかかりますので気長に待ちましょう。

仮想マシン起動

まずは IDCF クラウドのテンプレートに登録します。先ほどの ova ファイルが IDCF のサーバーから見えるところ (HTTP アクセスできる場所) に配置されている必要があります。Dropbox なんかを使うのが楽チンかもしれません。

テンプレートの設定はほぼデフォルトのままにしました。必要項目を入力してフォーム送信すると、テンプレートの作成が始まります。数十秒程度で終わります。ほぼ ova ファイルのダウンロード時間のようです。

ここまでやるとあとは仮想マシンを作成するだけです。イメージ設定のところで My Template を開くと先ほど登録したテンプレートが選択できるようになっているので、あとはその他の設定をして作成するだけです。

これで Debian のマシンも他のディストリビューションと同じく数十秒で立ち上がる環境ができました。めでたい!!

ここまでの設定ファイルなどをまとめて GitHub に置いておきました。若干、社内向けの設定が含まれているのでそのまま使うのには適さないかもしれませんが、参考までに :p

おまけ

  • Packer で build 中に止まるけど、何が原因なのかわからないとき
    • PACKER_LOG=1 packer build すると、詳細なログが出力されます。
    • headless: false と設定しておくと、VMWare のウィンドウが起動して画面出力を確認できます。