Windows で doctl を使う

DigitalOcean

DigitalOcean にはサーバーの作成、削除などの操作をコマンドラインで行うツール https://github.com/digitalocean/doctl があります。

Linux での使い方は過去にも書いてきました doctl での検索結果

近頃 Windows 使いとなっているので Windows で git-bash から使おうと思いました。
doctl は go で書かれており、マルチプラットフォームのバイナリが用意されているので Windows 用をダウンロードして展開すればすぐに使えます。

私の環境では $PATH に /c/Users/ytera/bin が入っていたので doctl.exe をそこに置きました。

そして doctl auth init を実行すれば token を聞かれて $HOME/.config/doctl/config.yaml が作成されるはずでしたが git-bash では期待の動作となりませんでした…

$ doctl auth init
initialize configuration

Usage:
  doctl auth init [flags]

Flags:
  -h, --help   help for init

Global Flags:
  -t, --access-token string   API V2 Access Token
  -u, --api-url string        Override default API V2 endpoint
  -c, --config string         config file (default is $HOME/.config/doctl/config.yaml)
  -o, --output string         output format [text|json] (default "text")
      --trace                 trace api access
  -v, --verbose               verbose output

Error: unable to read DigitalOcean access token: unknown terminal

そこで cmd.exe から実行してみました

C:\Users\ytera\bin>doctl auth init
DigitalOcean access token: bc522054e5045088a089321ca4e900de33ae383b692bbe1f3507bf50a4747513

Validating token... OK

(もちろん上記の token はダミーです dd if=/dev/urandom count=1 bs=512 | sha256sum てな感じで生成)

さて、config.yaml はいずこに? C:\Users\ytera\.config とか C:\Users\ytera\_config といったフォルダは存在しません。
答えは LOCALAPPDATA=C:\Users\ytera\AppData\Local でした。

C:\Users\ytera\AppData\Local\doctl\config\config.yaml

ここまでできたら以降は git-bash からでも操作できました。

実は git-bash でも winpty を使えば良いのでした。

$ winpty doctl auth init
DigitalOcean access token: bc522054e5045088a089321ca4e900de33ae383b692bbe1f3507bf50a4747513

Validating token... OK

イメージの確認

Docker のサーバーを立ち上げたいのでインストール済みのイメージ(アプリケーション)を使います

$ doctl compute image list-application --public
ID          Name                               Type        Distribution    Slug                   Public    Min Disk
24232319    Ruby-on-Rails on 16.04             snapshot    Ubuntu          ruby-on-rails-16-04    true      20
24976861    Dokku 0.9.4 on 16.04               snapshot    Ubuntu          dokku-16-04            true      20
25399919    Discourse 2.0.20170531 on 16.04    snapshot    Ubuntu          discourse-16-04        true      40
27223373    MongoDB 3.4.7 on 16.04             snapshot    Ubuntu          mongodb-16-04          true      20
27419663    Machine Learning and AI            snapshot    Ubuntu          ml-16-04               true      20
27768998    MySQL on 16.04                     snapshot    Ubuntu          mysql-16-04            true      20
28008792    GitLab 10.0.0-ce.0 on 16.04        snapshot    Ubuntu          gitlab-16-04           true      60
29160863    NodeJS 6.11.5 on 16.04             snapshot    Ubuntu          node-16-04             true      20
29160891    Ghost on 16.04                     snapshot    Ubuntu          ghost-16-04            true      30
29160892    LAMP on 16.04                      snapshot    Ubuntu          lamp-16-04             true      20
29160902    Django 1.8.7 on 16.04              snapshot    Ubuntu          django-16-04           true      20
29160903    Docker 17.09.0-ce on 16.04         snapshot    Ubuntu          docker-16-04           true      20
29160904    PhpMyAdmin on 16.04                snapshot    Ubuntu          phpmyadmin-16-04       true      20
29160905    WordPress 4.8.3 on 16.04           snapshot    Ubuntu          wordpress-16-04        true      30
29160933    MEAN on 16.04                      snapshot    Ubuntu          mean-16-04             true      30
29161212    LEMP on 16.04                      snapshot    Ubuntu          lemp-16-04             true      20

作成時にイメージ(--image)として docker-16-04 を指定すれば Docker インストール済みの Ubuntu 16.04 が起動します

公開鍵の登録

$ doctl compute ssh-key import vaio-win --public-key-file ~/.ssh/id_rsa.pub
ID          Name        FingerPrint
12345678    vaio-win    91:ad:57:b2:f6:23:e3:41:0d:3d:a8:e6:fb:a8:a3:33

Droplet の作成

doctl compute droplet create testsv01 \
  --image docker-16-04 \
  --region sgp1 \
  --size 2gb \
  --ssh-keys 12345678

--wait をつけると起動してくるまで待たされます

doctl compute droplet list で droplet のリストが確認できます。Statusnew から active になれば ssh でログインできます

region は doctl compute region list で、size は doctl compute size list で確認できます

SSH でログイン

Linux であれば doctl compute ssh testsv01 で普通に使えるのですが、git-bash からは winpty をかます必要がありました。

ががが、ローカルエコーが効かない(?)ので諦めて doctl compute droplet list --format Name,PublicIPv4 で IP アドレスを確認して普通に ssh します。

DigitalOcean では作成直後は root ユーザーで ssh します。

ssh root@xxx.xxx.xxx.xxx

サーバーの削除

停止しててもお金がかかるので不要になったら削除する

$ doctl compute droplet delete testsv01
Warning: Are you sure you want to delete droplet(s) (y/N) ? y

参考資料

How To Use Doctl, the Official DigitalOcean Command-Line Client