#はじめに
この記事は Oracle Cloud Infrastructure Advent Calendar 2021 Day 13の記事として書かれています。
OCIのコンパートメント内のリソースの一括削除をTerraform/OCI Resource Managerを使って実施してみた。
既存コンパートメントからスタックを作成
Webコンソールから「開発者サービス」の
「リソース・マネージャ」>「スタック」を選択
コンパートメント内のすべてのリソース用にTerraformプランファイルのセットを新しいスタックを作成します。
「スタックの作成」をクリック
「既存のコンパートメント」を選択し、リソースが存在するコンパートメントを選択しスタックを作成
Resource Managerでのリソース削除
補足
破棄操作が失敗した場合、OCI Cloud ShellからTerraformコマンドを実行しリソースを削除できます。
OCI Provider Webページ(https://releases.hashicorp.com/terraform-provider-oci/)から最新リリース(Linux 64bit版)のリンクURLをコピー
ユーザーのルートディレクトリの下に、binというディレクトリを作成
wget <リンク先>を使って、binフォルダにOCI Providerをダウンロードし、ダウンロードしたファイルを解凍
@cloudshell:~ (ap-tokyo-1)$ mkdir bin
@cloudshell:~ (ap-tokyo-1)$ cd bin
@cloudshell:bin (ap-tokyo-1)$ wget https://releases.hashicorp.com/terraform-provider-oci/4.55.0/terraform-provider-oci_4.55.0_linux_amd64.zip
--2021-12-05 07:47:07-- https://releases.hashicorp.com/terraform-provider-oci/4.55.0/terraform-provider-oci_4.55.0_linux_amd64.zip
Resolving releases.hashicorp.com (releases.hashicorp.com)... 146.75.37.183, 2a04:4e42:79::439
Connecting to releases.hashicorp.com (releases.hashicorp.com)|146.75.37.183|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25541306 (24M) [application/zip]
Saving to: ‘terraform-provider-oci_4.55.0_linux_amd64.zip’
100%[===============================================================================================================================================================================================================================================================================================================================================>] 25,541,306 150MB/s in 0.2s
2021-12-05 07:47:07 (150 MB/s) - ‘terraform-provider-oci_4.55.0_linux_amd64.zip’ saved [25541306/25541306]
@cloudshell:bin (ap-tokyo-1)$ ls
terraform-provider-oci_4.55.0_linux_amd64.zip
@cloudshell:bin (ap-tokyo-1)$ unzip terraform-provider-oci_4.55.0_linux_amd64.zip
Archive: terraform-provider-oci_4.55.0_linux_amd64.zip
inflating: terraform-provider-oci_v4.55.0_x4
@cloudshell:bin (ap-tokyo-1)$ ls
terraform-provider-oci_4.55.0_linux_amd64.zip terraform-provider-oci_v4.55.0_x4
@cloudshell:bin (ap-tokyo-1)$ cd
ユーザーのホームディレクトリの下にcleaningディレクトリを作成し、そのディレクトリに移動
クリーンナップするコンパートメントのOCIDを指定して下記exportコマンドを実行 ( ダウンロードした OCI Providerのバージョンに注意してコマンドを実行 )
@cloudshell:~ (ap-tokyo-1)$ mkdir cleaning
@cloudshell:~ (ap-tokyo-1)$ cd cleaning/
@cloudshell:cleaning (ap-tokyo-1)$ ~/bin/terraform-provider-oci_v4.55.0_x4 -command=export -compartment_id=ocid1.compartment.oc1..aaaaaaaan -output_path=. -generate_state
2021/12/05 07:51:08 [INFO] terraform-provider-oci 4.55.0
略
INFO 2021/12/XX 07:51:46.315147 === COMPLETED ===
INFO 2021/12/XX 07:51:46.315152 ========= PERFORMANCE SUMMARY ==========
INFO 2021/12/XX 07:51:46.315157 Total resources: 2
INFO 2021/12/XX 07:51:46.315165 Total time taken for discovering all services: 18.93891921s
INFO 2021/12/XX 07:51:46.315175 Total time taken for generating state of all services: 16.43681961s
INFO 2021/12/XX 07:51:46.315183 Total time taken by entire export: 35.380211205s
@cloudshell:cleaning (ap-tokyo-1)$
コマンドを実行すると、リソースを検査し、Terraformリソースとして定義されたTerraform Planファイル(.tf)が作成され、Terraformステートファイルにインポートされます。
この.tfファイルを調べると、削除したいクラウドリソースの定義がわかります。
Terraform Destroy コマンドを実行しリソースの削除を実行します。
破壊される内容を確認し、「yes」と入力してエンターキーを押下し、リソースの削除。
@cloudshell:cleaning (ap-tokyo-1)$ ls -l
total 44
-rw-r--r--. 1 kenji_wata oci 6112 Dec X 07:51 database.tf
-rw-r--r--. 1 kenji_wata oci 38 Dec X 07:51 provider.tf
-rw-r--r--. 1 kenji_wata oci 15641 Dec X 07:51 terraform.tfstate
-rw-r--r--. 1 kenji_wata oci 8826 Dec X 07:51 terraform.tfstate.tmp.backup
-rw-r--r--. 1 kenji_wata oci 171 Dec X 07:51 vars.tf
@cloudshell:cleaning (ap-tokyo-1)$ terraform destroy
oci_database_db_system.export_DBSystem1: Refreshing state... [id=ocid1.dbsystem.oc1.phx.anyhqljrssl]
oci_database_autonomous_database.export_ADB01: Refreshing state... [id=ocid1.autonomousdatabase.oc1.phx.anyhqljrssl]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
略
Plan: 0 to add, 0 to change, 2 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
注意:ポリシーのようなアイデンティティリソースなどの一部のリソースは、テナントレベルでのみ存在するため別途削除する必要があります。
おわりに
OCI Resource Managerの リソースディスカバリー機能は、OCI コンパートメント内のリソースを把握するための非常に強力なメカニズムです。結果として得られるTerraformファイルは、コンパートメントからリソースを破壊するために使用することができます - 適切な順序で、すべての基礎となる詳細と子要素を考慮に入れて。時間と手間の節約になります。
OCI Cloud Shellは、Terraformを使いこなすための簡単なアクセスメカニズムを提供します。