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 コマンドリファレンス