trigger Azure Blob storage pro Azure Functions

Trigger Blob storage spustí funkci při zjištění nového nebo aktualizovaného objektu blob. Obsah objektu blob se poskytuje jako input do funkce.

Návod

Kód funkce můžete spustit několika způsoby na základě změn objektů blob v kontejneru storage. Pokud se rozhodnete použít trigger Blob storage, nabízejí se dvě implementace: jedno založené na dotazování (odkazované v tomto článku) a jedna 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 založený na událostech Blob storage.

Podrobnosti o rozdílech mezi dvěma implementacemi triggeru Blob storage a dalšími možnostmi triggeru najdete v tématu Pracování s objekty blob.

Informace o nastavení a konfiguraci najdete v tématu overview.

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 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 se vyžaduje pro podporu funkcí jazyka C# spuštěných ve verzích LTS a jiných verzích než LTS .NET a rozhraní .NET Framework. Rozšíření pro izolované funkce pracovních procesů používají obory názvů Microsoft.Azure.Functions.Worker.Extensions.*.
  • 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í obory názvů Microsoft.Azure.WebJobs.Extensions.*.

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 používá pole bajtů k zápisu protokolu při přidání nebo aktualizaci objektu blob v kontejneru myblob .

Na základě dotazování:

Následující příklad používá výchozí trigger dotazování:

@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 používá trigger Event Gridu:

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

Tento příklad typů SDK používá BlobClient k access vlastností objektu blob.

@FunctionName("processBlob")
public void run(
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage") BlobClient blob,
        @BindingName("name") String file,
        ExecutionContext ctx)
{
    ctx.getLogger().info("Size = " + blob.getProperties().getBlobSize());
}

Tento příklad typů SDK používá BlobContainerClient k access informace o objektech blob v kontejneru, který funkci aktivoval.

@FunctionName("containerOps")
public void run(
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage") BlobContainerClient container,
        ExecutionContext ctx)
{
    container.listBlobs()
            .forEach(b -> ctx.getLogger().info(b.getName()));
}

Tento příklad typu sady SDK používá BlobClient k získání informací ze vstupní vazby o objektu blob, který aktivoval spuštění.

@FunctionName("checkAgainstInputBlob")
public void run(
        @BlobInput(
                name = "inputBlob",
                path = "inputContainer/input.txt") BlobClient inputBlob,
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage",
                dataType = "string") String triggerBlob,
        ExecutionContext ctx)
{
    ctx.getLogger().info("Size = " + inputBlob.getProperties().getBlobSize());
}

Tento příklad ukazuje, jak získat Objekt BlobClient z triggeru objektu blob Storage i ze vstupní vazby triggeru HTTP:

import "@azure/functions-extensions-blob"; // This is the mandatory first import for SDK binding
import { StorageBlobClient } from "@azure/functions-extensions-blob";
import { app, InvocationContext } from "@azure/functions";

export async function storageBlobTrigger(
  blobStorageClient: StorageBlobClient, // SDK binding provides this client
  context: InvocationContext
): Promise<void> {
  context.log(`Blob trigger processing: ${context.triggerMetadata.name}`);

  // Access to full SDK capabilities
  const blobProperties = await blobStorageClient.blobClient.getProperties();
  context.log(`Blob size: ${blobProperties.contentLength}`);

  // Download blob content
  const downloadResponse = await blobStorageClient.blobClient.download();
  context.log(`Content: ${downloadResponse}`);
}

// Register the function
app.storageBlob("storageBlobTrigger", {
  path: "snippets/{name}",
  connection: "AzureWebJobsStorage",
  sdkBinding: true, // Enable SDK binding
  handler: storageBlobTrigger,
});

Tento příklad ukazuje, jak získat ContainerClient z vstupní vazby Storage objektu blob pomocí triggeru HTTP:

import "@azure/functions-extensions-blob"; // This is the mandatory first import for SDK binding
import { StorageBlobClient } from "@azure/functions-extensions-blob";
import {
  app,
  HttpRequest,
  HttpResponseInit,
  input,
  InvocationContext,
} from "@azure/functions";

const blobInput = input.storageBlob({
  path: "snippets",
  connection: "AzureWebJobsStorage",
  sdkBinding: true,
});

export async function listBlobs(
  request: HttpRequest,
  context: InvocationContext
): Promise<HttpResponseInit> {
  // Get input binding for a specific container
  const storageBlobClient = context.extraInputs.get(
    blobInput
  ) as StorageBlobClient;

  // List all blobs in the container
  const blobs = [];
  for await (const blob of storageBlobClient.containerClient.listBlobsFlat()) {
    blobs.push(blob.name);
  }

  return { jsonBody: { blobs } };
}

