Sdílet prostřednictvím


Klientská knihovna azure WebJobs Storage Blobs pro .NET – verze 5.1.1

Toto rozšíření poskytuje funkce pro přístup k objektům blob služby Azure Storage v Azure Functions.

Začínáme

Instalace balíčku

Nainstalujte rozšíření Storage Blobs pomocí NuGetu:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage.Blobs

Požadavky

K použití tohoto balíčku potřebujete předplatné Azure a účet úložiště .

K vytvoření nového účtu úložiště můžete použít Azure Portal, Azure PowerShell nebo Azure CLI. Tady je příklad použití Azure CLI:

az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS

Ověření klienta

Aby rozšíření mohlo přistupovat k objektům blob, budete potřebovat připojovací řetězec, který najdete na webu Azure Portal nebo pomocí fragmentu kódu Azure CLI níže.

az storage account show-connection-string -g <your-resource-group-name> -n <your-resource-name>

Připojovací řetězec je možné zadat prostřednictvím nastavení aplikace AzureWebJobsStorage.

Klíčové koncepty

Použití triggeru objektu blob

Trigger úložiště objektů blob spustí funkci při zjištění nového nebo aktualizovaného objektu blob. Obsah objektu blob se poskytuje jako vstup do funkce.

V tomto kurzu se dozvíte, jak aktivovat funkci Azure Při změně objektu blob.

Strategie naslouchání

Trigger objektu blob nabízí několik strategií, pokud jde o naslouchání vytváření a úpravám objektů blob. Strategii lze přizpůsobit zadáním Source vlastnosti objektu BlobTrigger (viz příklady níže).

Výchozí strategie

Trigger objektu blob ve výchozím nastavení používá dotazování , které funguje jako hybrid mezi kontrolou protokolování analýzy služby Azure Storage a spouštěním pravidelných kontrol kontejnerů. Objekty blob se kontrolují ve skupinách po 10 000 najednou s tokenem pokračování, který se používá mezi intervaly.

Protokolování analýzy služby Azure Storage není ve výchozím nastavení povolené. Postup jeho povolení najdete v tématu Protokolování analýzy služby Azure Storage .

Tato strategie se nedoporučuje pro aplikace ve velkém měřítku nebo scénáře, které vyžadují nízkou latenci.

Event Grid

Události služby Blob Storage je možné použít k naslouchání změnám. Tato strategie vyžaduje další nastavení.

Tato strategie se doporučuje pro aplikace ve velkém měřítku.

Použití vazby objektů blob

Vstupní vazba umožňuje číst data úložiště objektů blob jako vstup do funkce Azure. Výstupní vazba umožňuje upravovat a odstraňovat data úložiště objektů blob ve funkci Azure Functions.

Pokud chcete získat informace o použití tohoto rozšíření pro přístup k objektům blob, postupujte podle kurzu vstupní vazby a kurzu výstupní vazby .

Příklady

Reakce na změnu objektu blob

Výchozí strategie

public static class BlobFunction_ReactToBlobChange
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob")] Stream blobStream,
        ILogger logger)
    {
        using var blobStreamReader = new StreamReader(blobStream);
        logger.LogInformation("Blob sample-container/sample-blob has been updated with content: {content}", blobStreamReader.ReadToEnd());
    }
}

Strategie Event Gridu

public static class BlobFunction_ReactToBlobChange_EventGrid
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob", Source = BlobTriggerSource.EventGrid)] Stream blobStream,
        ILogger logger)
    {
        using var blobStreamReader = new StreamReader(blobStream);
        logger.LogInformation("Blob sample-container/sample-blob has been updated with content: {content}", blobStreamReader.ReadToEnd());
    }
}

Čtení ze streamu

public static class BlobFunction_ReadStream
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob-1")] Stream blobStream1,
        [Blob("sample-container/sample-blob-2", FileAccess.Read)] Stream blobStream2,
        ILogger logger)
    {
        using var blobStreamReader1 = new StreamReader(blobStream1);
        logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", blobStreamReader1.ReadToEnd());
        using var blobStreamReader2 = new StreamReader(blobStream2);
        logger.LogInformation("Blob sample-container/sample-blob-2 has content: {content}", blobStreamReader2.ReadToEnd());
    }
}

Zápis do streamu

public static class BlobFunction_WriteStream
{
    [FunctionName("BlobFunction")]
    public static async Task Run(
        [BlobTrigger("sample-container/sample-blob-1")] Stream blobStream1,
        [Blob("sample-container/sample-blob-2", FileAccess.Write)] Stream blobStream2,
        ILogger logger)
    {
        await blobStream1.CopyToAsync(blobStream2);
        logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
    }
}

Vazba na řetězec

public static class BlobFunction_String
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob-1")] string blobContent1,
        [Blob("sample-container/sample-blob-2")] string blobContent2,
        ILogger logger)
    {
        logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", blobContent1);
        logger.LogInformation("Blob sample-container/sample-blob-2 has content: {content}", blobContent2);
    }
}

