こんにちは。インフラの深淵を覗き込み、自動化の美学を追求する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管理画面を見て「ああ、今日も自動で綺麗になっているな」とコーヒーを飲む。そんな余裕のあるエンジニアライフが、すぐそこまで来ていますよ。