0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Storage BlobにあるBlobをAuzre Functionsで監視して定期削除する

Posted at

環境

  • 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 皆も使ってみよう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?