マネージドIDを使ってblobのデータを消してみよう

はじめに

皆さんはマネージドIDはご存知でしょうか?
詳しくは以下のURLを参考にいただきたいですが、
簡単に申しあげますと
システムや共通のアカウント(のようなモノ)にAzureサブスクリプションの権限を付与して利用できるサービスです。
https://cloudsteady.jp/post/16563/
https://learn.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview

今回は具体的にマネージドIDを使ってAzureの作業を実施してみます。


シナリオ

blobストレージのファイルを削除するAutomationアカウントを作成します。
※blobストレージではライフサイクル管理と呼ばれる定期的にファイルを削除してくれる機能がありますが、ページblob等では適用されないため今回のように別途削除用のシステムを構築する必要があります




Automationアカウントの準備

今回はマネージドIDを使用するので、
デプロイ時にシステム割り当てにチェックを入れてデプロイしましょう

※既にある場合は
アカウント設定>ID
のシステム割り当て済みの状態をオンにしましょう


続いて、このシステム割り当てマネージドIDにサブスクリプションのロールを付与します。
今回はblobストレージの削除が目的なので、該当のストレージアカウントの
ストレージBLOBデータ共同作成者を割り当てます

割り当ては
以下の画像の通り、アカウント設定>ID
のアクセス許可から設定できます。

マネージドIDの準備ができました
続いて実際に削除するための設定を実施します。

今回はPowerShellスクリプトを使用するため、
Runbookの種類はPowershellにして作成します

Runbookの中身は以下です
Add-AzAccount -identity
$deletedays = 3

$ctx = New-AzStorageContext -StorageAccountName "<ストレージアカウント名>" -UseConnectedAccount

$containers = Get-AzStorageContainer -Context $ctx

Foreach ($container in $containers) {

	$blobfiles = Get-AzStorageBlob -Name $container.name -Context $ctx

	Foreach ($blobfile in $blobfiles) {

		$blobfilename = $blobfile.name
		if($blobfilename.indexof("/") -ne -1) {
			$date=$blobfilename.substring(0,$blobfilename.indexof("/"))
			$datetime = [DateTime]::ParseExact($date, "yyyyMMdd", $null)
			$days=New-TimeSpan $datetime (GET-Date)
			if($days.days -ge $deletedays){
				$blobfilename
		 		Remove-AzStorageBlob -Container $container.name  -Blob $blobfilename -Context $ctx
				
			}


		}
	}

}

上記のスクリプトはblobストレージのコンテナー配下に日付が切れられているフォルダを消していく動作となります($deletedaysの日数分前のフォルダを削除します)
例えば 実施日が2022年の11月30日で

・XXXXX/20221110/XXXX.txt
・XXXXX/20221130/XXXX.txt
といったファイルが保存されている場合
・XXXXX/20221110/XXXX.txt
が削除されます

また、今回マネージドIDを使用するのに当たり肝になるのが、冒頭の

Add-AzAccount -identity


です
こちらを記載することで、実施するマシン(この場合Automationアカウント)のマネージドIDを使用することができます。


実行する

テストを実施するため、ストレージアカウントのコンテナーに
以下のようにフォルダを切ってファイルを格納しました

実施日は11月30日です
上記のスクリプトは$deletedaysを3日しているため、
想定では20221115のみ削除されるはずです

それでは実施します


出力には削除されたファイルが表示されます
(20221115配下にはtest.txtを配置していました)


ファイル削除されていました


まとめ

マネージドIDを使ってPowerShellのスクリプトを実行しました。
Automationアカウントではスケジュールを組むことで、定期実行が可能です。
今回のようなスクリプトを時間指定で定期実行することでファイルの整理を行うことができます
また、今回作成したスクリプトは、イベントログなどのページブログで保存されてしまうファイルには有用ですので是非作成してみてください。



おまけ

マネージドIDに権限を付与していない場合以下のようなエラーが出ます

このことからも、マネージドIDを使用してスクリプトを実行していることがわかります

また、定期実行はスケジュールから設定可能です
いいね (←参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください