Terraform リソースの破棄

LinuxBeginner
オンラインで実践に進む

はじめに

Terraform リソースの破棄に関するこの実験(Lab)へようこそ。インフラストラクチャのライフサイクルにおいて重要な部分は、リソースの作成や更新だけでなく、不要になったときにそれらをきれいに削除することです。このプロセスは「破棄(Destruction)」として知られています。

Terraform は、インフラストラクチャを破棄するための、簡単かつ安全なワークフローを提供します。このための主要なコマンドは terraform destroy です。誤った削除を防ぐため、Terraform はアクションを確定する前に、何が破棄されるかをプレビューする方法も提供しています。

この実験(Lab)では、以下の方法を学びます。

  • terraform plan -destroy を使用して破棄計画をプレビューする方法。
  • 破棄計画の出力を解釈する方法。
  • terraform destroy コマンドを実行してリソースを削除する方法。
  • リソースがシステムと Terraform ステートファイルの両方から正常に削除されたことを確認する方法。

ここでは、クラウドプロバイダーの認証情報を必要とせずに Terraform のワークフローに集中できるように、シンプルな local_file リソースを使用して作業を行います。

現在のプロジェクト状態の確認

破棄プロセスを開始する前に、まず Terraform プロジェクトの現在の状態を確認しましょう。これにより、現在 Terraform によって管理されているリソースが何であるかを理解するのに役立ちます。

現在のプロジェクト状態を確認するために、以下のコマンドを実行します。

まず、プロジェクトディレクトリ内のファイル一覧を表示します。

ls -la

以下に似た出力が表示されるはずです。

total 20
drwxr-xr-x 1 labex labex  110 Oct 15 13:10 .
drwxr-x--- 1 labex labex 4096 Oct 15 13:10 ..
drwxr-xr-x 3 labex labex   23 Oct 15 13:07 .terraform
-rw-r--r-- 1 labex labex 1181 Oct 15 13:07 .terraform.lock.hcl
-rwxrwxr-x 1 labex labex   45 Oct 15 13:10 example.txt
-rw-rw-r-- 1 labex labex  258 Oct 15 13:10 main.tf
-rw-rw-r-- 1 labex labex 1088 Oct 15 13:10 terraform.tfstate

これは、セットアップスクリプトによって作成された main.tf ファイルと terraform.tfstate ファイル、および Terraform 構成が適用されたときに作成された example.txt ファイルを示しています。

次に、現在の Terraform ステートを確認します。

terraform show

以下に似た出力が表示されるはずです。

## local_file.example:
resource "local_file" "example" {
    content              = "This is an example file managed by Terraform."
    directory_permission = "0777"
    file_permission      = "0777"
    filename             = "./example.txt"
    id                   = "ec3adcab998872def2df6200fb03992ac6f237a4"
}

これは、現在 Terraform によって管理されている local_file.example リソースに関する情報を表示しています。

プレビューのために terraform plan -destroy を実行する

このステップでは、投機的な破棄計画を生成する方法を学びます。リソースを破棄する前に、Terraform が正確に何を実行しようとしているかをプレビューすることがベストプラクティスです。これにより、重要なインフラストラクチャの誤った削除を防ぐことができます。terraform plan -destroy コマンドは、実際の破棄を実行することなく、どのリソースが破棄されるかを示す実行計画を作成します。

すべての作業は ~/project ディレクトリ内で行われます。セットアップスクリプトによってすでに main.tf ファイルが作成され、適用されており、example.txt というファイルが作成されています。

それでは、ターミナルで以下のコマンドを実行して破棄計画を確認してください。

terraform plan -destroy

以下に似た出力が表示されます。この出力は、設定によって管理されている単一のリソースを破棄するための計画を詳述しています。

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

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:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 to destroy.

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

破棄計画の出力を確認する

このステップでは、前のコマンドからの出力を分析します。計画を理解することは、Terraform を安全に使用するために極めて重要です。

terraform plan -destroy からの出力を確認してください。以下の重要な要素に注目してください。

  1. リソースアクション: ## local_file.example will be destroyed という行は、意図されたアクションを明確に示しています。resource "local_file" "example" の前にある - 記号は、Terraform における破棄の表記法です。- で始まる行は、何かが削除されることを示します。

  2. 属性の変更: 出力はリソースのすべての属性を示し、それらが null に変更されること(削除を意味します)を示しています。例:- filename = "./example.txt" -> null

  3. 計画の要約: 最後の行 Plan: 0 to add, 0 to change, 1 to destroy. は、計画全体の概要を簡潔に示しています。これは、計画されたアクションを素早く確認するためにチェックすべき最も重要な行です。

