[アップデート]Terraform Cloudにリソースの自動削除ができるephemeral workspaces機能が追加されました

2023.08.23

アップデート概要

Terraform CloudのWorkspaceの設定に自動削除の項目が追加されました。

Workspaceに削除日を指定することで、自動でWorksapceのリソースを削除する機能です。 (指定時間になるとDestroy用のRunが実行される)

この機能を使って削除日を指定しておくことで、削除忘れを防止することができます。

Terraform ephemeral workspaces public beta now available

Infrastructure and security releases open HashiConf 2023

この機能を試すには、Terraform Cloud Plusプランが必要です。(2023/8時点)

何が嬉しい

  • リソース自動削除によるコスト削減、セキュリティの向上
  • リソース自動削除の仕組みを作り込み不要で利用できる
  • Destroy用のRunとして実行されるため、通知の設定も簡単(TFCの機能を使える)

「検証用に一時的にリソースを作っていて、消し忘れて課金が発生した」という経験がある方は多いのではないでしょうか。

また、一時的なリソースはすぐに削除するため、セキュリティ的に緩い設定になってしまっていることもあります。(セキュリティグループで必要以上に許可範囲を広くする等)

消し忘れて放置していると、セキュリティリスクになります。

一時的なリソースを自動削除することは、上記のようなコストやセキュリティの問題の解決策の一つです。

しかし、この機能を自前で構築・運用するのはそれなりに大変です。

Terraform Cloudのephemeral workspacesを使えば、自前で構築・運用不要で一時的なリソースの自動削除を実現できます。

Terraform Cloudの他の機能とも組み合わせることができます。

例えば、Terraform Cloudには通知機能があります。

この機能と組み合わせれば、自動削除の成功・失敗時にSlack通知するなども簡単にできます。

Notifications - Workspaces - Terraform Cloud | Terraform | HashiCorp Developer

検証結果まとめ

  • Terraform Cloud実行モードはRemoteの必要がある
  • 指定時間にDestroy用のRunが実行される
  • 削除はリソースのみでWorkspace自体は削除されない
  • 削除日の指定方法は以下
    • 年/月/日/時/分の設定が可能
    • 絶対指定のみで相対指定はできない
    • 繰り返しは指定できない(例: 毎週月曜日に削除等)
    • タイムゾーンはローカルが自動で設定される(UTCとか他のタイムゾーンを設定する方法は見つけられなかった)

やってみた

Workspaceを用意してリソースを作成し、自動削除の機能を使ってリソースが削除されることを確認します。

検証用Workspace作成

テスト用にWorkspaceを作ります。

以下のtfファイルを用意します。SQSキューを作成するという内容です。

main.tf

provider "aws" {
  region = "ap-northeast-1"
}
terraform {
  cloud {
    workspaces {
      name = "sato-epehemeral-workspace-test"
    }
  }
}

resource "aws_sqs_queue" "sqs_queue" {
  name = "sato-epehemeral-workspace-test"
}

terraform initを実行して、Workspaceを作成します。

$ export TF_CLOUD_ORGANIZATION="Organization名"
$ terraform init

Terraform Cloudを確認すると、cloudブロックで設定した名前でWorkspaceが作成されています。

ephemeral workspacesはリモート上でリソースを削除します。

そのため、Terraform Cloudにはリソースを操作するための権限が必要です。

任意の方法でWorkspaceに対して、認証情報をセットしてください。 (今回は、Variablesで事前に用意したIAM Roleを指定しています。)

リソースの作成

上記の設定ができたら、Terraform CloudでAWSリソースを作成可能になります。

Workdspaceのサイドバー -> Runs -> Start Runまたは、ローカルでterraform applyを実行します。

実行後にRunsを確認してみると、Applyが成功していることを確認できました。

AWS CLIでリソースの作成を確認します。

$ aws sqs list-queues --queue-name-prefix sato-epehemeral-workspace-test
{
    "QueueUrls": [
        "https://sqs.ap-northeast-1.amazonaws.com/1234567890/sato-epehemeral-workspace-test"
    ]
}

tfファイルで定義したSQSキューが作成されていました。

自動削除の設定

自動削除を試していきます。

Workspaceのサイドバー -> Settings -> Destruction and Deletionを選択します。

Automatically destroyを選択します。

削除を実行する時間を設定します。

指定方法に関しては以下です。(2023/8時点)

  • 年/月/日/時/分の設定が可能
  • 絶対指定のみで相対指定はできない
  • 繰り返しは指定できない(例: 毎週月曜日に削除等)
  • タイムゾーンはローカルが自動で設定される
    • UTCとか他のタイムゾーンを設定する方法は見つけられなかった

自動削除の確認

上記の設定を完了すると、Overviewからいつ自動削除が実行されるか表示されるようになります。

指定した時間になると、RunsからDestroyが実行されていることを確認できました。

おわりに

Terraform Cloudのephemeral workspacesについてでした。

自動削除を簡単に実現できるようになりました。検証時に積極的に使っていきたい機能です。

現時点では、削除日の絶対指定のみで相対指定や繰り返し設定はサポートされていません。

サポートされると、「毎週金曜日の夜に自動削除」のような事もできて便利そうです。

また、Project単位で設定可能になれば、Workspaceごとに一括設定ができるようになって管理が楽そうです。

すでにとても便利な機能ですが、今後のアップデートも楽しみですね。

以上、AWS事業本部の佐藤(@chari7311)でした。