4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Cloud InfrastructureAdvent Calendar 2023

Day 3

OCI CLIで◯◯をできるだけワンライナーで一括削除する

Last updated at Posted at 2023-12-03

cloud shell でbash環境で作業します。
(cloud shell の初期のシェルクスクリプトは bash)

本当にワンライナーにすることもできたのですが、中間ファイル毎に区切ったほうが現実的だったので
実際は2・3回のコマンドで出来るようにしてます。

CLIで「コンパートメント」を削除

コンパートメントを削除するためには、全てのリソースを削除する必要があります。

コンパートメントを削除するには、すべてのリソースが空である必要があります。コンパートメントの削除を開始する前に、そのすべてのリソース(コンパートメントにアタッチされたポリシーを含む)を移動、削除または終了していることを確認してください。

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# 全てのコンパートメントを削除、引数で削除対象のコンパートメントのOCIDリスト(compartment_id.list)を指定
while read line; do oci iam compartment delete -c $line --force; done < ./compartment_id.list

CLIで「ユーザー」を削除

まず、削除するユーザーの、OCIDのリストを作成し、
作成したリストを利用して一括削除しす。

管理者ユーザーだけ除外したリストが作れないため、一旦OCIDのとユーザーが記載されたリストを作成し、(手動で)viなどでユーザー名を削除する必要があります。

# OCIDとユーザーが記載されたリストを作成
oci iam user list --all | egrep '"id"|"name"' | sed 's/^.*: "//' | sed 's/",$//' > user_ocid.list

# viエディタ等で、必要なユーザーの取捨選択
vi user_ocid.list

# 引数でOCIDのリスト(user_ocid.list)を指定
while read line; do oci iam user delete --user-id $line --force; done < ./user_ocid.list 

CLIで「Compute」を削除

まず、コンパートメント一覧を作成します。
その後、Compartmentリストをもとに、インスタンスリストを作成します。

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# インスタンスリストを作成、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci compute instance list -c $line | grep '"id"'; done < ./compartment_id.list | sed 's/",$//' | sed 's/.*"//' > compute_ocid.list

# 全てのComputeを削除、引数で削除対象のインスタンスのOCIDリスト(compute_ocid.list)を指定
while read line; do oci compute instance terminate --instance-id $line --force; done < ./compute_ocid.list

CLIで「Object Storage」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# Object Storage名を一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci os bucket list -c $line; done < ./compartment_id.list | grep '"name"' | sed 's/",$//' | sed 's/.*"//' > os_name.list

# 全てのObject Storageを削除、引数で削除対象のバケット名リスト(os_name.list)を指定
while read line; do oci os bucket delete --bucket-name $line --empty --force; done < os_name.list 

CLIで「VCN」を削除

VCNを削除するためには関連する全てのリソースを削除する必要があります。

VCNを削除するためには、まずそれが空であること、またそれに関連付けられたリソースまたはゲートウェイがない(例: インターネット・ゲートウェイ、動的ルーティング・ゲートウェイなどがない)ことが必要です。

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# VCNを一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network vcn list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > vcn_id.list

# 全てのInternet Gatewayを削除、引数で削除対象のInternet GatewayのOCIDリスト(servicegw_id.list)を指定
while read line; do oci network vcn delete --vcn-id $line --force; done < ./vcn_id.list

CLIで「サブネット」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# サブネットを一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network subnet list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > subnet_id.list

# 全てのサブネットを削除、引数で削除対象のサブネットのOCIDリスト(subnet_id.list)を指定
while read line; do oci network subnet delete --subnet-id $line --force; done < ./subnet_id.list 

CLIで「ルート表」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# ルート表を一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network route-table list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > route_id.list

# 全てのルート表を削除、引数で削除対象のNat GatewayのOCIDリスト(natgw_id.list)を指定
while read line; do oci network route-table delete --rt-id $line --force; done < ./route_id.list 

CLIで「Nat Gateway」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# Nat Gatewayを一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network nat-gateway list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > natgw_id.list

# 全てのNat Gatewayを削除、引数で削除対象のNat GatewayのOCIDリスト(natgw_id.list)を指定
while read line; do oci network nat-gateway delete --nat-gateway-id $line --force; done < ./natgw_id.list 

CLIで「サービスゲートウェイ」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# サービスゲートウェイを一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network service-gateway list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > servicegw_id.list

# 全てのサービスゲートウェイを削除、引数で削除対象のサービスゲートウェイのOCIDリスト(servicegw_id.list)を指定
while read line; do oci network service-gateway delete --service-gateway-id $line --force; done < ./servicegw_id.list 

CLIで「Internet Gateway」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# Internet Gatewayを一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network internet-gateway list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > internetgw_id.list

# 全てのInternet Gatewayを削除、引数で削除対象のInternet GatewayのOCIDリスト(servicegw_id.list)を指定
while read line; do oci network internet-gateway delete --ig-id $line --force; done < ./internetgw_id.list

CLIで「Internet Gateway」を削除

# rootを含め全コンパートメントのIDを取得
oci iam compartment list --include-root | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list
# ↑もしくは、rootを含め「ない」全コンパートメントのIDを取得
oci iam compartment list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > compartment_id.list

# セキュリティリストを一括取得、引数でコンパートメント一覧リスト(compartment_id.list)を指定
while read line; do oci network security-list list -c $line; done < ./compartment_id.list | grep '"id"' | sed 's/",$//' | sed 's/.*"//' > securitylist_id.list

# 全てのセキュリティリストを削除、引数で削除対象のセキュリティリストのOCIDリスト(securitylist_id.list)を指定
while read line; do oci network security-list delete --security-list-id $line --force; done < ./securitylist_id.list

最後に

ルート以外の中身をほぼ全部削除する事がありましたので、その時の作業コマンドをまとめました。
少しでもお役にたっていただければ幸いです。

参考

  • OCI CLI コマンドリファレンス

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?