Terraformで、Digital Oceanする

· by humangas · Read in about 1 min · (139 words)

何したい?

ちょいとしたサーバをテストしたい時、AWSよりもっと気軽に安く試せる環境はないかと思っていたところ「Degital Ocean」を思い出した。

最近、terraformで、vSphere, AWSなどを構築しだしたので、対応してるかなぁと調べると、ドンピシャ対応してたので、やってみることにした。

結論:使えそう。特に、Ansible開発をペペッとやりたいと思っていたので、ちょうど良いかもしれない。

Digital Oceanのアカウント作成

  1. https://www.digitalocean.com/ にアクセス
  2. サインアップしたら、以下をやっておく
  3. Paypal登録($5のプランでいいだろう)※1
  4. 二段階認証設定(少しでも安全を)※2
  5. API > Token > Generate New Token から Tokenを作成する ※3
  6. あとは、terraformでやるので特に設定なし

注釈

  • ※1: はじめに支払って$5使い切るまでストックされてる感じぽい。あと、$10のサービスもついてきた ※2017/03/02現在
  • ※2: Google Authenticator とかでいい
  • ※3: (terraformで構築する時のアカウント認証に必要)

ローカルで秘密鍵を作成する

sshで鍵認証でログインするために、つくっておく(パスフレーズなし)

$ cd ~/.ssh
$ ssh-keygen -t rsa -f digitalocean_2017-03-02.pem

セキュリティ情報を環境変数にして外出しておく

$ cat ~/.zsh.d/digitalocean.sh

export TF_VAR_digitalocean_token='***'
export TF_VAR_ssh_fingerprint=$(ssh-keygen -l -E md5 -f ~/.ssh/digitalocean_2017-03-02.pem | awk '{print $2}' | sed -e 's/^MD5://')

注釈

  • ここで設定するtokenは、先に作成したToken
  • TF_VAR_xxという環境変数にしておくと、terraformから、variable “xxx” {} と設定しているところに勝手に設定してくれる。(設定されてない場合は、実行時に聞かれる)
  • ハマりポイント!: fingerprintは、MD5にしとかないとterraform planする時に怒られた。(もしかすると、鍵を作る前に実行したから?。。今度しらべておく)
  • 鍵関係で構築に成功したり、失敗したりしたので、もしや、鍵作られる前にサーバ実行しに行ってる? と思い、後で依存関係を足した(depends_on = ["digitalocean_ssh_key.default"])。それなのか、↑のMD5なのか、今となっては前後関係がわからん。

ちなみに

↑のファイルは、zshの環境変数の一つとしてロードするが、~..zshrcの最後に↓でロードしているから。 完全にオレオレ仕様なので、適宜読み替えてください。

# Source ~/.zsh.d/*.sh
setopt nonomatch
if ls ~/.zsh.d/*.sh > /dev/null 2>&1; then
  for file in ~/.zsh.d/*.sh ; do
    [[ -r $file ]] && source "$file"
  done
fi
setopt nomatch

早速、実行

ソースは、ここにあるので、git cloneするなりして入手 - https://github.com/humangas/provision-examples/tree/master/examples/example-03/terraform

$ cd /Users/humangas/src/github.com/humangas/provision-examples/examples/example-03/terraform
$ terraform apply

SSHでログイン

applyの最後に、IPが出力されるので、それがサーバのIP

$ ssh root@サーバのIP

後片付け

検証とかテストが終わったら、以下で削除しておく(Digital Oceanは停止してても課金されるので注意)

$ terraform destroy

# 次で、yes を入力

オマケ:

imageのIDが分からないんですけど?

Webで、お目当てのサーバとかを選択した時のURL欄を見れば、パラメータに表示されているので、その文字列を使えばよい。