doctl(DigitalOcean用CLI)の使い方

# 概要

``doctl`` を使って、コマンドラインから DigitalOcean 上の仮想マシンを操作する。初期設定の方法や、仮想マシンの作成・停止・一覧表示・削除をする。

# doctl とは

``doctl`` は DigitalOcean 公式のコマンドライン・ツール。仮想マシンの作成だけでなく、バックアップの制御や、DNS、フローティング IP の管理もコマンドライン上で行うことができる。

 [GitHub 上で開発](https://github.com/digitalocean/doctl) が行われており、2016年3月に 1.0.0 が公開されている。DigitalOcean の環境は API を使って制御する。

Golang で開発されており、クライアントが対応しているのは Linux だけでなく、Mac OS X や Windows 上でも利用できる。 

# インストール方法

GitHub の [Releases](https://github.com/digitalocean/doctl/releases) で各 OS に対応したバイナリが配布されている。OS に対応したアーカイブをダウンロードして展開後、/usr/local/bin 等のパスを通った場所に ``doctl`` を設置する。

# 初期設定

``doctl`` は DigitalOcean との通信に API を使う。初期設定は

```
$ doctl auth login
```

このコマンドを実行すると、Mac であれば DigitalOcean のログイン画面が表示され、認証するとその情報を、ローカルの `~/.doctlcfg`` に保管する。

しかしリモート環境上や Windows の場合、正しくログインできない ([issue #22](https://github.com/digitalocean/doctl/issues/19))。 代替手段として、手動で ``~/.doctlcfg`` ファイルを作成する。ファイルの書式は以下の通り。

```
access-token: アクセストークン
```

なお、パーミッションは 400 等、適切に設定すること。

また、Windows で Cygwin を使っている場合は ``C:\Users\<ユーザ名>\.doctlcfg`` に置く必要があるので注意。

## 代替手段

別の方法として、このファイルを作成しなくても、各種のコマンドで ``-t <token>`` を指定しても構わない。


# 使い方

## 基本的な使い方

```
$ doctl compute [コマンド]
```

## ドロップレット一覧表示

```
$ doctl compute droplet list
ID      Name                    Public IPv4     Memory  VCPUs   Disk    Region  Image              Status
4604xxx dev3.pocketstudio.net   128.199.xxx.xxx   512     1       20      sgp1    CentOS 6.5 x64             active
6759xxx dev.docker.jp           128.199.xxx.xxx 512     1       20      sgp1    Ubuntu 14.04 x64   active
```

## ドロップレット作成

作成は ``doctl compute droplet create`` コマンドを使う。この時に名前、サイズ、OS イメージ、SSH 鍵を指定できる。

clitest という名前マシンを、512MB のメモリ、Ubuntu 、シンガポールで起動する例：

```
$ doctl compute droplet create clitest \
   --size 512mb \
   --image ubuntu-14-04-x64 \
   --region sgp1 \
   --ssh-keys 7a:17:ea:83:24:48:bd:64:ad:bc:dd:8c:a2:34:9f:4a
ID              Name    Public IPv4     Memory  VCPUs   Disk    Region  Image              Status
12732559        clitest                 512     1       20      sgp1    Ubuntu 14.04.4 x64 new
```

``Status`` が ``new`` になっている。状態は ``doctl compute droplet list マシン名`` でも確認可能。1分ほど待つと、``active`` に変わる。

```
$ doctl compute droplet list clitest
ID              Name    Public IPv4     Memory  VCPUs   Disk    Region  Image              Status
12732559        clitest 139.59.239.27   512     1       20      sgp1    Ubuntu 14.04.4 x64 active
```

あとは ``doctl compute ssh clitest`` のようにホスト名を指定するだけでログイン可能（ただし、私の Cygwin 環境では SSH 鍵が見つからないというエラーが出てしまい、確認中）。

### オプション

その他、起動時には公式 CLI だけあって、ブラウザで作成時と同様に様々なオプションを指定可能。

* ``--enable-backups`` … ドロップレットのバックアップ有効化
* ``--enable-ipv6`` … IPv6 有効化
* ``--enable-private-networking`` … プライベート・ネットワーク有効化
* ``--format 文字列`` … 出力をカンマ区切りでカスタマイズ
* ``-h, --help`` … ヘルプ                        help for create
* ``--image 文字例`` … ドロップレット用イメージ（必須）
* ``--no-header`` … ヘッダを表示しない
* ``--region 文字列`` … リージョン（必須）
* ``--size 文字列`` … ドロップレットのサイズ（必須）
* ``--ssh-keys 文字列`` … SSH 鍵のフィンガープリント（デフォルトは []）
* ``--user-data 文字列`` … ユーザ・データ
* ``--user-data-file 文字列`` … ユーザ・データ用のファイル
* ``--wai`` … ドロップレット作成までどれだけ待つか

### ドロップレットの操作

ドロップレットの状態を操作するには ``doctl compute droplet-action <アクション名>`` の形式を使う。例えば、電源をoffにするには ``power-off <droplet_ID>`` を指定する（ドロップレット名では指定できないので注意）

```
$ doctl compute droplet-action power-off 12732559
ID              Status          Type            Started At                      Completed At       Resource ID     Resource Type   Region
92573621        in-progress     power_off       2016-04-03 04:08:26 +0000 UTC   <nil>      12732559        droplet         sgp1
```

状態を確認すると、止まっている。

```
$ doctl compute droplet list clitest
ID              Name    Public IPv4     Memory  VCPUs   Disk    Region  Image              Status
12732559        clitest 139.59.239.27   512     1       20      sgp1    Ubuntu 14.04.4 x64 off
```

### ドロップレット削除

削除は ``doctl compute droplet delete <droplet_ip>`` を指定するだけ。

```
$ doctl compute droplet delete 12732559
deleted droplet 12732559
```

## その他のコマンド

### リージョン一覧表示

```
$ doctl compute region list
Slug    Name            Available
nyc1    New York 1      true
sfo1    San Francisco 1 true
nyc2    New York 2      true
ams2    Amsterdam 2     true
sgp1    Singapore 1     true
lon1    London 1        true
nyc3    New York 3      true
ams3    Amsterdam 3     true
fra1    Frankfurt 1     true
tor1    Toronto 1       true
```

### 利用可能なマシン一覧

```
$ doctl compute size list
Slug    Memory  VCPUs   Disk    Price Monthly   Price Hourly
512mb   512     1       20      5.00            0.007440
1gb     1024    1       30      10.00           0.014880
2gb     2048    2       40      20.00           0.029760
4gb     4096    2       60      40.00           0.059520
8gb     8192    4       80      80.00           0.119050
16gb    16384   8       160     160.00          0.238100
32gb    32768   12      320     320.00          0.476190
48gb    49152   16      480     480.00          0.714290
64gb    65536   20      640     640.00          0.952380
```

# 参考情報

* digitalocean/doctl; A command line tool for DigitalOcean services
 * https://github.com/digitalocean/doctl
* How To Use Doctl, the Official DigitalOcean Command-Line Client | DigitalOcean
 * https://www.digitalocean.com/community/tutorials/how-to-use-doctl-the-official-digitalocean-command-line-client 

特に後者は様々なコマンドの実行例が載っているため、有用。