この計画を確認することで、local_file.example リソースのみが影響を受けることを確信できます。この確認ステップは、設定ミスが重要なリソースの意図しない破棄につながる可能性がある実世界のシナリオでは不可欠です。このステップで実行するコマンドはありません。プロセスを理解することに焦点を当てています。

リソースを削除するために terraform destroy を実行する

このステップでは、破棄計画を実行します。計画を確認し、変更内容に確信が持てたので、実際の破棄に進むことができます。

terraform destroy コマンドは、まず最終確認のために同じ破棄計画を表示し、その後、続行する前に確認を求めます。

ターミナルで以下のコマンドを実行してください。

terraform destroy

Terraform は再度計画を表示し、あなたの承認を求めます。

local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]

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:

  ## local_file.example will be destroyed
  - resource "local_file" "example" {
      - content              = "This is an example file managed by Terraform." -> null
      - directory_permission = "0777" -> null
      - file_permission      = "0777" -> null
      - filename             = "./example.txt" -> null
      - id                   = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
    }

Plan: 0 to add, 0 to change, 1 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 と入力して Enter キーを押します。

yes

確認後、Terraform はリソースの破棄処理を進め、その進捗状況を出力します。

local_file.example: Destroying... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
local_file.example: Destruction complete after 0s

Destroy complete! Resources: 1 destroyed.

これにより、local_file リソースが正常に破棄されたことが確認できました。

ファイルシステムからファイルが削除されたことを確認する

このステップでは、リソースの破棄がシステムに意図した影響を与えたかどうかを確認します。今回リソースは example.txt という名前のローカルファイルであったため、リソースを破棄すると、このファイルがファイルシステムから削除されているはずです。

ls コマンドを使用してファイルをリスト表示しようとすることで、これを検証できます。

ターミナルで以下のコマンドを実行してください。

ls example.txt

ファイルが削除されているため、コマンドは失敗し、オペレーティングシステムからエラーメッセージが表示されます。このエラーは期待される結果であり、リソースが正常に破棄されたことを確認します。

ls: cannot access 'example.txt': No such file or directory

この検証ステップは、ステートファイル内での Terraform の操作が現実世界に反映されていることを確認するため重要です。

空の terraform.tfstate ファイルを確認する

このステップでは、Terraform ステートファイル (terraform.tfstate) を調べて、リソースの破棄がどのように反映されているかを確認します。ステートファイルは、Terraform によって管理されているリソースとその現在の状態を追跡する JSON ファイルです。

設定内のすべてリソースが破棄された後も、ステートファイルは削除されません。代わりに、管理するリソースがなくなったことを反映するように更新されます。ステートファイル内の resources 配列は空になります。

ステートファイルの内容を確認してみましょう。cat コマンドを使用して表示します。

cat terraform.tfstate

出力は JSON オブジェクトになります。resources キーが空の配列 [] を指していることに注目してください。

{
  "version": 4,
  "terraform_version": "1.13.3",
  "serial": 3,
  "lineage": "f25aaab8-c186-2b16-1bae-fe9ba25f81e4",
  "outputs": {},
  "resources": [],
  "check_results": null
}

これにより、Terraform の観点から、この設定の下で管理されているリソースがもはや存在しないことが確認されます。ステートはこれでクリーンになりました。

まとめ

この実験(Lab)の完了、おめでとうございます!Terraform によって管理されているインフラストラクチャを破棄するプロセスを正常に完了しました。

この実験(Lab)では、以下のことを学びました。

  • 意図しない削除を防ぐために、terraform plan -destroy で変更をプレビューすることの重要性。
  • 破壊プランのサマリーとリソースレベルの変更に注意を払いながら、破壊プランを読み解く方法。
  • 必要な確認ステップを経て、terraform destroy コマンドを使用してリソースの破壊を実行する方法。
  • 実際のシステムと Terraform ステートファイル (terraform.tfstate) の両方を確認することで、リソースが正常に破棄されたことを検証する方法。

リソース作成を習得するのと同じくらい、破棄ワークフローを習得することは重要です。これにより、インフラストラクチャのライフサイクル全体をクリーンかつ安全に管理できるようになります。