どうもマコピーです。ちなみにVULTR布教活動しておりますが、わたくしには一銭も入ってきません。
さて、久しぶりにVULTR見に行ったらスナップショットとスタートアップスクリプトなる項目が追加されていて、スナップショットはその名の通り動いているインスタンスのイメージを保存して再利用するやつですが、スタートアップスクリプトとはみたいなことを思っていたらVULTRの弱点を補う機能だったので紹介させていただきます。
startup scriptとは
My Servesの「My Startup Scripts」から行けるんですけれど、リンクはこちら。
そこにはこう書かれていて
Startup scripts are run by the VPS the very first time it starts up. - The startup script is saved to /tmp/firstboot.exec - Output produced can be found in /tmp/firstboot.log - Scripts are executed using /bin/bash (Linux), /bin/sh (FreeBSD), or cmd.exe (Windows)
初回起動のときに一度だけ実行するスクリプトを登録できるよということですね。Windowsの場合も使えるっぽくて便利。
なおスクリプトやログは/tmpに入るのでディスクの構成によっては再起動すると消えてしまう場合があるので注意です。Ubuntu 14.04のイメージだと2度目には無くなってしまいます。
使い方
Startup Scriptsのページを開いていただいて、Add Startup Scriptsを押していただくと以下の様なページになります。
Nameのところに適当な名前を入れて、Scriptのところにはシェルスクリプトを実行するだけの簡単な画面です。
例としてはじめから公開鍵をrootのauthorized_keysに埋め込むスクリプトが書かれています。
echo のあとの部分を少し変えて自分の公開鍵を入れるとそれだけで使えるスクリプトになります。
VULTRは使われている方はご存知かもしれませんが、公式イメージを立ち上げるとランダムでパスワードが設定されてそれでログインしろという仕組みなのですが、sshのパスワードログインはsshコマンドの引数で設定できないので自動化する上ではかなり難儀です。
そこでこのスクリプトを使って鍵を埋め込むことが出来るわけですね。
起動する
deployの画面からプランなどを選択して一番最後のStartup Scriptで選んで起動するだけです。
これはこれで便利なのですが、先ほど拙作のgo-vultrを更新しまして、そこからも使えるようにしました。
まずスクリプトを登録した後に、以下の様なコマンドを使って確認します。
$ vultr startupscript 2014/06/29 19:08:44 endpoint: https://api.vultr.com/ 2014/06/29 19:08:45 200 OK { "169": { "SCRIPTID": "169", "date_created": "2014-06-29 04:20:58", "date_modified": "2014-06-29 04:20:58", "name": "public key", "script": "#!\/bin\/sh\nmkdir -p \/root\/.ssh\nchmod 700 \/root\/.ssh\necho \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGnDdHjsZ6oQLcKrzZ2c2UVkzGMpZ6zEa+GYZzASL\/v3A8pX5i7VJ8Hz0OF6j60C4SYNXeqPbWb+c1ajs7201tylabncosbumd47IoNTtnQZUPSaTue6OiSQF1eIWzjW89Rs+C7kzNadPlSVBRQP0JcMno7VRJDFCwMRg1uwROD+9agK+r0xsTG6JClSaBY\/lICUzRy6UFsgO2loiaknmQ1qAMrGFrGn6k4LljRn5fEoUKd9BXuf3ST10akN0nYQ9iimtIrdu+9Se3YCts3cknK9zTFzx8I1yadWArCcloTRtmhvfYgWtWCgU6yfqKvV7LYEoF55F5uy8AeukdMyzh\" > \/root\/.ssh\/authorized_keys\nchmod 600 \/root\/.ssh\/authorized_keys" } }
で、この169っていうのをメモっておいて、インスタンスをつくるときに使います。
以下のようにscriptidで番号を渡してやるとそれを使って起動します。
$ vultr create --osid 160 --dcid 25 --vpsplanid 31 --scriptid 169
あとはvultr listでIPアドレスを引っ張ってきて鍵を使ってログインするだけ。だいぶ簡単ですね。
なお、sshのパスワードログインは無効化されていないのでそれが嫌だという方は手動でオフにするなり、スタートアップスクリプト内で無効化するなりすれば良いと思います。
他の応用例
やってないですけれど以下の様な応用ができると思います。
- 一般ユーザを使っておいてrootはログインできないようにする
- よく使うパッケージのインストール(vimとかgitとか)
- Dockerを入れて母艦にする
- ……以上のようなことをやるansibleやchefのレシピの実行
たぶん使い捨てサーバの場合が多いと思うのでconfigspecを使ってもいいと思いますね。
そんなわけで試してみたらVULTRでライフチェンジングな機能だったので紹介してみました。