Trigger služby Azure Blob Storage pro Azure Functions

Trigger služby Blob Storage spustí funkci při zjištění nového nebo aktualizovaného objektu blob. Obsah objektu blob se poskytuje jako vstup funkce.

Tip

Kód funkce můžete spustit několika způsoby na základě změn objektů blob v kontejneru úložiště. Pokud se rozhodnete použít trigger úložiště objektů blob, mějte na paměti, že existují dvě nabízené implementace: jedno založené na dotazování (odkazované v tomto článku) a jedno založené na událostech. Doporučujeme použít implementaci založenou na událostech, protože má nižší latenci než druhá. Plán Flex Consumption také podporuje pouze trigger úložiště objektů blob založený na událostech.

Podrobnosti o rozdílech mezi dvěma implementacemi triggeru úložiště objektů blob a dalšími možnostmi triggeru najdete v tématu Práce s objekty blob.

Informace o nastavení a konfiguraci najdete v přehledu.

Důležité

Tento článek používá karty pro podporu více verzí programovacího modelu Node.js. Model v4 je obecně dostupný a je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další podrobnosti o tom, jak model v4 funguje, najdete v příručce pro vývojáře služby Azure Functions Node.js. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.

Azure Functions podporuje dva programovací modely pro Python. Způsob, jakým definujete vazby, závisí na zvoleném programovacím modelu.

Programovací model Pythonu v2 umožňuje definovat vazby pomocí dekorátorů přímo v kódu funkce Pythonu. Další informace najdete v příručce pro vývojáře Pythonu.

Tento článek podporuje oba programovací modely.

Příklad

Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:

  • Izolovaný model pracovního procesu: Kompilovaná funkce jazyka C#, která běží v pracovním procesu, který je izolovaný od modulu runtime. Izolovaný pracovní proces je nutný pro podporu funkcí C# spuštěných na LTS a jiných verzích než LTS .NET a rozhraní .NET Framework. Rozšíření pro izolované funkce pracovních procesů používají Microsoft.Azure.Functions.Worker.Extensions.* obory názvů.
  • Model v procesu: Zkompilovaná funkce jazyka C#, která běží ve stejném procesu jako modul runtime služby Functions. Ve variantě tohoto modelu je možné spouštět funkce pomocí skriptování jazyka C#, což je podporováno především pro úpravy portálu C#. Rozšíření pro procesní funkce používají Microsoft.Azure.WebJobs.Extensions.* obory názvů.

Následující příklad je funkce jazyka C#, která běží v izolovaném pracovním procesu a používá trigger objektu blob se vstupními i výstupními vazbami objektu blob. Funkce se aktivuje vytvořením objektu blob v kontejneru test-samples-trigger . Načte textový soubor ze vstupního kontejneru test-samples a vytvoří nový textový soubor ve výstupním kontejneru na základě názvu aktivovaného souboru.

public static class BlobFunction
{
    [Function(nameof(BlobFunction))]
    [BlobOutput("test-samples-output/{name}-output.txt")]
    public static string Run(
        [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
        [BlobInput("test-samples-input/sample1.txt")] string myBlob,
        FunctionContext context)
    {
        var logger = context.GetLogger("BlobFunction");
        logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
        logger.LogInformation("Input Item = {myBlob}", myBlob);

        // Blob Output
        return "blob-output content";
    }
}

Tato funkce zapíše protokol při přidání nebo aktualizaci objektu blob v kontejneru myblob .

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

Následující příklad ukazuje kód TypeScriptu triggeru objektu blob. Funkce zapíše protokol při přidání nebo aktualizaci objektu blob v kontejneru samples-workitems .

Řetězec {name} v cestě samples-workitems/{name} triggeru objektu blob vytvoří vazbový výraz , který můžete použít v kódu funkce pro přístup k názvu souboru aktivačního objektu blob. Další informace najdete v části Vzory názvů objektů blob dále v tomto článku.

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    handler: storageBlobTrigger1,
});

Následující příklad ukazuje javascriptový kód triggeru objektu blob. Funkce zapíše protokol při přidání nebo aktualizaci objektu blob v kontejneru samples-workitems .