app.http("listBlobs", {
  methods: ["GET"],
  authLevel: "function",
  extraInputs: [blobInput],
  handler: listBlobs,
});

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ě aktivační události objektu blob samples-workitems/{name} vytvoří výraz binding, který můžete použít v kódu funkce k access 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ě aktivační události objektu blob samples-workitems/{name} vytvoří výraz binding, který můžete použít v kódu funkce k access 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 blob storage kontejneru.

Konfigurační soubor funkce (.

{
  "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"

Tento příklad používá typy sad SDK k přímému access podkladového objektu BlobClient poskytované triggerem Blob storage:

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

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@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 ukázkách ContainerClient a StorageStreamDownloader. Podrobný kurz o tom, jak do aplikace funkcí zahrnout vazby typu sady SDK, najdete v Vazby sady SDK pro ukázku objektů blob.

Další informace, včetně podporovaných dalších vazeb typu sady SDK, najdete v tématu Vazby typu sady SDK.

Tento příklad zaznamená název a velikost objektu blob z triggeru příchozího objektu blob.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob", 
                  path="samples-workitems/{name}",
                  connection="MyStorageAccountAppSetting")
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

Oba in-process i isolated worker process knihovny jazyka C# 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 Azure objekty blob. Viz Připojení.
Access Určuje, jestli budete číst nebo psát.
Zdroj Nastaví zdroj aktivační události. Slouží BlobTriggerSource.EventGrid k aktivaci objektu blob založeného na službě Event Grid, která poskytuje 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.

U funkcí Pythonu v2 definovaných pomocí dekorátorů definují následující vlastnosti v dekorátoru blob_trigger decorator definují 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 Monitorování container. Může to být vzor názvu objektu blob.
connection Connection string účtu storage.
source Nastaví zdroj aktivační události. Slouží EventGrid k aktivaci objektu blob založeného na službě Event Grid, která poskytuje 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 tomu, abyste access objektu blob, který funkci aktivoval. Podrobnosti najdete v příkladu triggeru. source Pomocí vlastnosti nastavte zdroj aktivační události. Slouží EventGrid k aktivaci objektu blob založeného na službě Event Grid, která poskytuje 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
cesta Monitorování container. 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 Azure objekty blob. Viz Připojení.
zdroj Nastaví zdroj aktivační události. Slouží EventGrid k aktivaci objektu blob založeného na službě Event Grid, která poskytuje 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
typ Musí být nastavena na blobTriggerhodnotu . Tato vlastnost se nastaví automaticky při vytváření triggeru v Azure portal.
směr Musí být nastavena na inhodnotu . Tato vlastnost se nastaví automaticky při vytváření triggeru v 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.
cesta Monitorování container. 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 Azure objekty blob. Viz Připojení.
zdroj Nastaví zdroj aktivační události. Slouží EventGrid k aktivaci objektu blob založeného na službě Event Grid, která poskytuje 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.

Metadatové informace

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 Typ 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 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}");
} 

