Azure Backupを使った研修が終わった後、一部のRecovery Services コンテナーが消せずに残ってしまいました。
削除用のスクリプトを使うことでRecovery Services コンテナー自体は消せたのですが、リージョンごとに作成された復元ポイント コレクションが残ってしまいました。
これを消すのに苦労したのでメモを残しておきます。
※ なお、本手順は、あくまで研修用途で一時的に利用したAzure Backupのデータを削除するために調べた内容です。本番運用で利用しているAzure Backupのデータを削除する場合は、慎重に行ってください。本番運用環にて本手順の操作を使った復元ポイント コレクションの削除を行う可能性は低いと考えられます。
発生していた状況
研修後、リソースグループごとリソースを削除していたのですが、一部Recovery Services コンテナーが残ってしまいました。*1
Recovery Services コンテナー の削除自体はAzureポータルで生成されるスクリプトを使って実行できたのですが…
リージョンごとに自動生成されたリソースグループが残ってしまっています。
中を見ると、復元ポイント コレクションが保存されています。
少なくとも手動では削除できず、削除方法を模索しました。
削除時のエラー
Azure Portalから復元ポイントコレクションを削除する
「復元ポイント コレクションの削除失敗」と出るのですが、クリックすると…
「リソースが見つかりませんでした」と出てしまいます。
Azure Portalから復元ポイントを削除する
先に復元ポイントコレクション内の復元ポイントを削除しようとすると…
やはり「リソースが見つかりませんでした」と出てしまいます。
PowerShellから復元ポイントコレクションを削除する
以下のコマンドレットを実行します。
$ResourceGroupName = "リソースグループ名" $RestorePointCollectionName = "復元ポイント コレクション名" $RestorePointName = "復元ポイント名" Remove-AzRestorePointCollection -ResourceGroupName $ResourceGroupName -Name $RestorePointCollectionName
エラーになりますが、Azure Portalでの実行時よりは情報が得られます。
There is an active shared access signature outstanding for disk restore point xxxxx-xxxxx-xxxxx.
なお、Remove-AzRestorePoint
も実行しましたが、得られる結果はRemove-AzRestorePointCollection
と同じものだったので割愛します。
解決方法
調べた限りでは、この"shared access signature outstanding for disk restore point"をAzure PortalやPowerShellで削除する方法が見つかりませんでした。
ではどうするかというと、Azure REST APIを使用します。
解決の前に
その前に、この後に出てくる用語を整理しておきます。
- Restore Point Collection(復元ポイント コレクション)
- Restore Point(復元ポイント)
- Disk(ディスク)
- Disk Restore Point
並列に書きましたが、実際には階層構造になっています。
- Restore Point Collection
- Restore Point
- Disk
- Disk Restore Point
- Disk
- Disk Restore Point
- Disk
- Restore Point
Azure Portalの構造と関連付けます。
今回、仮想マシン自体もすでに削除しており、ディスクの実態がありません。なのでAzure PortalではRestore Pointまでしかたどれません。
Disk Restore Pointの名前を取得する
Azure REST APIでDisk Restore Pointへのアクセスを削除するには、Disk Restore Pointの名前が必要になります。
これを少なくとも今回のケースではAzure Portal上から取得することができないので、Disk Restore Pointの名前自体もAzure REST APIで取得します。
こちらを利用します。
今回は「使ってみる」でブラウザ上から実行してみます。
パラメーターを入力します。大体見れば分かるのですが、vmRestorePointName
だけ一瞬悩みました。
パラメーター名 | Azureポータル上の確認場所 |
---|---|
restorePointCollectionName | Restore Point Collection(復元ポイント コレクション)の名前 |
vmRestorePointName | Restore Point(復元ポイント)の名前 |
実行結果のname
を控えておきます。複数表示される場合もあります。
Disk Restore Pointを取り消す
これでDisk Restore Pointの名前がわかったので、shared access signatureを取り消していきます。
こちらを使います。
入力する値のうち、復元ポイント コレクション関連のものを表にしておきます。
パラメーター名 | 確認場所 |
---|---|
restorePointCollectionName | AzureポータルのRestore Point Collection(復元ポイント コレクション)の名前 |
vmRestorePointName | AzureポータルのRestore Point(復元ポイント)の名前 |
diskRestorePointName | Azure REST APIで調べたDisk Restore Pointのname |
Response Code: 202が返ってきます。
これで取り消しは成功です。Disk Restore Pointが複数ある場合はそれぞれ実行します。
復元ポイント コレクションを削除する
すべてのDisk Restore Pointを取り消した後は、復元ポイント コレクションを削除できます。
おわりに
かなり苦戦したのですが、何とか削除ができました。
出来ましたが、数がそれなりにある場合はRESTを実行できるスクリプトなどで処理をするか、Logic Appsなりを使ってあげる必要がありそうです。
かなりニッチな内容だと思いますが、同じトラブルで困った方のお力になれれば幸いです。
*1:おそらく、手順の中で指示していた論理削除無効化を見落としていたのだと思います
舟越 匠(日本ビジネスシステムズ株式会社)
人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。2024年8月からキーマンズネットでPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。
担当記事一覧