LoginSignup
2

More than 1 year has passed since last update.

[Oracle Cloud]特定コンパートメントのリソース一括削除にTerraformの使用 (2021/12/13)

Posted at

はじめに

この記事は Oracle Cloud Infrastructure Advent Calendar 2021 Day 13の記事として書かれています。
OCIのコンパートメント内のリソースの一括削除をTerraform/OCI Resource Managerを使って実施してみた。

既存コンパートメントからスタックを作成

Webコンソールから「開発者サービス」の
「リソース・マネージャ」>「スタック」を選択
image.png

コンパートメント内のすべてのリソース用にTerraformプランファイルのセットを新しいスタックを作成します。
「スタックの作成」をクリック
image.png

「既存のコンパートメント」を選択し、リソースが存在するコンパートメントを選択しスタックを作成
image.png

image.png

image.png

Resource Managerでのリソース削除

スタックの作成が完了後 「Destroy/破棄」を実行
image.png

image.png

補足

破棄操作が失敗した場合、OCI Cloud ShellからTerraformコマンドを実行しリソースを削除できます。
OCI Provider Webページ(https://releases.hashicorp.com/terraform-provider-oci/)から最新リリース(Linux 64bit版)のリンクURLをコピー
image.png

コンソールから Cloud Shellを起動
image.png

ユーザーのルートディレクトリの下に、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を使いこなすための簡単なアクセスメカニズムを提供します。

参考情報

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
What you can do with signing up
2