はじめに:検証環境が「魔境」になっていませんか?
自由な検証ができるAWS環境はエンジニアにとって楽園ですが、いつの間にか以下のような「魔境」になりがちかなと思います。
「誰が・何の目的で作ったか不明」な高額リソースの放置。
「これ、消しても大丈夫ですか?」という確認がSlackのあちこちで発生。
気づけば、使っていないリソースのために毎月数万〜数十万円のコストが発生。
こうした「確認のコスト」と「心理的な消しにくさ」を解決するために、サーバーレスで動くお掃除ツール「すっきりん」を開発してみました!!!
ツール概要:リソース掃除機「すっきりん」
「すっきりん」は、aws-nukeを核に、LambdaとSlackを組み合わせた自動クリーニングツールです!
主なルール(動き)
・利用期限の管理: ExpirationDate タグをチェックし、期限を過ぎたものは削除対象へ。
・いきなり消さない: 事前にSlackへ通知し、人間が「削除実行」ボタンを押して初めて実行されます。
※aws-nukeとは、AWSアカウント内のリソースを全削除するためのOSSツールになります。
◾️システム構成

⚒️使用技術
AWS Lambda: 実行基盤。削除用Lambdaは aws-nuke を含めたコンテナイメージ(ECR)を使用。
EventBridge: 定期実行のトリガー。
API Gateway: Slackからの承認ボタンのレスポンスを受信。
Slack API: 通知およびインタラクティブボタンの提供。
◾️動作の流れ:スキャンから削除まで
1. スキャン & 自動タグ付け(Python Lambda)
EventBridgeをトリガーに、まずはリソースの状態をチェックします。
ExpirationDate(利用期限)を現在時刻と比較。
削除対象と判定されたものに target: true というタグを付与します。
2. Slackへの「予告」通知
スキャン結果をSlackに通知します。ここでは「Dry Run(削除シミュレーション)」の結果を表示するのがポイントです。
3. 承認と実行(aws-nuke on Lambda)
管理者がSlackの「削除実行」ボタンを押すと、API Gateway経由で削除用Lambdaが起動。 強力な削除ツールである aws-nuke が、タグフィルタリングに基づいて対象リソースを一気にクリーンアップします。
◾️こだわり
通常、EC2やS3、RDSなどのリソースを操作する場合、それぞれのサービス固有のAPI(describe_instances や list_buckets など)を個別に呼び出す必要があります。しかし、これでは対象サービスが増えるたびにコードが肥大化してしまいます。
そこで「すっきりん」では、AWS Resource Groups Tagging API を活用しています。
# タグ操作用のクライアントを生成
tagging_client = boto3.client('resourcegroupstaggingapi', region_name=target_region)
# 1. ExpirationDate タグが付いているリソースを全サービスから検索
response = tagging_client.get_resources(
TagFilters=[{'Key': 'ExpirationDate'}],
ResourcesPerPage=100
)
# 2. 日付判定を行い、期限切れならリストに追加
for resource in response['ResourceTagMappingList']:
resource_arn = resource['ResourceARN']
tags = {t['Key']: t['Value'] for t in resource['Tags']}
exp_date = tags.get('ExpirationDate') # 例: 20251127
if exp_date and int(exp_date) < today:
resources_to_tag.append(resource_arn)
# 3. 最大20件ずつバッチで一括タグ付け
tagging_client.tag_resources(
ResourceARNList=batch_arns,
Tags={'target': 'true'}
)
ResourceGroupsTaggingAPIを参考にしました!
◾️実際にSlackに届く通知
削除対象のリソース一覧

削除実施後の結果通知
