Digital Oceanでコマンド操作

タグ: DigitalOcean  

使い捨て環境としても、人気急上昇のDigital Oceanです。最近、シンガポールにもリージョンができたので、本格利用しましょう。

シンガポールは大抵の場合、日本国内に毛が生えた(かなりの剛毛ですが :D )程度の速度でアクセスできます。時々、アメリカ経由になり、やたらかかることがあります。Digital Orcean(以降DO)はフルSSDですから、早いですよ。ちょっとした実験や、リソースを食うようなビルドなどで、時間を区切り利用できます。

なんだか、誰が先に知っていたかが自慢になるらしいので、参加しようかな。スタートアップ後、評判を呼んで、あちこちでツイートされ、記事にも出始めた頃、既にチェックしていました。(えへん。)けど、「ニューヨークかよ!」と距離を理由に、使いませんでした。(ここが、いまいち自慢しきれないとこです。しゅん)

使い方は、他のサイトで紹介されているので、ちょっと変わったところを攻めます。コマンドラインツールが有志(DO内部の人ではないですよ)により、開発されています。それを使っていこうというお話です。一応、DOのサイトでも紹介されていますので、安全だと思われます。ただ、心配な方は、APIをcURLなどで直接叩いても良いかと思います。

お金の話

時間売りをしているところは、大抵そうですが、ドロップレット(AWSではインスタンス)の課金は一時間単位です。一時間に満たない時間は、切り上げで課金されます。

もうひとつ、1セント(=0.01ドル)に満たない課金は、四捨五入されます。例えば、一番小さなドロップレットを一時間以内使った場合、0.007ドルなので、課金は0.01ドルです。二時間だと0.014ドルで、これも0.01ドルです。3時間以内連続で使えば、0.021ドルなので、課金は0.02ドルです。世の中の奥さんは、一円単位で安いものを追い求めています。旦那さんも協力してあげてください。独身の人は、気にしなくてよろしい。

ドロップレット単位の課金は、月額を超えないという話ですが、実際にそれを確かめた人は少ないと思われます。作って、壊してを繰り返すタイプの利用だと、同じ大きさのドロップレットの利用時間が一月分を超えるというのは、あまり無いでしょうからね。そうでなければ、実働として、連続して使用するわけですしね。複数ドロップレットを利用する人であれば、そうした状況になることもあるでしょう。

AWSと比べれば、一番大きな違いは、ドロップレットを停止(電源OFF状態)にしていても、利用時間は止まりません。破壊しない限り、課金の対象になります。

それじゃ、毎回セットアップが必要で大変じゃないかと思いますが、もちろんスナップショットやバックアップを取っておくことができます。

バックアップとは、料金10%(だったかな?)上乗せする変わりに、定期的に自動で保存する仕組みです。(多分、ドロップレットは止まらないとは思いますが、使ったことが無いため、分かりません。)

スナップショットは、ある時点のディスクイメージをそのまま保存することです。一度、ドロップレットを電源OFF状態にし、内容を圧縮後、保存します。本来は、ギガ単位・月単位(作成時から一ヶ月ごと)で課金されます。しかし、現在のところ、まだ課金されていません。だからと言って、不要なものまでたくさん取ると、課金が始まった時に大変なことになるので、常識の範囲にしましょう。(それと、こうした不届き者がいると、課金が始まるタイミングが早くなるでしょうからね。)

このスナップショットを利用することで、取っておいたディスク環境を再利用できます。

ああ、それとアフェリエイトは、紹介した利用者が、最初の10ドルを利用した時点で、10ドルまるまる支払われるそうです。流行に乗って、このリンクをクリックしてもらうと、私がハッピーに…おっっと。リンク作ってなかった。この記事の最後までには、作っておきます。良ければ、押してください。

インストール

gemで一発です。gemの環境がない人は、準備が必要です。(ネット上に、情報はごろごろしています。)

gem install tugboat

インストールが終わったら、認証を設定します。設定コマンドが用意され、それに答えていく形式です。

tugboat authorize

以下のように進みます。

$ tugboat authorize
Note: You can get this information from digitalocean.com/api_access <= ここにアクセスして、クライアントキーとAPIキーを確認

