概要
Azure で未使用または孤立したリソースを管理することは、クラウド支出と運用効率に大きな影響を与える可能性があります。「Azure Resource Cleanup」ツールは、クラウド管理者が未使用または孤立した Azure リソースを特定し、削除するのを支援するために設計された包括的な PowerShell スクリプトであり、コストの最適化とリソース管理の改善を実現します。
このスクリプトは既定で、安全で非破壊的なレポート モードで動作し、管理者はクリーンアップ操作を開始する前に孤立したリソースを確認できます。
プロジェクトは GitHub で公開されています:AzureOpsScripts – Resource Cleanup。
目次
主な機能
Azure Resource Cleanup スクリプトは、次の機能を提供します:
- 孤立した NIC: VM またはエンドポイントにアタッチされていないネットワーク インターフェイスを特定します。
- 古い Azure ディスク スナップショット: 保持期間を超えたスナップショットを検出します。
- ストレージ アカウントの BLOB スナップショット: 定義された保持期間より古い BLOB スナップショットにフラグを付けます。
- ファイル共有スナップショット: 保持期間の制限を超えたファイル共有スナップショットを特定します。
- 孤立したマネージド ディスク: VM にアタッチされていないディスクを検出します。
- 孤立したパブリック IP: 未使用のパブリック IP アドレスを特定します。
- 未使用のネットワーク セキュリティ グループ: リソースに関連付けられていない NSG を特定します。
- 未使用の可用性セット: 使用されなくなった可用性セットを検出します。
- 空のリソース グループ: アクティブなリソースがないリソース グループにフラグを付けます。
- 未使用の仮想ネットワーク: 使用されていない可能性のある仮想ネットワークを強調表示します(強調表示のみで、スクリプトは削除しません)。
- 予約済みだが未使用の IP アドレス: 予約済みだがアクティブに割り当てられていない IP アドレスを特定します。
要件
Azure Resource Cleanup スクリプトを使用するには、次の前提条件が満たされていることを確認してください:
- PowerShell のバージョン: 5.1 以上
- Az PowerShell モジュール: 次のコマンドを使用してインストールします:
Install-Module -Name Az - Azure アカウントのアクセス許可: リソースを表示および削除するための適切なアクセス許可があることを確認してください。
使用方法
レポート モード
レポート モードでスクリプトを実行し、孤立したリソースの詳細なレポートを生成します:
.\Azure-Resource-Cleanup.ps1

クリーンアップ モード
特定されたリソースを削除するには、クリーンアップ モードを使用します:
.\Azure-Resource-Cleanup.ps1 -DeleteResources
スナップショットの保持期間をカスタマイズする
スナップショットの保持日数を指定し、クリーンアップ対象の古いスナップショットを特定します:
.\Azure-Resource-Cleanup.ps1 -SnapshotRetentionDays 7 -DeleteResources

ストレージ スナップショットのチェックを除外する
大規模な環境では、ストレージ アカウントの BLOB およびファイル共有スナップショットのチェックをスキップします:
.\Azure-Resource-Cleanup.ps1 -IncludeStorageSnapshots:$false
重要な注意事項
許可された仮想ネットワーク上で実行する
スクリプトは、許可された仮想ネットワーク内で実行してください。ネットワークの制限により、一部のストレージ アカウントでは、コンテナーやファイル スナップショットへのアクセスが禁止されている場合があります。ストレージ アカウントが削除操作をサポートしていない場合、これらのリソースをクリーンアップしようとするとエラーが発生する可能性があります。
開発/テスト環境でテストする
本番環境で使用する前に、開発環境またはテスト環境でスクリプトをテストすることを強く推奨します。これにより、スクリプトの動作を確認し、潜在的な問題を特定し、クリーンアップ対象としてフラグ付けされたリソースを検証できます。
レポートのみモードを使用する
本番環境では、必ずレポートのみモード(-DeleteResourcesパラメーターなし)でスクリプトを実行することから始めてください。これにより、孤立したリソースの詳細なレポートが提供され、クリーンアップ操作を開始する前にフラグ付けされた項目を確認・検証できます。
パラメータ
スクリプトは、カスタマイズ可能な複数のパラメーターをサポートしています:
| パラメーター | 種類 | 既定値 | 説明 |
|---|---|---|---|
SnapshotRetentionDays | Integer | 3 | スナップショットの保持期間(日数)。これより古いスナップショットは、クリーンアップ対象としてフラグ付けされます。 |
DeleteResources | Switch | $false | 特定されたリソースの削除を有効にします。既定では、スクリプトはレポートのみを行います。 |
IncludeStorageSnapshots | Switch | $true | BLOB およびファイル共有のスナップショット チェックを含みます。$falseに設定すると、これらのチェックが除外されます。 |
レポート出力
スクリプトは、タイムスタンプ付きのフォルダーに詳細なレポートを生成します。内容は次のとおりです:
orphaned_nics.csvold_managed_snapshots.csvold_blob_snapshots.csvold_fileshare_snapshots.csvorphaned_disks.csvorphaned_public_ips.csvorphaned_nsgs.csvunused_availability_sets.csvempty_resource_groups.csvunused_vnets.csvsubnet_ip_usage.csvcleanup_log.txt(実行されたアクションの包括的なログ)
ベスト プラクティス
- レポート モードから開始する: フラグ付けされたリソースを確認するため、必ず
-DeleteResourcesパラメーターを指定せずにスクリプトを実行してください。 - レポートを確認する: クリーンアップ操作を開始する前に、生成された CSV ファイルを慎重に分析してください。
- 保持期間を設定する: 組織のポリシーに基づいて、スナップショットの保持期間をカスタマイズします。
- 非本番環境でテストする: 本番環境で使用する前に、開発/テスト環境でスクリプトを実行し、動作を検証します。
- 許可された仮想ネットワーク上で実行する: ストレージ アカウントのクリーンアップ時にネットワーク関連のエラーが発生しないよう、スクリプトが許可された vNet 内で実行されることを確認してください。
ワークフローの例
次のワークフローに従って、Azure リソースを安全にクリーンアップしてください:
- レポート モードでスクリプトを実行します:
.\Azure-Resource-Cleanup.ps1 - 生成されたレポートを確認し、フラグ付けされたリソースを調べます。
- クリーンアップ モードに自信を持って進みます:
.\Azure-Resource-Cleanup.ps1 -DeleteResources