Řetězec {name} v cestě samples-workitems/{name} triggeru objektu blob vytvoří vazbový výraz , který můžete použít v kódu funkce pro přístup k názvu souboru aktivačního objektu blob. Další informace najdete v části Vzory názvů objektů blob dále v tomto článku.

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

Následující příklad ukazuje, jak vytvořit funkci, která se spustí při přidání souboru do source kontejneru úložiště objektů blob.

Konfigurační soubor funkce (function.json) obsahuje vazbu s parametrem blobTrigger type a direction nastaveným na in.

{
  "bindings": [
    {
      "name": "InputBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "source/{name}",
      "connection": "MyStorageAccountConnectionString"
    }
  ]
}

Tady je přidružený kód pro soubor run.ps1 .

param([byte[]] $InputBlob, $TriggerMetadata)

Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"

V tomto příkladu se k přímému přístupu k podkladovému BlobClient objektu poskytnutému triggerem úložiště objektů blob používá typy sad SDK:

import logging

import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.blob_trigger(
    arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
    logging.info(
        f"Python blob trigger function processed blob \n"
        f"Properties: {client.get_blob_properties()}\n"
        f"Blob content head: {client.download_blob().read(size=1)}"
    )

Příklady použití jiných typů sad SDK najdete v ContainerClient tématech a StorageStreamDownloader ukázkách.

Další informace, včetně povolení vazeb typu sady SDK v projektu, najdete v tématu Vazby typu sady SDK.

Tento příklad zaznamenává informace z příchozích metadat objektů blob.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob", 
                  path="PATH/TO/BLOB",
                  connection="CONNECTION_SETTING")
def test_function(myblob: func.InputStream):
   logging.info(f"Python blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")

Atributy

Knihovny C# v procesu i izolovaného pracovního procesu používají atribut BlobAttribute k definování funkce. Skript jazyka C# místo toho používá konfigurační soubor function.json, jak je popsáno v průvodci skriptováním jazyka C#.

Konstruktor atributu přebírá následující parametry:

Parametr Popis
BlobPath Cesta k objektu blob.
Připojení Název nastavení aplikace nebo kolekce nastavení, která určuje, jak se připojit k objektům blob Azure. Viz Připojení.
Přístup Určuje, jestli budete číst nebo psát.
Source Nastaví zdroj aktivační události. Používá se BlobTriggerSource.EventGrid pro trigger objektu blob založený na Event Gridu, který poskytuje mnohem nižší latenci. Výchozí hodnota je BlobTriggerSource.LogsAndContainerScan, která používá standardní mechanismus dotazování k detekci změn v kontejneru.

Tady je BlobTrigger atribut v podpisu metody:

