Удалите файлы старше X дней из хранилища BLOB-объектов Azure с помощью функции Azure - PullRequest
1 голос
/ 05 июля 2019

Я хочу создать функцию Azure, которая удаляет файлы из хранилища BLOB-объектов Azure, когда последние изменения были старше 30 дней.Кто-нибудь может помочь или иметь документацию для этого?

Ответы [ 3 ]

3 голосов
/ 05 июля 2019

Предполагая, что тип вашей учетной записи хранения: General Purpose v2 (GPv2) или Blob Storage, вам на самом деле ничего не нужно делать самостоятельно.Хранилище Azure может сделать это за вас.

Вы будете использовать Blob Lifecycle Management и определите там политику для удаления больших двоичных объектов, если они старше 30 дней, а хранилище Azure позаботится об удалении за вас.

Подробнее об этом можно узнать здесь: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts.

2 голосов
/ 05 июля 2019

Вы можете создать функцию запуска по таймеру, извлечь список элементов из контейнера BLOB-объектов и удалить файлы, которые не соответствуют вашим критериям даты последнего изменения.

  1. Создать таймер Функция триггера .
  2. Извлечение списка BLOB-объектов с помощью CloudBlobContainer .
  3. Приведение элементов BLOB-объектов к нужному типу и проверка свойства LastModified .
  4. Удалите BLOB-объект , который не соответствует критериям.

Я надеюсь, что ответ на вопрос.

1 голос
/ 05 июля 2019

Я использовал HTTP в качестве триггера, так как вы его не указали, и его проще протестировать, но логика будет такой же для триггера по таймеру и т. Д. Также предполагается, что C #:

[FunctionName("HttpTriggeredFunction")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    [Blob("sandbox", Connection = "StorageConnectionString")] CloudBlobContainer container,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    // Get a list of all blobs in your container
    BlobResultSegment result = await container.ListBlobsSegmentedAsync(null);

    // Iterate each blob
    foreach (IListBlobItem item in result.Results)
    {
        // cast item to CloudBlockBlob to enable access to .Properties
        CloudBlockBlob blob = (CloudBlockBlob)item;

        // Calculate when LastModified is compared to today
        TimeSpan? diff = DateTime.Today - blob.Properties.LastModified;
        if (diff?.Days > 30)
        {
            // Delete as necessary
            await blob.DeleteAsync();
        }
    }

    return new OkObjectResult(null);
}

Редактировать - Как загрузить файл JSON и десериализовать в объект, используя Newtonsoft.Json:

public class MyClass
{
    public string Name { get; set; }
}

var json = await blob.DownloadTextAsync();
var myClass = JsonConvert.DeserializeObject<MyClass>(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...