きゃんブロ

きゃんなブログ

【fly.io】間違えて作成してしまったボリュームを削除する方法

本来fly volume create [ストレージ名] --size 1と実行して1GBのボリュームを複数作成するべきだったが、sizeオプションをつけずにfly volume create [ストレージ名]で無料枠を超える3GBのボリュームを2個生成してしまったのでその対応を残しておく。

マシンがボリュームに接続されているか否かで対応が異なる

まずは、削除したいボリュームがマシンに接続されていないか確認しましょう。 ボリュームがマシンに接続されているかいないかで、ボリュームを削除する方法が少し異なります。

それでは確認していきましょう。ターミナルにfly volumes listというコマンドを打ちます。 下記のような情報が出てきます。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM     CREATED AT 
#詳細は記載できないため省略します

削除したいボリュームの「ATTACHED VM」カラムを確認します。もし、そこにマシンIDが入っていなければそのボリュームはマシンに接続されていません。ATTACHED VMにマシンIDが入っていれば、そのボリュームはマシンに接続されています。

接続されていない場合は「マシンにまだ接続していないボリュームを削除する方法」の手順を確認してください。 接続されている場合は「マシンに接続済みのボリュームを削除する方法」の手順に沿って作業を進めてください。

マシンにまだ接続していないボリュームを削除する方法

①削除したいボリュームIDを確認

fly volumes listというコマンドを打ちます。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM CREATED AT     
#一番左の「ID」欄を確認

削除したいボリュームの「ID」欄(一番先頭のカラム)を確認します。

②ボリュームを削除

上記で確認したボリュームIDを引数に指定してボリュームの削除コマンドを打ちます。その後、本当に消していいか聞かれるので「Yes」を入力します。

> fly volumes delete [上記で確認したボリュームID]
? Are you sure you want to destroy this volume? Yes
Destroyed volume [ボリュームID] from [あなたのアプリ名]

もしここで、Error: failed destroying volume: This volume is attached to a machine(マシンID) and cannot be deleted.というエラーが出た場合はそのボリュームはマシンに接続されています。マシンが接続されている状態ではボリュームを削除することはできません。先に、接続されているマシンの方を削除する必要があります。

マシンに接続済みのボリュームを削除する方法

マシンに接続されてしまったボリュームは削除できないので、マシンの方を削除してからボリュームを削除する手順を踏まないといけません。

①マシンを削除

1. 削除したいボリュームと接続されているマシンIDを確認

fly volumes listコマンドで削除したいボリュームと接続されているマシンのIDを確認します。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM     CREATED AT 
#「ATTACHED VM」欄に記載されているマシンIDを確認

2. マシンが停止しているか確認

> fly status
App
# 省略
Machines
PROCESS ID              VERSION REGION  STATE   CHECKS  LAST UPDATED         
# 「STATE」欄がstoppedになっているか確認

もしstoppedになっていなければ、1の手順で確認したマシンIDを引数に取って下記のコマンドを打ちましょう。

> fly machine stop [1で確認したマシンID]

3. マシンを削除

1の手順で確認したマシンIDを引数に取ってマシンの削除コマンドを打ちます。

> fly machine destroy [1で確認したマシンID]
machine [マシンID] was found and is currently in stopped state, attempting to destroy...
[マシンID] has been destroyed

これでマシンの削除が完了しました。 ちなみに、マシンを削除したらそれに接続されているボリュームも一緒に削除されるというわけではありません。 ボリュームの削除は別で作業する必要があります。

②ボリュームを削除

それでは、本命のボリュームを削除する作業に入ります。

1. ボリュームIDを確認

この状態でボリュームを確認してみましょう。「ATTACHED VM」が空欄になっているはずです。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM     CREATED AT 
# 削除したマシンが消え、「ATTACHED VM」が空欄になっているはず

空欄になっていればボリュームとマシンの接続が解除されています。

ここで、削除したいボリュームのIDをコピペしておきましょう。 ボリュームIDはfly volumes listで確認できる一番左側にあるやつです。

2. ボリュームを削除

1の手順で確認したボリュームIDを引数にとってfly volumes deleteコマンドを実行しましょう。

> fly volumes delete [1の手順で確認したボリュームID]
? Are you sure you want to destroy this volume? Yes
Destroyed volume [ボリュームID] from [あなたのアプリ名]

これでボリュームが削除されました。おつかれさまでした!

無料枠を超えても使用していなければ課金されないっぽい?

私の場合、3GBのボリュームを2個作成してしまい持っていた2台のVM両方とも接続されてしまうという状態になりました。無料枠は3GBまでなので焦った焦った...。急いでVMは2台とも削除、ボリュームも2個全て削除し、マシンもボリュームも何もない状態にしました。幸い、課金はされませんでした。使った分だけ課金されるみたいなことが公式に書いてあったので、大丈夫だったのかもです。

参考