Enter your client key: クライアントキー(digitalocean.com/api_accessから入手)
Enter your API key: APIキー(digitalocean.com/api_accessから入手)
Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): SSH接続コマンドで使用する、キーファイルのパス
Enter your SSH user (optional, defaults to ローカルのユーザー名): SSH接続コマンドで使用する、SSHユーザ名(ドロップレット内で設定していなければ、rootです。安全のためには、ドロップレット側で変更しておきましょう。)
Enter your SSH port number (optional, defaults to 22): SSH接続コマンドで使用するSSHポート(変更していなければ、デフォルトの22です。安全のためには、ドロップレット側で変更しておきましょう。)

To retrieve region, image, size and key ID’s, you can use the corresponding tugboat command, such as `tugboat images`.
Defaults can be changed at any time in your ~/.tugboat configuration file. (設定内容は、~/.tugboatファイルに保存されるので、いつでも変更できる。)

Enter your default region ID (optional, defaults to 1 (New York)): リージョンIDです。(シンガポールは6です。)
Enter your default image ID (optional, defaults to 350076 (Ubuntu 13.04 x64)): 立ち上げるイメージです。(後述)
Enter your default size ID (optional, defaults to 66 (512MB)): ドロップレットのサイズです。(後述)
Enter your default ssh key ID (optional, defaults to none): パスワードでなく、SSHで接続する場合は、ブラウザーから管理ページヘログインし、SSH Keysのページから、公開キーを登録します。(このコマンドは名前でも通りますが、createコマンドでは無視されるため、tugboat keysコマンドで表示されるIDを指定しましょう。最初の時点で、このIDを知るにはDOのドロップレット作成ページのソースを見る方法がありますが、手間がかかるので空白にしておき、後ほど設定ファイルを変更する方法をおすすめします。)

Authentication with DigitalOcean was successful!(成功した場合、このメッセージが表示されます。)

リージョンID

2014/02/18時点のリージョンIDです。(1(NewYork1)と2(Amsterdam1)は、一杯で利用できません。状況は頻繁に変わります。)コマンドから確認できますが、そのためには一度認証を済ませなくてはなりませんので、貼っておきます。

$ tugboat regions

Regions:
San Francisco 1 (id: 3)
New York 2 (id: 4)
Amsterdam 2 (id: 5)
Singapore 1 (id: 6)

イメージ

イメージとはAWSのAMIにあたります。一般に広く公開されているイメージから起動されるか、それとも自分のバックアップ/スナップショットからかは、イメージIDにより決まります。

2014/02/18時点のイメージIDを貼っておきます。これも、認証設定後にコマンドから確認できます。

$ tugboat images --global

My Images:
PersonalSnapshoot (id: 9----9, distro: Ubuntu)