[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
    [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
    [BlobInput("test-samples-input/sample1.txt")] string myBlob,
    FunctionContext context)

Při místním vývoji přidejte nastavení aplikace do souboru local.settings.json v kolekci Values .

Dekoratéry

Platí pouze pro programovací model Pythonu v2.

Pro funkce Pythonu v2 definované pomocí dekorátorů definují následující vlastnosti v dekorátoru blob_trigger aktivační událost blob Storage:

Vlastnost Popis
arg_name Deklaruje název parametru v podpisu funkce. Při aktivaci funkce má hodnota tohoto parametru obsah zprávy fronty.
path Kontejner, který se má monitorovat. Může to být vzor názvu objektu blob.
connection Připojovací řetězec účtu úložiště
source Nastaví zdroj aktivační události. Používá se EventGrid pro trigger objektu blob založený na Event Gridu, který poskytuje mnohem nižší latenci. Výchozí hodnota je LogsAndContainerScan, která používá standardní mechanismus dotazování k detekci změn v kontejneru.

Informace o funkcích Pythonu definovaných pomocí function.json najdete v části Konfigurace .

Poznámky

Atribut @BlobTrigger slouží k udělení přístupu k objektu blob, který funkci aktivoval. Podrobnosti najdete v příkladu triggeru. source Pomocí vlastnosti nastavte zdroj aktivační události. Používá se EventGrid pro trigger objektu blob založený na Event Gridu, který poskytuje mnohem nižší latenci. Výchozí hodnota je LogsAndContainerScan, která používá standardní mechanismus dotazování k detekci změn v kontejneru. |

Konfigurace

Platí pouze pro programovací model Pythonu v1.

Následující tabulka vysvětluje vlastnosti, které můžete nastavit u objektu předaného options metodě app.storageBlob() .

Vlastnost Popis
path Kontejner, který se má monitorovat. Může to být vzor názvu objektu blob.
připojení Název nastavení aplikace nebo kolekce nastavení, která určuje, jak se připojit k objektům blob Azure. Viz Připojení.
source Nastaví zdroj aktivační události. Používá se EventGrid pro trigger objektu blob založený na Event Gridu, který poskytuje mnohem nižší latenci. Výchozí hodnota je LogsAndContainerScan, která používá standardní mechanismus dotazování k detekci změn v kontejneru.

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json .

vlastnost function.json Popis
type Musí být nastavena na blobTriggerhodnotu . Tato vlastnost se nastaví automaticky při vytváření triggeru na webu Azure Portal.
direction Musí být nastavena na inhodnotu . Tato vlastnost se nastaví automaticky při vytváření triggeru na webu Azure Portal. Výjimky jsou zaznamenány v části využití .
Jméno Název proměnné, která představuje objekt blob v kódu funkce.
path Kontejner, který se má monitorovat. Může to být vzor názvu objektu blob.
připojení Název nastavení aplikace nebo kolekce nastavení, která určuje, jak se připojit k objektům blob Azure. Viz Připojení.
source Nastaví zdroj aktivační události. Používá se EventGrid pro trigger objektu blob založený na Event Gridu, který poskytuje mnohem nižší latenci. Výchozí hodnota je LogsAndContainerScan, která používá standardní mechanismus dotazování k detekci změn v kontejneru.

Kompletní příklady najdete v části Příklad.

Metadata

Trigger objektu blob poskytuje několik vlastností metadat. Tyto vlastnosti lze použít jako součást vazebních výrazů v jiných vazbách nebo jako parametry v kódu. Tyto hodnoty mají stejnou sémantiku jako typ CloudBlob .

Vlastnost Type Popis
BlobTrigger string Cesta k aktivačnímu objektu blob.
Uri System.Uri Identifikátor URI objektu blob pro primární umístění.
Properties Objekt blobProperties Systémové vlastnosti objektu blob.
Metadata IDictionary<string,string> Uživatelsky definovaná metadata objektu blob.

Následující příklad zaznamená cestu k aktivačnímu objektu blob, včetně kontejneru:

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 

Metadata

Trigger objektu blob poskytuje několik vlastností metadat. Tyto vlastnosti lze použít jako součást vazebních výrazů v jiných vazbách nebo jako parametry v kódu.

Vlastnost Popis
blobTrigger Cesta k aktivačnímu objektu blob.
uri Identifikátor URI objektu blob pro primární umístění.
properties Systémové vlastnosti objektu blob.
metadata Uživatelsky definovaná metadata objektu blob.

Metadata lze získat z triggerMetadata vlastnosti zadaného context objektu, jak je znázorněno v následujícím příkladu, který zaprokoluje cestu k aktivačnímu objektu blob (blobTrigger), včetně kontejneru:

context.log(`Full blob path: ${context.triggerMetadata.blobTrigger}`);

Metadata

Metadata jsou k dispozici prostřednictvím parametru $TriggerMetadata .

Využití

Typy vazeb podporované triggerem objektu blob závisí na verzi balíčku rozšíření a způsobu použití v aplikaci funkcí jazyka C#.

Trigger objektu blob může svázat s následujícími typy:

Typ Popis
string Obsah objektu blob jako řetězec. Použije se, když je obsah objektu blob jednoduchým textem.
byte[] Bajty obsahu objektu blob.
Serializovatelné typy JSON Když objekt blob obsahuje data JSON, služba Functions se pokusí deserializovat data JSON do prostého typu objektu CLR (POCO).
Stream1 Vstupní datový proud obsahu objektu blob.
BlobClient1,
BlockBlobClient1,
PageBlobClient1,
AppendBlobClient1,
BlobBaseClient1
Klient připojený k objektu blob. Tato sada typů nabízí největší kontrolu nad zpracováním objektu blob a lze ji použít k zápisu zpět do objektu blob, pokud má připojení dostatečná oprávnění.

1 Pokud chcete použít tyto typy, musíte odkazovat na Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 nebo novější a běžné závislosti pro vazby typu sady SDK.

Vazba na stringobjekt blob nebo Byte[] se doporučuje pouze v případě, že je malá velikost objektu blob. To se doporučuje, protože celý obsah objektu blob se načte do paměti. U většiny objektů blob použijte Stream typ nebo BlobClient objekt blob. Další informace najdete v tématu Souběžnost a využití paměti.

Pokud se při pokusu o vytvoření vazby k některému z typů sady SDK služby Storage zobrazí chybová zpráva, ujistěte se, že máte odkaz na správnou verzi sady SDK služby Storage.

K určení účtu úložiště, který se má použít, můžete použít také StorageAccountAttribute . Můžete to udělat, když potřebujete použít jiný účet úložiště než jiné funkce v knihovně. Konstruktor přebírá název nastavení aplikace, které obsahuje připojovací řetězec úložiště. Atribut lze použít na úrovni parametru, metody nebo třídy. Následující příklad ukazuje úroveň třídy a úroveň metody:

[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
    [FunctionName("BlobTrigger")]
    [StorageAccount("FunctionLevelStorageAppSetting")]
    public static void Run( //...
{
    ....
}

Účet úložiště, který se má použít, se určuje v následujícím pořadí:

  • Vlastnost BlobTrigger atributu Connection .
  • Atribut StorageAccount použitý na stejný parametr jako BlobTrigger atribut.
  • Atribut StorageAccount použitý na funkci.
  • Atribut StorageAccount použitý pro třídu.
  • Výchozí účet úložiště pro aplikaci funkcí, který je definován v AzureWebJobsStorage nastavení aplikace.

Atribut @BlobTrigger slouží k udělení přístupu k objektu blob, který funkci aktivoval. Podrobnosti najdete v příkladu triggeru.

Přístup k datům objektu blob jako první argument funkce

Přístup k datům objektu blob prostřednictvím parametru, který odpovídá názvu určenému parametrem názvu vazby v souboru function.json .

Přístup k datům objektu blob prostřednictvím parametru zadaného jako InputStream. Podrobnosti najdete v příkladu triggeru.

Funkce také podporuje vazby typů sady Python SDK pro úložiště objektů blob v Azure, které umožňují pracovat s daty objektů blob pomocí těchto základních typů sady SDK:

Důležité

Podpora typů sad SDK pro Python je aktuálně ve verzi Preview a podporuje se pouze pro programovací model Pythonu v2. Další informace najdete v tématu Typy sad SDK v Pythonu.

Propojení

Vlastnost connection je odkazem na konfiguraci prostředí, která určuje, jak se má aplikace připojit k objektům blob Azure. Může zadat:

Pokud je nakonfigurovaná hodnota přesná shoda pro jedno nastavení i shodu předpony pro jiná nastavení, použije se přesná shoda.

Connection string

Pokud chcete získat připojovací řetězec, postupujte podle kroků uvedených v tématu Správa přístupových klíčů účtu úložiště. Připojovací řetězec musí být pro účet úložiště pro obecné účely, nikoli účet úložiště Blob.

Tato připojovací řetězec by měla být uložena v nastavení aplikace s názvem, který connection odpovídá hodnotě určené vlastností konfigurace vazby.

Pokud název nastavení aplikace začíná na "AzureWebJobs", můžete zde zadat pouze zbytek názvu. Pokud například nastavíte connection "MyStorage", modul runtime Functions vyhledá nastavení aplikace s názvem AzureWebJobsMyStorage. Pokud necháte connection prázdné, modul runtime Služby Functions použije výchozí připojovací řetězec úložiště v nastavení aplikace, které je pojmenované AzureWebJobsStorage.

Připojení založená na identitách

Pokud používáte rozšíření verze 5.x nebo vyšší (sada 3.x nebo vyšší pro non-.NET zásobníky jazyků), místo použití připojovací řetězec s tajným kódem můžete aplikaci použít identitu Microsoft Entra. Pokud chcete použít identitu, definujete nastavení pod běžnou předponou, která se mapuje na connection vlastnost v konfiguraci triggeru a vazby.

Pokud nastavujete connection azureWebJobsStorage, přečtěte si téma Připojení k hostitelskému úložišti pomocí identity. Pro všechna ostatní připojení rozšíření vyžaduje následující vlastnosti:

Vlastnost Šablona proměnné prostředí Popis Příklad hodnoty
Blob Service URI <CONNECTION_NAME_PREFIX>__serviceUri1 Identifikátor URI roviny dat služby Blob Service, ke které se připojujete, pomocí schématu HTTPS. <https:// storage_account_name.blob.core.windows.net>

1 <CONNECTION_NAME_PREFIX>__blobServiceUri lze použít jako alias. Pokud se konfigurace připojení použije triggerem objektu blob, blobServiceUri musí být doprovázena queueServiceUritaké . Viz níže.

Formulář serviceUri nelze použít, pokud se má použít celková konfigurace připojení napříč objekty blob, frontami a/nebo tabulkami. Identifikátor URI může určit pouze službu blob. Jako alternativu můžete zadat identifikátor URI speciálně pro každou službu, což umožňuje použití jediného připojení. Pokud jsou k dispozici obě verze, použije se formulář s více službami. Pokud chcete nakonfigurovat připojení pro více služeb, nikoli <CONNECTION_NAME_PREFIX>__serviceUrinastavit:

Vlastnost Šablona proměnné prostředí Popis Příklad hodnoty
Blob Service URI <CONNECTION_NAME_PREFIX>__blobServiceUri Identifikátor URI roviny dat služby Blob Service, ke které se připojujete, pomocí schématu HTTPS. <https:// storage_account_name.blob.core.windows.net>
Identifikátor URI služby Queue Service (vyžadovaný pro triggeryobjektů blob 2) <CONNECTION_NAME_PREFIX>__queueServiceUri Identifikátor URI roviny dat služby fronty pomocí schématu HTTPS. Tato hodnota je nutná pouze pro triggery objektů blob. <https:// storage_account_name.queue.core.windows.net>

2 Trigger objektu blob zpracovává selhání napříč několika opakováními tím, že zapíše otrávené objekty blob do fronty . Ve formuláři serviceUri AzureWebJobsStorage se použije připojení. Při zadávání blobServiceUrivšak musí být k dispozici také identifikátor URI služby fronty queueServiceUri. Doporučujeme používat službu ze stejného účtu úložiště jako služba blob. Musíte také zajistit, aby trigger mohl číst a zapisovat zprávy ve službě nakonfigurované fronty přiřazením role, jako je Přispěvatel dat fronty služby Storage.

Pro přizpůsobení připojení mohou být nastaveny další vlastnosti. Viz Běžné vlastnosti pro připojení založená na identitě.

Při hostovaní ve službě Azure Functions používají připojení založená na identitách spravovanou identitu. Identita přiřazená systémem se používá ve výchozím nastavení, i když je možné zadat identitu přiřazenou uživatelem s vlastnostmi a clientID vlastnostmicredential. Všimněte si, že konfigurace identity přiřazené uživatelem s ID prostředku se nepodporuje . Při spuštění v jiných kontextech, jako je místní vývoj, se místo toho použije vaše identita vývojáře, i když je možné ji přizpůsobit. Viz Místní vývoj s připojeními založenými na identitách.

Udělení oprávnění identitě

Jakákoli identita, kterou používáte, musí mít oprávnění k provedení zamýšlených akcí. U většiny služeb Azure to znamená, že potřebujete přiřadit roli v Azure RBAC pomocí předdefinovaných nebo vlastních rolí, které tato oprávnění poskytují.

Důležité

Cílová služba může zpřístupnit některá oprávnění, která nejsou nutná pro všechny kontexty. Pokud je to možné, dodržujte zásadu nejnižšího oprávnění a udělte identitě pouze požadovaná oprávnění. Pokud například aplikace potřebuje jen číst ze zdroje dat, použijte roli, která má oprávnění jen ke čtení. Přiřazení role, která také umožňuje zápis do této služby, by bylo nevhodné, protože by to bylo nadměrné oprávnění pro operaci čtení. Podobně byste chtěli zajistit, aby přiřazení role bylo vymezeno pouze nad prostředky, které je potřeba číst.

Musíte vytvořit přiřazení role, které poskytuje přístup k kontejneru objektů blob za běhu. Role správy, jako je vlastník , nestačí. Následující tabulka ukazuje předdefinované role, které se doporučují při použití rozšíření Blob Storage v normálním provozu. Vaše aplikace může vyžadovat další oprávnění na základě kódu, který napíšete.

Typ vazby Příklad předdefinovaných rolí
Trigger Vlastník dat objektů blob služby Storage a Přispěvateldat fronty úložiště 1

Navíc musí být udělena také připojení AzureWebJobsStorage.2
Vstupní vazba Čtenář dat v objektech blob služby Storage
Výstupní vazba Vlastník dat v objektech blob služby Storage

1 Trigger objektu blob zpracovává selhání napříč několika opakováními tím, že zapíše otrávené objekty blob do fronty v účtu úložiště určeném připojením.

2 Připojení AzureWebJobsStorage se používá interně pro objekty blob a fronty, které aktivují trigger. Pokud je nakonfigurované tak, aby používalo připojení založené na identitě, potřebuje další oprávnění nad rámec výchozího požadavku. Požadovaná oprávnění jsou pokryta rolemi Vlastník dat objektů blob služby Storage, Přispěvatel dat fronty úložiště a Přispěvatel účtů úložiště. Další informace najdete v tématu Připojení k hostitelskému úložišti pomocí identity.

Vzory názvů objektů blob

Vzor názvu objektu path blob můžete zadat ve vlastnosti v function.json nebo v konstruktoru BlobTrigger atributů. Vzorem názvů může být výraz filtru nebo vazby. Následující části poskytují příklady.

Tip

Název kontejneru nemůže v vzoru názvů obsahovat překladač.

Získání názvu a přípony souboru

Následující příklad ukazuje, jak vytvořit vazbu na název a příponu objektu blob samostatně:

"path": "input/{blobname}.{blobextension}",

Pokud se objekt blob jmenuje original-Blob1.txt, hodnoty proměnných blobextension blobname v kódu funkce jsou original-Blob1 a txt.

Filtrování názvu objektu blob

Následující příklad se aktivuje pouze u objektů blob v kontejneru input , které začínají řetězcem original-:

"path": "input/original-{name}",

Pokud je název objektu blob original-Blob1.txt, hodnota name proměnné v kódu funkce je Blob1.txt.

Filtrovat podle typu souboru

Následující příklad se aktivuje pouze u .png souborů:

"path": "samples/{name}.png",

Filtrování složených závorek v názvech souborů

Chcete-li hledat složené závorky v názvech souborů, uchytejte složené závorky pomocí dvou složených závorek. Následující příklad filtruje objekty blob, které mají složené závorky v názvu:

"path": "images/{{20140101}}-{name}",

Pokud je objekt blob pojmenován {20140101}-soundfile.mp3, name hodnota proměnné v kódu funkce je soundfile.mp3.

Dotazování a latence

Dotazování funguje jako hybridní mezi kontrolou protokolů a spouštěním pravidelných kontrol kontejnerů. Objekty blob se prohledávají ve skupinách po 10 000 s tokenem pokračování používaným mezi intervaly. Pokud je vaše aplikace funkcí v plánu Consumption, může v případě nečinnosti aplikace funkcí dojít až o 10minutové zpoždění při zpracování nových objektů blob.

Upozorňující

Protokoly úložiště se vytvářejí podle "nejlepšího úsilí" . Není zaručeno, že se zachytí všechny události. Za určitých podmínek se můžou protokoly zmeškat.

Pokud potřebujete rychlejší nebo spolehlivější zpracování objektů blob, měli byste zvážit přepnutí hostování na použití plánu služby App Service s povolenou funkcí AlwaysOn, což může vést ke zvýšení nákladů. Můžete také zvážit použití jiného triggeru než klasického triggeru objektu blob dotazování. Další informace a porovnání různých možností triggerů pro kontejnery úložiště objektů blob najdete v tématu Trigger pro kontejner objektů blob.

Potvrzení o objektech blob

Modul runtime Azure Functions zajišťuje, že se pro stejný nový nebo aktualizovaný objekt blob nevolá více než jednou žádná funkce triggeru objektu blob. Pokud chcete zjistit, jestli je daná verze objektu blob zpracována, udržuje účtenky objektů blob.

Azure Functions ukládá účtenky objektů blob do kontejneru s názvem azure-webjobs-hosts v účtu úložiště Azure pro vaši aplikaci funkcí (definované nastavením AzureWebJobsStorageaplikace). Potvrzení o objektu blob obsahuje následující informace:

  • Aktivovaná funkce (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>například: MyFunctionApp.Functions.CopyBlob)
  • Název kontejneru
  • Typ objektu blob (BlockBlob nebo PageBlob)
  • Název objektu blob
  • Značka ETag (identifikátor verze objektu blob, například: 0x8D1DC6E70A277EF)

Pokud chcete vynutit opětovné zpracování objektu blob, odstraňte účtenku objektu blob pro tento objekt blob z kontejneru azure-webjobs-hosts ručně. I když k opětovnému zpracování nemusí dojít okamžitě, je zaručeno, že dojde k pozdějšímu bodu v čase. K okamžitému zpracování je možné aktualizovat objekt blob scaninfo v azure-webjobs-hosts/blobscaninfo . Všechny objekty blob s časovým razítkem poslední změny po LatestScan opětovné kontrole vlastnosti.

Otrávené objekty blob

Když funkce triggeru objektu blob pro daný objekt blob selže, Azure Functions ve výchozím nastavení opakuje, že tato funkce funguje celkem pětkrát.

Pokud všech 5 pokusů selže, Azure Functions přidá zprávu do fronty úložiště s názvem webjobs-blobtrigger-poison. Maximální počet opakování je možné konfigurovat. Stejné nastavení MaxDequeueCount se používá pro zpracování otrávených objektů blob a zpracování zpráv fronty jedu. Zpráva fronty pro otrávené objekty blob je objekt JSON, který obsahuje následující vlastnosti:

  • FunctionId (ve formátu <FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>)
  • BlobType (BlockBlob nebo PageBlob)
  • ContainerName
  • Název objektu blob
  • Značka ETag (identifikátor verze objektu blob, například: 0x8D1DC6E70A277EF)

Využití paměti a souběžnost

Pokud vytvoříte vazbu na typ výstupu, který nepodporuje streamování, jako stringByte[]je například nebo , musí modul runtime načíst celý objekt blob do paměti více než jednou během zpracování. Výsledkem může být vyšší než očekávané využití paměti při zpracování objektů blob. Pokud je to možné, použijte typ podporující datový proud. Podpora typů závisí na režimu jazyka C# a verzi rozšíření. Další informace naleznete v tématu Typy vazeb.

V tuto chvíli musí modul runtime načíst celý objekt blob do paměti vícekrát během zpracování. Výsledkem může být vyšší než očekávané využití paměti při zpracování objektů blob.

Využití paměti může být dále ovlivněno, pokud více instancí funkcí současně zpracovává data objektů blob. Pokud máte problémy s pamětí při použití triggeru objektu blob, zvažte snížení počtu povolených souběžných spuštění. Samozřejmě, snížení souběžnosti může mít vedlejší účinek zvýšení backlogu objektů blob čekajících na zpracování. Limity paměti vaší aplikace funkcí závisí na plánu. Další informace najdete v tématu Omezení služby.

Způsob, jakým můžete řídit počet souběžných spuštění, závisí na verzi rozšíření úložiště, které používáte.

Při použití verze 5.0.0 rozšíření úložiště nebo novější verze řídíte souběžnost pomocí maxDegreeOfParallelism nastavení v konfiguraci objektů blob v host.json.

Omezení platí pro každou funkci, která používá trigger objektu blob.

host.json vlastnosti

Soubor host.json obsahuje nastavení, která řídí chování triggeru objektu blob. Podrobnosti o dostupných nastaveních najdete v části nastavení host.json .

Další kroky