Azure Automation で毎日不要なリソースグループを自動削除する
この記事の内容
- Azure のリソースグループ名に
tmpプレフィックスをつけるルールを設けることで、一時リソースを管理しやすくする - Azure Automation の Runbook に PowerShell スクリプトを書き、
tmpから始まるリソースグループを自動削除する - Managed ID(システム割り当て済み)を使ってセキュアに認証する
- スケジュール設定で毎日決まった時刻に自動実行させる
-AsJobフラグを使ってコストを抑える Tips を紹介する
はじめに
Microsoft MVP として提供されているサブスクリプションでは、さまざまな検証・実験を日々行います。「作っては消して、作っては消して」という繰り返しの中で、消すべきリソースと消したくないリソースが混在してわからなくなりがちです。
そこで、すぐに消してよいリソースグループには名前の先頭に tmp をつけるというルールを設けました。そして、その tmp から始まるリソースグループを Azure Automation で毎日自動削除する仕組みを構築しています。本記事ではその構成と手順を紹介します。
命名ルール:tmp プレフィックスで一時リソースを識別する
検証用など短命なリソースグループを作成する際は、名前の先頭に tmp をつけます。
このルールを徹底しておくことで、「削除対象かどうか」を名前だけで判断できるようになります。
Azure Automation の構成
Automation アカウントと Runbook の準備
Azure Automation アカウントの中に、Runbook を作成します。今回の Runbook 名は Remove-TmpResourceGroups としています。
PowerShell スクリプトの内容
Runbook に記述する PowerShell スクリプトは以下の通りです。
# Managed ID で認証
Connect-AzAccount -Identity
# tmp から始まるリソースグループをすべて取得
$groups = Get-AzResourceGroup -Name "tmp*"
# バックグラウンドで強制削除
foreach ($group in $groups) {
Remove-AzResourceGroup -Name $group.ResourceGroupName -Force -AsJob
}
-AsJob を使う理由
Remove-AzResourceGroup に -AsJob をつけると、削除処理がバックグラウンドで実行されます。これをつけない場合、すべてのリソースグループの削除が完了するまで PowerShell スクリプトが実行され続けるため、Automation の実行時間が長くなりコストがかかってしまいます。-AsJob をつけることで、スクリプト自体はすぐに終了し、削除はバックグラウンドで進む形になります。
前提条件:Managed ID と権限設定
システム割り当て済み Managed ID を有効にする
Automation アカウントの設定で、システム割り当て済み Managed ID をオンにします。
サブスクリプションへの権限付与
Managed ID に対して、Azure のロール割り当てを行います。
- スコープ: サブスクリプション
- ロール: 共同作成者(Contributor)
サブスクリプションレベルで共同作成者の権限を持つことで、リソースグループの削除操作が可能になります。
スケジュール設定
Runbook にスケジュールをリンクさせることで、毎日自動実行させます。
- 実行頻度: 毎日
- 実行時刻: 午前 3:00(Japan Standard Time)
このスケジュールで実行することで、前日に作成した tmp リソースグループが翌朝には自動的に削除されている状態になります。
運用上の注意点と使い分け
意図せず削除されるリスク
tmp プレフィックスをつけたリソースグループは毎日削除されます。「しばらく保持したいが、いずれは消してもよい」というケースでは誤って削除される恐れがあります。
使い分けの例
検証が1日では終わらない場合など、一時的に保持したい場合は、プレフィックスを変えて管理します。たとえば x_tmp のようなプレフィックスをつけることで、自動削除の対象から外しつつ、後から手動で削除する対象として識別できます。
まとめ
Azure Automation を使った tmp リソースグループの自動削除は、非常にシンプルながら効果的な運用改善です。ポイントをまとめると以下の通りです。
- リソースグループ名に
tmpプレフィックスをつけるルールを徹底する - Automation Runbook の PowerShell スクリプトで
Get-AzResourceGroup -Name "tmp*"を使って対象を絞り込む Remove-AzResourceGroupに-Force -AsJobをつけることで、コストを抑えつつ強制削除する- Managed ID とサブスクリプションの共同作成者権限を組み合わせてセキュアに認証する
- 毎日早朝のスケジュール実行で、消し忘れを防ぐ
この仕組みを導入することで、手動での削除作業から解放され、リソースの消し忘れによる無駄なコストも防ぐことができます。同様の課題を抱えている方はぜひ試してみてください。