Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.*.
Důležité
Support pro model v procesu skončí 10. listopadu 2026. Důrazně doporučujeme migrovat aplikace do izolovaného modelu pracovních procesů pro plnou podporu.
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. |
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
BlobTriggeratributuConnection. - Atribut
StorageAccountpoužitý na stejný parametr jakoBlobTriggeratribut. - Atribut
StorageAccountpoužitý na funkci. - Atribut
StorageAccountpouž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 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
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 (
BlockBlobneboPageBlob) - 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 (
BlockBlobneboPageBlob) - 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.