Zápis řetězce do objektu blob

public static class BlobFunction_String_Write
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob-1")] string blobContent1,
        [Blob("sample-container/sample-blob-2")] out string blobContent2,
        ILogger logger)
    {
        logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", blobContent1);
        blobContent2 = blobContent1;
        logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
    }
}

Vazba na pole bajtů

public static class BlobFunction_ByteArray
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob-1")] byte[] blobContent1,
        [Blob("sample-container/sample-blob-2")] byte[] blobContent2,
        ILogger logger)
    {
        logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", Encoding.UTF8.GetString(blobContent1));
        logger.LogInformation("Blob sample-container/sample-blob-2 has content: {content}", Encoding.UTF8.GetString(blobContent2));
    }
}

Zápis pole bajtů do objektu blob

public static class BlobFunction_ByteArray_Write
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob-1")] byte[] blobContent1,
        [Blob("sample-container/sample-blob-2")] out byte[] blobContent2,
        ILogger logger)
    {
        logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", Encoding.UTF8.GetString(blobContent1));
        blobContent2 = blobContent1;
        logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
    }
}

Vazba na TextReader a TextWriter

public static class BlobFunction_TextReader_TextWriter
{
    [FunctionName("BlobFunction")]
    public static async Task Run(
        [BlobTrigger("sample-container/sample-blob-1")] TextReader blobContentReader1,
        [Blob("sample-container/sample-blob-2")] TextWriter blobContentWriter2,
        ILogger logger)
    {
        while (blobContentReader1.Peek() >= 0)
        {
            await blobContentWriter2.WriteLineAsync(await blobContentReader1.ReadLineAsync());
        }
        logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
    }
}

Vazba na typy sady SDK služby Azure Storage Blob

public static class BlobFunction_BlobClient
{
    [FunctionName("BlobFunction")]
    public static async Task Run(
        [BlobTrigger("sample-container/sample-blob-1")] BlobClient blobClient1,
        [Blob("sample-container/sample-blob-2")] BlobClient blobClient2,
        ILogger logger)
    {
        BlobProperties blobProperties1 = await blobClient1.GetPropertiesAsync();
        logger.LogInformation("Blob sample-container/sample-blob-1 has been updated on: {datetime}", blobProperties1.LastModified);
        BlobProperties blobProperties2 = await blobClient2.GetPropertiesAsync();
        logger.LogInformation("Blob sample-container/sample-blob-2 has been updated on: {datetime}", blobProperties2.LastModified);
    }
}

Přístup ke kontejneru objektů blob

public static class BlobFunction_AccessContainer
{
    [FunctionName("BlobFunction")]
    public static async Task Run(
        [BlobTrigger("sample-container/sample-blob")] Stream blobStream,
        [Blob("sample-container")] BlobContainerClient blobContainerClient,
        ILogger logger)
    {
        logger.LogInformation("Blobs within container:");
        await foreach (BlobItem blobItem in blobContainerClient.GetBlobsAsync())
        {
            logger.LogInformation(blobItem.Name);
        }
    }
}

Výčet objektů blob v kontejneru

public static class BlobFunction_EnumerateBlobs_Stream
{
    [FunctionName("BlobFunction")]
    public static async Task Run(
        [BlobTrigger("sample-container/sample-blob")] Stream blobStream,
        [Blob("sample-container")] IEnumerable<Stream> blobs,
        ILogger logger)
    {
        logger.LogInformation("Blobs contents within container:");
        foreach (Stream content in blobs)
        {
            using var blobStreamReader = new StreamReader(content);
            logger.LogInformation(await blobStreamReader.ReadToEndAsync());
        }
    }
}
public static class BlobFunction_EnumerateBlobs_BlobClient
{
    [FunctionName("BlobFunction")]
    public static void Run(
        [BlobTrigger("sample-container/sample-blob")] Stream blobStream,
        [Blob("sample-container")] IEnumerable<BlobClient> blobs,
        ILogger logger)
    {
        logger.LogInformation("Blobs within container:");
        foreach (BlobClient blob in blobs)
        {
            logger.LogInformation(blob.Name);
        }
    }
}

Konfigurace rozšíření

Projděte si ukázkovou aplikaci funkcí.

Řešení potíží

Pokyny k řešení potíží najdete v tématu Monitorování Azure Functions.

Další kroky

Přečtěte si úvod ke službě Azure Functions nebo si přečtěte průvodce vytvořením funkce Azure Functions.

Přispívání

Podrobnosti o sestavování, testování a přispívání do této knihovny najdete na CONTRIBUTING.md úložiště .

Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete na cla.microsoft.com.

Tento projekt přijal pravidla chování pro Microsoft Open Source. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo se obraťte na opencode@microsoft.com případné další dotazy nebo komentáře.

Imprese