自動化クラウド

Ephemeral workspacesを使ったリソース管理の効率化

Terraform の ephemeral workspaces を使ったリソースの管理方法について紹介します。

Ephemeral workspacesとは、Terraformで作成したリソースの自動削除を行う機能で、Terraform EnterpriseまたはHCP Terraform Plusでお使いいただけます。

Ephemeral workspacesには、3つの利点がございます。

  • コストの節約
    リソースの消し忘れによるクラウド利用料の上昇を防ぎます。また、未使用リソースの確認や手動削除といった管理コストを抑えることができます。
  • 業務の効率化
    GUIやAPIでワークスペース内のリソースに有効期間 (time-to-live (TTL)) を設定できるため、リソース管理やテストといった業務の効率化が期待できます。
  • セキュリティの向上
    テスト終了後等にリソースが放置され続けることによるセキュリティリスクの削減が期待できます。

Ephemeral workspacesは、GUIで設定を行えますがIaC化することも可能です。本ブログでは、GUIによる設定IaC化の設定方法について解説します。

GUIを使った設定

GUIから設定する方法を説明します。設定の前に、Terraform GUIにログインし、ワークスペースを作成してください。Ephemeral Workspaceの設定をするには、そのワークスペースに対してadmin権限が必要です。
GUIを使った設定の詳細につきましては、以下のページもご確認ください。

① ワークスペーストップページのサイドメニューから [Settings] > [Destruction and Deletion] をクリックします。

② Automatically destroy に移動したら [Set up auto-destory] をクリックします。Ephemeral Workspace は、「Automatically destroy」で設定します。

③ 自動削除が動作する日時を設定します。ここでは、以下のように設定し [Confirm auto-destroy] をクリックします。

  • Destroy at spacific time を選択
  • Timeframe は Custom を選択
  • Date は 2024/8/19 20:00 を選択

④ 自動削除が動作する日時が下図のように設定されます。

⑤ 必要に応じて通知を設定します。下図の場合は、以下のタイミングで通知されます。

  • 削除実施の24時間前と12時間前 (Auto-destroy reminder)
  • 削除終了時 (Auto-destroy results)

注意
destroy が動作すると Automatically destroy の設定は消えるので再度設定します。

IaC化する場合の設定手順

Automatically destroy の設定を Iac 化する方法を説明します。IaC化する場合は、Ephemeral workspacesを設定するワークスペースをTerraformのリソースとして定義します。

(1) コードの作成

① Terraformブロックを定義します。ここでは、管理用のワークスペース、プロジェクトを定義します。

terraform {

  cloud {
    organization = "Test_Organization"
    workspaces {
      name    = "Ephemeral-Workspace-base"
      project = "Ephemeral-Project-base"
    }
  }

  required_providers {
    tfe = {
      source  = "hashicorp/tfe"
      version = "0.56.0"
    }
  }
}

今回は、tfeプロバイダーを使いワークスペースの設定を行いますので、required_providers でtfeプロバイダーを指定します。
tfeプロバイダーの詳細は、以下のページをご確認ください。
https://registry.terraform.io/providers/hashicorp/tfe/latest
tfe プロバイダーには、Ephemeral workspacesの作成以外の機能もございますので、別の機会に紹介できればと思います。

② provider ブロックに使用するプロバイダーについて設定します。

provider "tfe" {
}

tfe プロバイダーにはTerraformのオーガニゼーションにアクセスするためのトークンを設定します。今回は、(4)環境変数の設定 でトークンを設定するので、ここでは何も設定しません。


③ tfe_project を使って作成するプロジェクトについて設定します。

resource "tfe_project" "my-project" {
  organization = var.organization
  name         = "Staging-Project"
}

ここでは、以下の設定を行います。

  • organization
    オーガニゼーション名を設定します。ここでは、organization 変数にオーガニゼーション名を設定します。
  • name
    作成するプロジェクト名を設定します。④で作成するワークスペースが所属するプロジェクトを設定します。

④ tfe_workspace を使って作成するワークスペースについて設定します。

resource "tfe_workspace" "my-workspace-01" {
  name            = "Staging-Workspace-01"
  organization    = var.organization
  project_id      = tfe_project.my-project.id
  auto_destroy_at = "2024-08-25T11:59:59Z"
}

ここでは、以下の設定を行います。

  • name
    作成するワークスペース名を設定します。ここで作成するワークスペースにリソースの自動削除を設定します。
  • organization
    ワークスペースが所属するオーガニゼーションを設定します。ここでは、organization 変数に対象にオーガニゼーションを設定します。
  • project_id
    ワークスペースが所属するプロジェクトのIDを設定します。tfe_projectが作成したプロジェクトのIDを設定します。
  • auto_destroy_at
    リソースが削除される日時をUTCで設定します。ここでは、2024/8/25 20:59:59 (JST) にリソースを削除します。

(2) Initの実行
terraform init を実行します。ワークスペースが初期化され (1)-① で設定した以下のプロジェクトおよびワークスペースが作成されます。

  • Ephemeral-Project-base
  • Ephemeral-Workspace-base


(3) トークンの作成
Terraformのオーガニゼーションにアクセスするためのトークンを作成します。ここで作成したトークンは、(4)環境変数の設定 で使用します。

① HCP Terraform または Terraform EnterpriseのGUIにログインします。ここでは管理者ユーザでログインします。

② ユーザーアイコンを展開して [Account settings] をクリックします。

③ Account Settingsメニューの [Tokens] をクリックします。

④ Tokens の [Create an API token] をクリックします。

⑤ Description にトークンを識別するための説明、Expiration にトークンの有効日数を設定して [Generate token] をクリックします。ここでは、有効期間が30日の 20240819_TFE_TOKEN というトークンを作成します。

注意
トークンには自動更新機能が有りませんので、定期的にトークンを作りなおすか有効期限がないトークンを作成します。


⑥ コピーボタンをクリックしてトークンをコピーします。


(4) 環境変数の設定
本手順を実行する前に、(3) トークンの作成 の手順でトークンを作成します。
(2) のterraform initにより作成された Ephemeral-Workspace-base ワークスペースに TFE_TOKEN 環境変数を設定します

① ワークスペーストップページのサイドメニューから [Variables] をクリックします。

② Workspace variables の [Add variable] をクリックします。

③ 以下のように設定し [Add variable] をクリックします。

  • Environment variable にチェック
  • Key に TFE_TOKEN と設定
  • Value に (3)-⑥ でコピーしたトークンを設定
  • Sensitive にチェック

(5) Planの実行
terraform plan を実行します。実行結果の出力から (1)-③、④で設定した以下のプロジェクトおよびワークスペースが作成されることを確認します。

  • Staging-Project
  • Staging-Workspacei-01

(6) Applyの実行
terraform apply を実行します。Applyが終了すると以下のプロジェクトおよびプロジェクトが作成されます。

  • Staging-Project
  • Staging-Workspacei-01

Staging-Workspacei-01 ワークスペーストップページのサイドメニューから [Settings] > [Destruction and Deletion] の [Automatically destroy] に移動し、削除日時が 2024/8/25 20:59:59 (JST) に設定されてていることを確認します。

今回ご紹介した記事がお役に立てれば幸いです。

この記事に関連する製品・サービス