【入門編】Terraformで構築する「検証用サンドボックス」の自動クリーンアップ:TTL付きインフラの作成とリソース削除のライフサイクル管理 – インフラ構成管理(IaC)活用バイブル

こんにちは。インフラの深淵を覗き込み、自動化の美学を追求するSREエンジニアです。

今日は、多くのチームが抱える「放置された検証環境」という名の負債を、Terraformを使って根本から解決する話をしましょう。

検証用サンドボックスは便利ですが、「作りっぱなしで忘れ去られ、無駄なコストを垂れ流すゾンビ環境」になりがちです。これを手作業で掃除するのは、伝説のエンジニアの仕事ではありません。仕組みで解決するのです。

今日は「Terraform × TTL(生存期間)」というアプローチで、「自動的に消える検証環境」の作り方を伝授します。

—

1. なぜ「TTL(生存期間)」が必要なのか?

インフラ構成管理(IaC)において、もっとも大切なのは「再現性」です。しかし、検証環境においては「消し忘れの防止」が再現性以上に重要になります。

今回目指すのは、「リソースに寿命(TTL)を刻印し、寿命が尽きた瞬間に自動で葬り去る」仕組みです。

2. 戦略:タグ付けによるライフサイクル管理

Terraformでリソースを定義する際、必ず以下のタグを付与します。

  • `Environment`: `sandbox`
  • `DeleteAt`: `2023-12-31T23:59:59Z` (削除予定時刻)
  • `Owner`: `誰か`

この`DeleteAt`タグが、いわば「死の宣告日」です。あとは、このタグを監視し、時刻が過ぎたものを削除する「死神(クリーンアップスクリプト)」を仕込めばいいのです。

—

3. Terraformによる実装(HelloWorld)

まずは、AWSのS3バケットを例に、「自動削除タグ付きリソース」を作成しましょう。

provider.tf
provider “aws” {
region = “ap-northeast-1”
}

sandbox_resources.tf
resource “aws_s3_bucket” “sandbox_bucket” {
bucket = “my-awesome-sandbox-bucket-12345”

# ここが肝!タグに寿命を埋め込む
tags = {
Name = “Temporary-Sandbox”
Environment = “sandbox”
# 現在時刻 + 24時間後を計算して設定するのがベスト
DeleteAt = “2024-05-20T10:00:00Z”
}
}

このコードを `terraform apply` すると、AWS上には「いつ消すべきか」というメタデータを持ったリソースが誕生します。

—

4. 自動削除の実行エンジン:EventBridge × Lambda

さて、ここからがSREの腕の見せ所です。このリソースを消すために、EventBridgeで定期実行ジョブを組みます。

1. EventBridge Rule: 毎時0分にトリガー。
2. Lambda: AWS SDK(boto3)を使い、全リソースをスキャン。
3. ロジック: `DeleteAt` タグを読み取り、現在時刻を超えていれば `delete` APIを叩く。

クリーンアップ用Pythonスクリプト(Lambda用)

import boto3
from datetime import datetime, timezone

def lambda_handler(event, context):
ec2 = boto3.client(‘ec2’)
now = datetime.now(timezone.utc)

# 全インスタンスを取得し、タグをチェック
instances = ec2.describe_instances()
for reservation in instances[‘Reservations’]:
for instance in reservation[‘Instances’]:
tags = {t[‘Key’]: t[‘Value’] for t in instance.get(‘Tags’, [])}

# DeleteAtタグがあり、かつ時刻を過ぎているか判定
if ‘DeleteAt’ in tags:
delete_time = datetime.fromisoformat(tags[‘DeleteAt’].replace(‘Z’, ‘+00:00’))
if now > delete_time:
print(f”Deleting instance: {instance[‘InstanceId’]}”)
ec2.terminate_instances(InstanceIds=[instance[‘InstanceId’]])

—

5. これをマスターすると何が起きるのか

この仕組みを導入すると、あなたのチームに以下の変化が訪れます。

  • コストの最適化: ゾンビ環境が自動で消えるため、無駄な請求がなくなります。
  • 心理的安全性の向上: 「環境を壊してもいい」という前提が共有されるため、エンジニアが大胆に検証を行えるようになります。
  • クリーンなインフラ: 手動で掃除をする必要がないため、常に最新のコードで環境を再構築する文化が根付きます。

最後に:自動化は「責任」の移譲である

自動削除を導入するということは、「インフラの面倒を人間が見る必要性をなくす」という設計思想を持つことです。

最初は怖がるかもしれません。「大事な環境が消えたらどうしよう」と。しかし、IaCの真髄は「いつでもコードから復元できる」ことにあります。消えることを恐れるのではなく、「いつでも消せる状態を維持すること」こそが、最高峰のインフラエンジニアへの第一歩です。

さあ、今日からあなたのサンドボックスに「寿命」を吹き込んでみてください。毎朝、AWS管理画面を見て「ああ、今日も自動で綺麗になっているな」とコーヒーを飲む。そんな余裕のあるエンジニアライフが、すぐそこまで来ていますよ。

タイトルとURLをコピーしました