Metadatové informace

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}`);

Metadatové informace

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. Objekty blob 6.0.0 nebo novější a závislosti common pro vazby typů 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 Konkurzence a využití paměti.

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

K určení storage účtu, který se má použít, můžete také použít StorageAccountAttribute. Můžete to udělat, když potřebujete použít jiný účet storage než jiné funkce v knihovně. Konstruktor přebírá název nastavení aplikace, které obsahuje storage connection string. 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 storage, který se má použít, je určen 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í storage účet aplikace funkcí, který je definovaný v nastavení aplikace AzureWebJobsStorage.

Poznámka:

Podpora vazby na typy sad SDK je aktuálně ve verzi Preview a je omezená na Azure Blob Storage SDK. Další informace najdete v tématu Typy sad SDK v referenčním článku jazyka Java.

Access data objektu blob jako první argument funkce.

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

Access data objektu blob prostřednictvím parametru zadaného jako InputStream. Podrobnosti najdete v příkladu triggeru.

Funkce také podporují vazby typů sady Python SDK pro Azure Blob storage, které umožňují pracovat s daty objektů blob pomocí těchto základních typů sady SDK:

Poznámka:

Podporují se pouze synchronní typy sad SDK.

Důležité

Podpora typů sad SDK pro Python je obecně dostupná 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:

  • Název nastavení aplikace obsahujícího connection string
  • Název sdílené předpony pro více nastavení aplikace, společně definující připojení založené na identitě.

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

Připojovací řetězec

Pokud chcete získat connection string, postupujte podle pokynů uvedených v tématu Spravování storage klíče účtu access. Connection string musí být pro účet storage pro obecné účely, nikoli účet Blob storage.

Tato connection string by měla být uložena v nastavení aplikace s názvem, který odpovídá hodnotě zadané connection vlastnosti 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 Functions použije výchozí Storage connection string v nastavení aplikace s názvem AzureWebJobsStorage.

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

Pokud používáte version 5.x nebo vyšší rozšíření (bundle 3.x nebo vyšší pro jiné než .NET zásobníky jazyků), místo použití connection string s tajným kódem, Aplikaci můžete mít pomocí identity 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 na AzureWebJobsStorage, přečtěte si téma Pojení k hostování storage s identitou. 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>__serviceUri 1 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 do fronty zapíše objekty blob poison objekty blob. Ve formuláři serviceUriAzureWebJobsStorage 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 storage 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 Storage Přispěvatel dat fronty.

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

Spravovaná identita přiřazená uživatelem

Pokud chcete použít spravovanou identitu přiřazenou uživatelem, přidejte credentialclientId kromě identifikátoru URI služby také vlastnosti a vlastnosti:

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. https://mystorageaccount.blob.core.windows.net
Identifikátor URI služby Queue <CONNECTION_NAME_PREFIX>__queueServiceUri Identifikátor URI roviny dat služby fronty (vyžaduje se pro triggery objektů blob). https://mystorageaccount.queue.core.windows.net
Credential <CONNECTION_NAME_PREFIX>__credential Musí být nastavena na managedidentityhodnotu . managedidentity
ID klienta <CONNECTION_NAME_PREFIX>__clientId ID klienta uživatelsky přiřazené spravované identity. 00000000-0000-0000-0000-000000000000

Pokud například vaše konfigurace vazby určuje connection = "BlobStorageConnection", nakonfigurujete následující nastavení aplikace:

{
    "BlobStorageConnection__blobServiceUri": "https://mystorageaccount.blob.core.windows.net",
    "BlobStorageConnection__queueServiceUri": "https://mystorageaccount.queue.core.windows.net",
    "BlobStorageConnection__credential": "managedidentity",
    "BlobStorageConnection__clientId": "00000000-0000-0000-0000-000000000000"
}

Návod

Spravované identity přiřazené uživatelem se doporučují pro produkční scénáře, ve kterých potřebujete jemně odstupňovanou kontrolu nad oprávněními identit napříč několika prostředky.

Při hostování ve službě Azure Functions používají připojení založená na identitách managed identity. 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 credential vlastnostmiclientID. 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 Azure služeb to znamená, že potřebujete assignovat 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 access kontejneru objektů blob za běhu. Role správy, jako je Owner, nestačí. Následující tabulka uvádí 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í
Spouštěč vlastník dat objektu blob StorageandStorage Přispěvatel dat fronty1

Navíc musí být udělena také připojení AzureWebJobsStorage.2
Vstupní vazba Storage Čtečka dat objektů blob
Výstupní vazba vlastník dat objektů blob Storage

1 Trigger objektu blob zpracovává selhání napříč několika opakováními zápisem objektů blob poison objektů blob do fronty v účtu storage 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í se týkají vlastníka dat objektů blob Storage> Storage Přispěvatel dat fronty a role< přispěvatele účtů Storage/c2>. Další informace najdete v tématu Pojení k hostování storage s identitou.

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.

Návod

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 blobname v kódu funkce jsou blobextension 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 Storage se vytvářejí na základě "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 App Service s povoleným Always On, 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 blob storage najdete v tématu Trigger v kontejneru 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 v kontejneru s názvem azure-webjobs-hosts v účtu Azure storage vaší aplikace funkcí (definované nastavením aplikace AzureWebJobsStorage). 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ž se funkce triggeru objektu blob pro daný objekt blob nezdaří, Azure Functions opakování této funkce celkem pětkrát.

Pokud všech pět pokusů selže, Azure Functions přidá zprávu do fronty Storage 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)
  • Název kontejneru
  • 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 najdete v tématu Binding types.

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í. 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 Storage rozšíření, které používáte.

Při použití verze 5.0.0 rozšíření Storage nebo novější verze řídíte souběžnost pomocí nastavení maxDegreeOfParallelism v konfiguraci blobs 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 host.json.

Další kroky