環境
- OS: win32 x64
参照
前回の記事の続き
https://qiita.com/yuuton8823/items/a690a7e15343d781bf97
👆でStorageに保管されているコンテナを取得しました。
取得コンテナの最終更新日時を参照すれば定期的に削除が行えるようになります。
今回はその定期削除を実装していきます。
Functions
ソリューションのパッケージの監理
以下インストールしておく。
- Microsoft.Azure.Storage.Blob
- Microsoft.NET.Sdk.Functions
- Microsoft.Azure.Functions.Extensions
Timer Trigger
毎日走らせたいので、TimerTriggerを"0 0 0 * * *"に設定する。
CRON式なので慣れていない人は注意が必要です。
コンテナの最終更新日時と比較するためにトリガー発生時刻を格納する変数も用意する。
[FunctionName("Function1")]
public async Task RunAsync([TimerTrigger("0 0 0 * * *")]TimerInfo myTimer, ILogger log)
{
//トリガー発生時刻
DateTime deleteDay = DateTime.UtcNow;
// *** 省略 ***
}
変数用意
コンテナの生存期間を設定する。
取得したコンテナの最終更新日時とトリガー発生時刻の差をとり、それが生存期間より大きいならばコンテナを削除する。
//生存期間(7日0時間0分0秒)
static TimeSpan deleteLimit = new TimeSpan(7, 0, 0, 0);
削除処理
引数にblobClientと取得したコンテナ名を設定する。
Azure.Storage.Blobパッケージを使用してコンテナを削除する。
private static async Task<bool> DeleteAsync(string containername, CloudBlobClient blobClient)
{
CloudBlobContainer deletecontainer = blobClient.GetContainerReference(containername);
return await deletecontainer.DeleteIfExistsAsync();
}
取得コンテナリストを定期削除するロジック
foreachの中でcontainerリストをまわして、containerのLastModified(最終更新日時)プロパティを参照する。
if で(deleteDay - lastModifiedTime > deleteLimit) を行い、true時のみ削除処理を行うようにすればオッケー。
//対象のコンテナを削除
foreach (CloudBlobContainer container in containers)
{
string containerName = container.Name;
DateTimeOffset? lastModifiedTime = container.Properties.LastModified;
if (containeNname.Contains("azure") == false)
{
//生存期間を超過している場合は削除
if (deleteDay - lastModifiedTime > deleteLimit)
{
var isDeletedSuccessfully = await DeleteAsync(containerName, blobclient);
if (isDeletedSuccessfully)
{
_fileTransferLogService.InsertDeleteLog(containerName);
}
}
}
}
実装したら発行して確認してみよう。
まとめ
Azure Functions 皆も使ってみよう!