Global Images:
CentOS 5.8 x64 (id: 1601, distro: CentOS)
CentOS 5.8 x32 (id: 1602, distro: CentOS)
Debian 6.0 x64 (id: 12573, distro: Debian)
Debian 6.0 x32 (id: 12575, distro: Debian)
Ubuntu 10.04 x64 (id: 14097, distro: Ubuntu)
Ubuntu 10.04 x32 (id: 14098, distro: Ubuntu)
Fedora 17 x32 (id: 32387, distro: Fedora)
Fedora 17 x32 Desktop (id: 32399, distro: Fedora)
Fedora 17 x64 Desktop (id: 32419, distro: Fedora)
Fedora 17 x64 (id: 32428, distro: Fedora)
Debian 7.0 x32 (id: 303619, distro: Debian)
Debian 7.0 x64 (id: 308287, distro: Debian)
Ubuntu 13.04 x32 (id: 345791, distro: Ubuntu)
Ubuntu 13.04 x64 (id: 350076, distro: Ubuntu)
Arch Linux 2013.05 x64 (id: 350424, distro: Arch Linux)
Arch Linux 2013.05 x32 (id: 361740, distro: Arch Linux)
CentOS 6.4 x32 (id: 376568, distro: CentOS)
Ubuntu 12.10 x32 (id: 433240, distro: Ubuntu)
LAMP on Ubuntu 12.04 (id: 459444, distro: Ubuntu)
Ubuntu 12.10 x64 (id: 473123, distro: Ubuntu)
Ubuntu 12.10 x64 Desktop (id: 473136, distro: Ubuntu)
CentOS 6.4 x64 (id: 562354, distro: CentOS)
Fedora 19 x64 (id: 696598, distro: Fedora)
Fedora 19 x32 (id: 697056, distro: Fedora)
Ubuntu 13.10 x32 (id: 962304, distro: Ubuntu)
MEAN on Ubuntu 12.04.3 (id: 1420643, distro: Ubuntu)
Ubuntu 12.04.3 x64 (id: 1505447, distro: Ubuntu)
Ubuntu 12.04.3 x32 (id: 1505527, distro: Ubuntu)
Ubuntu 13.10 x64 (id: 1505699, distro: Ubuntu)
Ruby on Rails on Ubuntu 12.10 (Nginx + Unicorn) (id: 1608711, distro: Ubuntu)
CentOS 6.5 x64 (id: 1646467, distro: CentOS)
CentOS 6.5 x32 (id: 1646732, distro: CentOS)
Redmine on Ubuntu 12.04 (id: 1687372, distro: Ubuntu)
Ghost 0.4.0 on Ubuntu 12.04 (id: 1860934, distro: Ubuntu)
GitLab 6.5.1 CE (id: 2105243, distro: Ubuntu)
Dokku-v0.2.1 on Ubuntu 13.04 (id: 2118237, distro: Ubuntu)
Docker 0.8 Ubuntu 13.04 x64 (id: 2158507, distro: Ubuntu)
Wordpress on Ubuntu 13.10 (id: 2314411, distro: Ubuntu)

My Imagesには、スナップショットのIDが表示されます。(本当は整数ですが、置き換えています。)Global Imagesに、一般公開されているイメージがリストされています。

サイズ

サイズです。コマンドで出力できます。

$ tugboat size

Sizes:
512MB (id: 66)
1GB (id: 63)
2GB (id: 62)
4GB (id: 64)
8GB (id: 65)
16GB (id: 61)
32GB (id: 60)
48GB (id: 70)
64GB (id: 69)
96GB (id: 68)

コマンド一覧

GitのReadmeから抜き出した、コマンドです。

tugboatコマンドは完全に名前が一致しない場合でも、見つけて起動します。Readmeには、"admin"という単語で、"pearkes-admin-001"という名前のドロップレットを起動する例が、乗っています。

$ tugboat restart admin

Droplet fuzzy name provided. Finding droplet ID...done, 13231512 (pearkes-admin-001)
Queuing restart for 13231512 (pearkes-admin-001)...done

名前が複数に一致する場合は、一覧されますので、選択します。下の例では、3件一致しています。

$ tugboat restart pearkes
Droplet fuzzy name provided. Finding droplet ID...Multiple droplets found.

0) pearkes-web-001  (13231511)
1) pearkes-admin-001 (13231512)
2) pearkes-api-001 (13231513)

Please choose a droplet: ["0", "1", "2"] 0
Queuing restart for 13231511 (pearkes-web-001)...done

-nオプションと-iオプションは、曖昧な名前の一致結果が複数だった場合に、一つを指定するために使用します。どうしても、曖昧な名前を指定しなくてはならないという、仕様としては出来が良くないようです。

サブコマンドの一覧は、tugboatで表示されます。サブコマンドのヘルプは、tugboat help コマンド名で表示できます。以下の使用例は、Readmeから取ったもので、コマンドの引数やオプションは、ヘルプで確認してください。

SSH接続
$ tugboat ssh admin

Droplet fuzzy name provided. Finding droplet ID...done, 13231512 (pearkes-admin-001)
Executing SSH (pearkes-admin-001)...
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64)
pearkes@pearkes-admin-001:~#
ドロップレット一覧
$ tugboat droplets
ドロップレット作成

起動途中の状態はnewになります。記号語はactiveです。

$ tugboat create pearkes-www-002 -s 64 -i 2676 -r 2 -k 11251

Queueing creation of droplet 'pearkes-www-002'...done
ドロプレットの情報表示
$ tugboat info admin

Droplet fuzzy name provided. Finding droplet ID...done, 13231512 (pearkes-admin-001)

Name:             pearkes-admin-001
ID:               13231512
Status:           active
IP:               30.30.30.3
Region ID:        1
Image ID:         25489
Size ID:          66
Backups Active:   false
ドロプレットの破壊

ドロップレットを停止・削除します。完了するまで状態はactiveとなり、削除後はアクセスできなくなります。

$ tugboat destroy pearkes-www-002

Droplet fuzzy name provided. Finding droplet ID...done, 13231515 (pearkes-www-002)
Warning! Potentially destructive action. Please confirm [y/n]: y
Queuing destroy for 13231515 (pearkes-www-002)...done
ドロップレットのリスタート

停止(Halt)状態のアプレットを再起動します。

停止中はoffの状態ですが、このコマンドを叩くとすぐにactiveになります。

このコマンドを使用しなくても、後述のスナップショットを取った場合、処理が終了後に自動的に起動されます。

$ tugboat restart admin

Droplet fuzzy name provided. Finding droplet ID...done, 13231512 (pearkes-admin-001)
Queuing restart for 13231512 (pearkes-admin-001)...done
ドロップレットの停止

ドロップレットを電源OFFの停止状態にします。完全にOFFになるまでは、activeです。

$ tugboat halt admin

Droplet fuzzy name provided. Finding droplet ID...done, 13231512 (pearkes-admin-001)
Queuing shutdown for 13231512 (pearkes-admin-001)...done
スナップショット取得

停止状態のアプレットのスナップショットを取ります。指定する名前は重複が許されているため、存在するものでもOKです。

保存したスナップショットはイメージとして取り扱われます。ですから、tgboat imagesでリストできます。

スナップショットが保存されると、ドロップレットは自動的に起動され、active状態になります。

$ tugboat snapshot test-admin-snaphot admin

Queuing snapshot 'test-admin-snapshot' for 13231512 (pearkes-admin-001)...done
ドロップレットのリサイズ

停止状態のアプレットのサイズを変更します。

$ tugboat resize admin -s 66

Queuing resize for 13231512 (pearkes-admin-001)...done
イメージ一覧

自分で作成したイメージ(バックアップ/スナップショット)のみ

$ tugboat images

My Images:
pearkes-admin-001 2013-05-19 (id: 13231512, distro: Ubuntu)
....

DOが公開しているイメージも含めて表示

$ tugboat images --global

My Images:
pearkes-admin-001 2013-05-19 (id: 13231512, distro: Ubuntu)
....
Global Images:
CentOS 5.8 x64 (id: 1601, distro: CentOS)
...
利用可能サイズ一覧
$ tugboat sizes

Sizes:
512MB (id: 66)
1GB (id: 63)
...
利用できるリージョン一覧
$ tugboat regions

Regions:
New York 1 (id: 1)
Amsterdam 1 (id: 2)
San Francisco 1 (id: 3)
SSHキーの一覧
$ tugboat keys

Keys:
pearkes (id: 10501)
...
ドロップレットの状態変化を待つ

ドロップレットに対する起動や停止は、キューで処理されるため、各コマンドは非同期ですぐに戻ってきます。そのため、ドロップレットの状態遷移を待つための、コマンドが用意されています。

指定される状態になるまで、制御は返ってきません。

状態は、newactiveoffです。

$ tugboat wait admin --state off

Droplet fuzzy name provided. Finding droplet ID...done, 13231512 (pearkes-admin-001)
Waiting for droplet to become off....
...

アフェリエイト

ログインして、https://cloud.digitalocean.com/user_referralsで設定画面です。中央のリンクが自分のアフェリエイトリンクになります。私のはこれです。どうせアカウント作成するなら、こちらから入ってもらうと、記事を書いた甲斐があったというものです。

Payout Optionsの左が、"Enable Account Credit Payout"が、DOの自分のアカウントに入れるオプション、右の"Enable PayPal Payout"は、PayPalで受け取るオプションです。当然、PayPalのアカウントが必要で、登録メールアドレスを指定します。