🤖

DigitalOcean doctlで起動・終了スクリプトを作る

2021/02/14に公開

DigitalOceanの掟

DigitalOceanでは、Droplet(DigitalOceanのEC2のようなもの)は、起動停止に関らず、課金されます。Snapshotも課金されますがdropletの方が高いので、開発環境では、作業開始時にSnapshotから起動、終了時にSnapshotに保存という仕組みを作りコストを抑えます。作業開始時に最新のSanpshotからDropletを作成(start.sh)し、作業終了(close.sh)は、Sanpshot(最新)を作成後Dropletを削除します。3世代保存バージョンは、またいずれ。

DigitalOcean doctlとは

DigitalOceanの公式コマンドツールです。今回は、簡単な起動・終了スクリプトを作成します。

インストール方法は

https://www.digitalocean.com/docs/apis-clis/doctl/how-to/install/

チュートリアルは

https://www.digitalocean.com/community/tutorials/how-to-use-doctl-the-official-digitalocean-command-line-client

コマンドリファレンスは

https://www.digitalocean.com/docs/apis-clis/doctl/reference/

登録している最新の1個のsnapshotを元にdropletを作成する

snapshotがないとエラーになります。

#!/bin/sh
#start.sh
mid=$(doctl compute image list --no-header --format "ID")
latest=(${mid///n/ })
doctl compute droplet create --image $latest --size s-1vcpu-1gb --region sgp1 droplet1

登録している最新の1個のdropletをスナップショットして削除する

dropletがないとエラーになります。Jq使ってリスト保存してますので不要の方はこの行は実行しないでください。

#!/bin/sh
#close.sh
id=$(doctl compute droplet list --no-header --format "ID")
latest=(${id///n/ })
doctl compute droplet get $latest --output json |jq .>backup.json
doctl compute droplet-action snapshot $latest --no-header --snapshot-name gen1
doctl compute droplet delete -f $latest

Discussion