DigitalOceanでsnapshotを駆使したい

## 概要
DigitalOceanはVMを停止しても課金されるため、snapshotを駆使すると使わない期間は無課金で過ごせる。(awsとかazureなどで使わなくなったらVM停止とかよくやりそうな話)

そこでsnapshot周りの懸念などをちょっと確認してみたのでまとめてみる。

## 1.コスト
現状コストはかからない。
作成して少ししても請求明細にも記載はなかった。

将来的には0.02GB/monthで課金予定だけどまだサイズ見積もりがちゃんとできないからおいおいらしい。

> The price for snapshots will be $0.02 per GB of snapshot storage per month. Until we make the actual snapshot size evident, we are not currently charging for them.

また、snapshotサイズも使用量で済むそうだ。

> You get charged only for the used space and not the whole disk. The snapshots are compressed and I think you're billed for the compressed size and not the original size.

ただ、現状上記の通り取得したsnapshotのサイズは分からない模様

> 2) Displaying the size of snapshots 
> Working on that :]

参考:
[How much does snapshot costs ? | DigitalOcean](https://www.digitalocean.com/community/questions/how-much-does-snapshot-costs)
[Questions on snapshot billing | DigitalOcean](https://www.digitalocean.com/community/questions/questions-on-snapshot-billing)

## 2.snapshot取得方法
対象VMのメニューから選択できる。
ここで、事前にVMを停止しておく必要がある。

![ss_start.png](https://qiita-image-store.s3.amazonaws.com/0/26677/ea015b5d-604b-23b2-3796-d2f4c748b873.png)
![ss_processing.png](https://qiita-image-store.s3.amazonaws.com/0/26677/d9e33e67-f01c-ea44-1aac-cff23b54b1b2.png)

## 3.取得時間
今回は1コア/0．5GBメモリのVMでディスクの実使用量は3GB程度だったが、2分程度で終わった。開始前の注意書きには1時間以上と書いてあるが、それは100GB程度のディスクを使ってる前提のようだ。

![ss_end.png](https://qiita-image-store.s3.amazonaws.com/0/26677/b7c09e31-afdc-d2e9-e4c5-f5b2f3f42cac.png)

## 4.snapshotからのVM作成
取得したsnapshotからVMを立て直す場合にはCreate Dropletでの詳細入力のOS選択時に自分の取得したsnapshotを選択すればよい。

![ss_selectimage.png](https://qiita-image-store.s3.amazonaws.com/0/26677/b5f2c67c-6f93-0cf4-1abc-1e3b7cff9b72.png)


## 5.backupとの違い
今更だがDigitalOceanにはbackupとsnapshotの2つがある。snapshotは無料だが手動でとるVMのフルイメージのバックアップで、backupは有料だが自動でsnapshotをとってくれてくれるもの、という認識でよさそうだ。

参考:
[DigitalOcean Backups and Snapshots Explained | DigitalOcean](https://www.digitalocean.com/community/tutorials/digitalocean-backups-and-snapshots-explained)

## 6.諸注意
VMを削除するときにまとめてsnapshotも消されそうだが問題ないとのこと。
また削除時にscrub dataのチェックがあるが、これはSSDのデータをよりセキュアに消すためのチェックなのでデフォルトオンで何の問題もなさそう。

参考:
[Scrub Data, Destroying droplet | DigitalOcean](https://www.digitalocean.com/community/questions/scrub-data-destroying-droplet)
[(メモ) DigitalOcean の "Scrub Data" オプションについて - weblog of key_amb](http://keyamb.hatenablog.com/entry/2015/01/12/103719)

またapiが提供されてるのでsnapshotの取得の自動化を自分で組むことは可能なよう。

参考:
[How To Use DigitalOcean Snapshots to Automatically Backup your Droplets | DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-use-digitalocean-snapshots-to-automatically-backup-your-droplets)

あとsnapshotをとったあとに対象のVMにすぐrestoreできるが、これは確認なくすぐ実行されるのでうっかり押さないように注意。別にVM停止は不要なようだが、現状の状態とsnapshotの状態に差分があるとめんどいかと。

![ss_restore.png](https://qiita-image-store.s3.amazonaws.com/0/26677/4397e527-c4b1-c9db-deca-1ea6eec1f0e0.png)


## まとめ
全体として要望である使わない時はVM消して無課金で必要なときにsnapshotから戻しで立て直す、というのは実施できそうだ。ちなみにVM停止だけだとDigitalOceanはIPが解放されないのでそこは便利だなと感じた。

コストはいつからかかるかは分からないが、だいぶ安いのでたかだか$1程度のコストで済みそうなので上々な気がする。他パブリッククラウドなどはストレージは別途課金だったりするとそこの課金計算がわかりづらくなるので、そこがまとまってるのはDigitalOceanは楽だなと感じだ。特にサービスというより個人での簡単な検証などには良さげかと。

あとはクーポンのもらい方が「共有したら!」とか「このリンクから他の人がアカウント作ったら!」とか昔のdropboxのボーナスキャンペーンを彷彿とすることをしてるのでなんだか懐かしかった。 

https://www.digitalocean.com/?refcode=a5772fe212eb
(いちおうここから申し込んでVMいろいろ建てるとクーポンもらえるリンクを貼っておく)

## 経緯(おまけ)
長くなるが自宅鯖管理で思ったことをつらつらと。

自宅?用のサーバが欲しくawsでt2.micro1台でいろいろやってたが、月＄10くらいのはずがなんでか$15かかってた。無料期間も過ぎたし、digitaloceanは料金わかりやすかったのが魅力なので試してみた。

ちなみに自宅?用サーバの用途としては2つある。

- 常時稼働
    - 最小スペック
    - 簡単な検証や雑務系(いわゆる外からDNSとかping疎通確認したり)
    - 週次の簡単なバッチ
- 必要なときだけ稼働
    - 中程度スペック(2コア4GBメモリ位は欲しい)
    - 規模デカ目の検証用(mongoでレプリカ貼って挙動検証とか複数台必要なの)
    - VM複数な時だけ起動(月に1度、数日間連続程度)
    - VM on VM(virutlbox + vagrantで必要に応じて複数VM建てる)

これらを2つのサーバでまかないたい。

すでに前者は1コア/0．5GBメモリの最少スペックのVMで動いている。
今回の目的は後者で本当に必要な時だけ課金になるか?と消した後必要な時に戻せるか?のためであったりする。

ちなみに必要な台数に応じてVM立てないでわざわざVMの中でVM立ててるのは1台ごとにVMが外にでるのがいやなのと、検証用なのでそこまでスペックが必要なわけではないため。VM on VMである程度いけないかな?と。(まだ試してないのでもしかしたら現実的でないかもしれないが。)

また後者用に家に物理PC(2コア6GBメモリ)があるが地味にCDからOS入れてとかめんどくさいし、部屋狭いので場所とるし配線大変だしでコスト試算したら結構やすかったのでいいかなと。

コスト試算としては月額で以下

```
最小スペック(1コア/0．5GBメモリ、$5/month) * 1mo * 1台
+
そこそこスペック(2コア/4GBメモリ、$0．06/hour) * 72h(3日) * 1台
= $9.32
```

毎月3日も検証用は使わないかもで、2月に1度で3日間なら、4コア8GBメモリの上位スペックでも同じコストになるのでいいかもしれない。

そんな感じで今のawsに月$15より安くていろいろできそうなので(大してawsを使いこなせてなかったという話もある)試してみた。

参考:
[Pricing | DigitalOcean](https://www.digitalocean.com/pricing/)

以上。