【OCI初級者編】VCNが削除できない問題

#はじめに
先日の記事「[【OKE超入門】OKE クラスタ クイック作成で Nginxを15分で構築する.お片付け](https://qiita.com/yama6/items/752cf6a4ac2408b5ed35#%E3%81%8A%E7%89%87%E4%BB%98%E3%81%91 "【OKE超入門】OKE クラスタ クイック作成で Nginxを15分で構築する")」にて、
>VCNの削除はお任せします。

と申し上げましたが、作成した本人がVCN削除にハマるという事案に直面したため、忘備録及び自戒を込めて投稿します。


#この記事はこんな人向け
・VCNを消したいけどうまく消せない人

#え、普通に削除すればよくない？

と、私も思っていましたが、VCNは、VCNの中に作成された特定のリソースを先に削除しないと消すことができません。殊更、今回のようにクイック作成でポチポチ作っていった場合には、１つ１つのリソースを明示的に作成した意識がないため、作成されたVCNリソースを的確に把握していないこともあるかと思います。

#放置しておくと起こりうる問題
VCNリソースには課金が発生しないため、コストの問題はございません。
しかし、サービス制限により、既存の不要なVCNを削除しないと新しいVCNを作成できない事象が発生します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/fc578283-2ace-04e4-2091-2d1d69e08319.png)
【参照】[ネットワーキングのサービス制限](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/servicelimits.htm "ネットワーキングのサービス制限")

Pay-as-You-Goにおけるリージョン内のVCN制限数は10となっています。

上限に達しても、サービス制限の増加をリクエストすればよいのですが、個人利用の環境でサービスリクエストを申請するケースは稀ですし、課金されないといえど、環境内のリソースを整理する上で、使用していないリソースは削除したほうが健全です。なので使っていないリソースはがんがん消していきましょう！

#VCN削除にあたり、先に消す必要があるリソース

前提として、VCNの中にComputeやDBCS等、その他のリソースがなく、あくまで最後にVCNを削除するというシーンに限ってお話します。また、VCNのコンソール画面左側のリソース一覧でお話させていただきます。
OKEクラスタ削除後、VCNのリソースは下記の状態になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/4f4c126a-f994-06ae-551e-e70b343543d7.png)
表示されているリソースのうち、削除する必要があるリソースは、下記３つです。
**1. サブネット**
**2. インターネットゲートウェイ**
**3. セキュリティリスト**

※今回は全てパブリックで作成したため、元より作成されていませんが、ノードインスタンスをプライベートサブネットに配置した場合、NATゲートウェイ、サービス・ゲートウェイ等のゲートウェイ系も削除する必要があります。

それ以外のリソースについては、VCN作成時に作成されるデフォルトリソースであるため、削除する必要がありません。

#ハマったのはここ
さて、ハマったポイントは２つあります。

**1. インターネットゲートウェイが消えない**

いざゲートウェイを削除しようとすると、以下のように怒られました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/81517afe-2ad2-46c1-45a2-75775ee54b97.png)

ルート表がインターネットゲートウェイを参照している？
でもルート表って削除対象じゃないのでは？

結論から申し上げますと、ルート表はVCN作成時に作成されるデフォルトリソースであるため、削除できません。
削除が必要なのは、ルート表の中で定義されたルート・ルールでした。

**【手順】**
1. 画面左のリソース一覧から「ルート表」をクリックします。
2. ルート表の名前ラベルをクリックします。

3. ルート・ルールの右アイコンから、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/a27cce4b-f820-9328-7908-73545a7e6df2.png)

4. 削除後、仮想クラウド・ネットワークの詳細画面に戻り、画面左のリソース一覧から「インターネット・ゲートウェイ」をクリックします。

5. インターネット・ゲートウェイの右アイコンから、「削除」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/25ece104-c370-f81d-b052-c9eae71bd849.png)
今度は怒られずに、リソース削除に成功しました！

**2. セキュリティリストが全部消えない**

OKEクラスタ作成で作られるセキュリティ・リストは、kubernetesAPIエンドポイント用、ワーカーノード用、Load Balancer用と、３つありますが、このうちLoad Balancer用だけ削除ができませんでした。同じ要領で削除していくと、「終了」ボタンが非活性になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/94e29dd8-eb4b-bafe-9b57-d7200d296e1f.png)
これだけ削除権限がない…？セキュリティリストを削除しなくてはVPNを消せない…詰んだ…と考えていたのですが、セキュリティリストはひとつデフォルトで存在する仕様となっているので、削除が必要ない、というか最後の１個はそもそも消せません。

試しに、コンソール画面からVCNの作成してみたところ、下記のリソースがデフォルトで作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/04723bb9-04f8-2837-8e01-6209f921e093.png)

デフォルトのセキュリティリストが最初から１つ存在していることがわかります。
OKEクラスタのクイック作成でも同様に、これらのリソースは個別で削除することができないため、VCN削除時に一緒に消すことになります。

#VCNを削除する

では最後に、VCNを削除してみましょう。
「仮想クラウド・ネットワークの詳細」から、画面上部の「削除」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/93b95bf4-dc67-ffac-31de-3f040914dbaf.png)
クリック時には、「すべて終了」ボタンが非活性のためドキドキしますが、関連付けられているリソースがロード中となっているので、待機します。
2～3分後、ロード中となっていたリソースが" - "のステータスとなり、「すべて終了」ボタンが活性になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/6eb05adb-28b8-c61d-1b95-238cd5c636da.png)
ボタン押下後、下記の画面が表示されたら成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/d32fda76-c0f4-3fd9-eb54-bdb6cde2093c.png)

#まとめ

大変初歩的な内容となりますが、VCNが削除できない問題が起きた際の確認事項、実行手順についてまとめました。
CLIを利用して、VNICに関する情報を取得するなど、より詳細にトラブルシューティングを行う方法については、下記の公式リファレンスに記載がありますので、併せてご確認頂ければ幸いです。

【参考】[サブネットまたはVCNの削除](https://docs.oracle.com/ja-jp/iaas/Content/Network/Troubleshoot/subnetdelete.htm "サブネットまたはVCNの削除")

OKEクラスタを作成してみると、一緒に作成されるリソースについても理解が進むなーと思いました。