Azure Blob Storage-trigger voor Azure Functions
De Blob Storage-trigger start een functie wanneer een nieuwe of bijgewerkte blob wordt gedetecteerd. De blob-inhoud wordt geleverd als invoer voor de functie.
Tip
Er zijn verschillende manieren om uw functiecode uit te voeren op basis van wijzigingen in blobs in een opslagcontainer. Als u ervoor kiest om de Blob Storage-trigger te gebruiken, moet u er rekening mee houden dat er twee implementaties worden aangeboden: een op polling gebaseerde implementatie (waarnaar in dit artikel wordt verwezen) en een op gebeurtenissen gebaseerde implementatie. Het is raadzaam om de implementatie op basis van gebeurtenissen te gebruiken omdat deze een lagere latentie heeft dan de andere. Het Flex Consumption-abonnement ondersteunt ook alleen de blobopslagtrigger op basis van gebeurtenissen.
Zie Werken met blobs voor meer informatie over de verschillen tussen de twee implementaties van de Blob Storage-trigger en andere triggeropties.
Zie het overzicht voor informatie over het instellen en configureren van details.
Belangrijk
In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de ontwikkelaarshandleiding voor Azure Functions Node.js voor meer informatie over hoe het v4-model werkt. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.
Azure Functions ondersteunt twee programmeermodellen voor Python. De manier waarop u uw bindingen definieert, is afhankelijk van het gekozen programmeermodel.
Met het Python v2-programmeermodel kunt u bindingen definiëren met behulp van decorators rechtstreeks in uw Python-functiecode. Zie de Ontwikkelaarshandleiding voor Python voor meer informatie.
Dit artikel ondersteunt beide programmeermodellen.
Opmerking
U kunt een C#-functie maken met behulp van een van de volgende C#-modi:
- Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en .NET Framework. Extensies voor geïsoleerde werkprocesfuncties maken gebruik van
Microsoft.Azure.Functions.Worker.Extensions.*
naamruimten. - In-process model: gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime. In een variatie van dit model kunnen functies worden uitgevoerd met behulp van C#-scripting. Dit wordt voornamelijk ondersteund voor het bewerken van de C#-portal. Extensies voor in-process-functies maken gebruik van
Microsoft.Azure.WebJobs.Extensions.*
naamruimten.
Belangrijk
De ondersteuning wordt beëindigd voor het in-process model op 10 november 2026. We raden u ten zeerste aan uw apps te migreren naar het geïsoleerde werkrolmodel voor volledige ondersteuning.
Het volgende voorbeeld is een C#-functie die wordt uitgevoerd in een geïsoleerd werkproces en een blobtrigger gebruikt met zowel blob-invoer- als blobuitvoer-blobbindingen. De functie wordt geactiveerd door het maken van een blob in de container test-samples-trigger . Het leest een tekstbestand uit de test-samples-invoercontainer en maakt een nieuw tekstbestand in een uitvoercontainer op basis van de naam van het geactiveerde bestand.
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";
}
}
Met deze functie wordt een logboek geschreven wanneer een blob wordt toegevoegd of bijgewerkt in de myblob
container.
@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");
}
In het volgende voorbeeld ziet u een TypeScript-code voor een blobtrigger. De functie schrijft een logboek wanneer een blob wordt toegevoegd of bijgewerkt in de samples-workitems
container.
Met de tekenreeks {name}
in het pad van de blobtrigger samples-workitems/{name}
wordt een bindingsexpressie gemaakt die u in functiecode kunt gebruiken voor toegang tot de bestandsnaam van de triggerende blob. Zie Blob-naampatronen verderop in dit artikel voor meer informatie.
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,
});
In het volgende voorbeeld ziet u een JavaScript-code voor een blobtrigger. De functie schrijft een logboek wanneer een blob wordt toegevoegd of bijgewerkt in de samples-workitems
container.
Met de tekenreeks {name}
in het pad van de blobtrigger samples-workitems/{name}
wordt een bindingsexpressie gemaakt die u in functiecode kunt gebruiken voor toegang tot de bestandsnaam van de triggerende blob. Zie Blob-naampatronen verderop in dit artikel voor meer informatie.
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`
);
},
});
In het volgende voorbeeld ziet u hoe u een functie maakt die wordt uitgevoerd wanneer een bestand wordt toegevoegd aan source
de blobopslagcontainer.
Het functieconfiguratiebestand (function.json) bevat een binding met de type
van blobTrigger
en direction
ingesteld op in
.
{
"bindings": [
{
"name": "InputBlob",
"type": "blobTrigger",
"direction": "in",
"path": "source/{name}",
"connection": "MyStorageAccountConnectionString"
}
]
}
Hier volgt de bijbehorende code voor het bestand run.ps1 .
param([byte[]] $InputBlob, $TriggerMetadata)
Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"
In dit voorbeeld worden SDK-typen gebruikt om rechtstreeks toegang te krijgen tot het onderliggende BlobClient
object dat wordt geleverd door de Blob Storage-trigger:
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)}"
)
Zie de ContainerClient
en StorageStreamDownloader
voorbeelden voor voorbeelden van het gebruik van andere SDK-typen.
Zie SDK-typebindingen voor meer informatie, waaronder het inschakelen van SDK-typebindingen in uw project.
In dit voorbeeld worden gegevens van de binnenkomende blobmetagegevens in een logboek opgeslagen.
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")
Kenmerken
Zowel in-process als geïsoleerde werkproces C#-bibliotheken gebruiken het kenmerk BlobAttribute om de functie te definiëren. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand, zoals beschreven in de handleiding voor C#-scripts.
De constructor van het kenmerk gebruikt de volgende parameters:
Parameter | Description |
---|---|
BlobPath | Het pad naar de blob. |
Verbinding | De naam van een app-instelling of verzameling die aangeeft hoe verbinding moet worden gemaakt met Azure Blobs. Zie verbindingen. |
Toegang | Geeft aan of u gaat lezen of schrijven. |
Bron | Hiermee stelt u de bron van de triggering-gebeurtenis in. Gebruik BlobTriggerSource.EventGrid deze functie voor een op Event Grid gebaseerde blobtrigger, die veel lagere latentie biedt. De standaardinstelling is BlobTriggerSource.LogsAndContainerScan , die gebruikmaakt van het standaard pollingmechanisme om wijzigingen in de container te detecteren. |
Hier volgt een BlobTrigger
kenmerk in een methodehandtekening:
[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)
Wanneer u lokaal ontwikkelt, voegt u uw toepassingsinstellingen toe aan het local.settings.json-bestand in de Values
verzameling.
Decorators
Is alleen van toepassing op het Python v2-programmeermodel.
Voor Python v2-functies die zijn gedefinieerd met decorators, definiëren de volgende eigenschappen op de blob_trigger
decorator de Blob Storage-trigger:
Eigenschappen | Beschrijving |
---|---|
arg_name |
Declareert de parameternaam in de functiehandtekening. Wanneer de functie wordt geactiveerd, heeft de waarde van deze parameter de inhoud van het wachtrijbericht. |
path |
De container die moet worden bewaakt. Dit kan een blobnaampatroon zijn. |
connection |
De verbindingsreeks van het opslagaccount. |
source |
Hiermee stelt u de bron van de triggering-gebeurtenis in. Gebruik EventGrid deze functie voor een op Event Grid gebaseerde blobtrigger, die veel lagere latentie biedt. De standaardinstelling is LogsAndContainerScan , die gebruikmaakt van het standaard pollingmechanisme om wijzigingen in de container te detecteren. |
Zie de sectie Configuratie voor Python-functies die zijn gedefinieerd met behulp van function.json.
Aantekeningen
Het @BlobTrigger
kenmerk wordt gebruikt om u toegang te geven tot de blob die de functie heeft geactiveerd. Raadpleeg het triggervoorbeeld voor meer informatie. Gebruik de source
eigenschap om de bron van de triggering-gebeurtenis in te stellen. Gebruik EventGrid
deze functie voor een op Event Grid gebaseerde blobtrigger, die veel lagere latentie biedt. De standaardinstelling is LogsAndContainerScan
, die gebruikmaakt van het standaard pollingmechanisme om wijzigingen in de container te detecteren. |
Configuratie
Is alleen van toepassing op het Python v1-programmeermodel.
In de volgende tabel worden de eigenschappen uitgelegd die u kunt instellen voor het options
object dat aan de app.storageBlob()
methode is doorgegeven.
Eigenschappen | Beschrijving |
---|---|
path | De container die moet worden bewaakt. Dit kan een blobnaampatroon zijn. |
verbinding | De naam van een app-instelling of verzameling die aangeeft hoe verbinding moet worden gemaakt met Azure Blobs. Zie verbindingen. |
bron | Hiermee stelt u de bron van de triggering-gebeurtenis in. Gebruik EventGrid deze functie voor een op Event Grid gebaseerde blobtrigger, die veel lagere latentie biedt. De standaardinstelling is LogsAndContainerScan , die gebruikmaakt van het standaard pollingmechanisme om wijzigingen in de container te detecteren. |
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.
function.json-eigenschap | Beschrijving |
---|---|
type | Moet worden ingesteld op blobTrigger . Deze eigenschap wordt automatisch ingesteld wanneer u de trigger maakt in de Azure-portal. |
direction | Moet worden ingesteld op in . Deze eigenschap wordt automatisch ingesteld wanneer u de trigger maakt in de Azure-portal. Uitzonderingen worden vermeld in de sectie Gebruik . |
name | De naam van de variabele die de blob in functiecode vertegenwoordigt. |
path | De container die moet worden bewaakt. Dit kan een blobnaampatroon zijn. |
verbinding | De naam van een app-instelling of verzameling die aangeeft hoe verbinding moet worden gemaakt met Azure Blobs. Zie verbindingen. |
bron | Hiermee stelt u de bron van de triggering-gebeurtenis in. Gebruik EventGrid deze functie voor een op Event Grid gebaseerde blobtrigger, die veel lagere latentie biedt. De standaardinstelling is LogsAndContainerScan , die gebruikmaakt van het standaard pollingmechanisme om wijzigingen in de container te detecteren. |
Zie de sectie Voorbeeld voor volledige voorbeelden.
Metagegevens
De blob-trigger biedt verschillende metagegevenseigenschappen. Deze eigenschappen kunnen worden gebruikt als onderdeel van bindingsexpressies in andere bindingen of als parameters in uw code. Deze waarden hebben dezelfde semantiek als het type CloudBlob .
Eigenschap | Type | Description |
---|---|---|
BlobTrigger |
string |
Het pad naar de activeringsblob. |
Uri |
System.Uri |
De URI van de blob voor de primaire locatie. |
Properties |
BlobProperties | De systeemeigenschappen van de blob. |
Metadata |
IDictionary<string,string> |
De door de gebruiker gedefinieerde metagegevens voor de blob. |
In het volgende voorbeeld wordt het pad naar de triggerende blob, inclusief de container, in een logboek opgeslagen:
public static void Run(string myBlob, string blobTrigger, ILogger log)
{
log.LogInformation($"Full blob path: {blobTrigger}");
}
Metagegevens
De blob-trigger biedt verschillende metagegevenseigenschappen. Deze eigenschappen kunnen worden gebruikt als onderdeel van bindingsexpressies in andere bindingen of als parameters in uw code.
Eigenschappen | Beschrijving |
---|---|
blobTrigger |
Het pad naar de activeringsblob. |
uri |
De URI van de blob voor de primaire locatie. |
properties |
De systeemeigenschappen van de blob. |
metadata |
De door de gebruiker gedefinieerde metagegevens voor de blob. |
Metagegevens kunnen worden verkregen uit de triggerMetadata
eigenschap van het opgegeven context
object, zoals wordt weergegeven in het volgende voorbeeld, waarin het pad naar de triggerende blob (blobTrigger
), inclusief de container, wordt opgeslagen:
context.log(`Full blob path: ${context.triggerMetadata.blobTrigger}`);
Metagegevens
Metagegevens zijn beschikbaar via de $TriggerMetadata
parameter.
Gebruik
De bindingstypen die door de Blob-trigger worden ondersteund, zijn afhankelijk van de versie van het extensiepakket en de C#-modaliteit die wordt gebruikt in uw functie-app.
De blobtrigger kan worden gebonden aan de volgende typen:
Type | Description |
---|---|
string |
De blob-inhoud als een tekenreeks. Gebruik deze functie wanneer de blob-inhoud eenvoudige tekst is. |
byte[] |
De bytes van de blob-inhoud. |
JSON serialiseerbare typen | Wanneer een blob JSON-gegevens bevat, probeert Functions deSerialiseren van de JSON-gegevens in een niet-oud POCO-type (CLR-object). |
Stream1 | Een invoerstroom van de blob-inhoud. |
BlobClient1, BlockBlobClient1, PageBlobClient1, AppendBlobClient1, BlobBaseClient1 |
Een client die is verbonden met de blob. Deze set typen biedt het meeste beheer voor het verwerken van de blob en kan worden gebruikt om terug te schrijven naar de blob als de verbinding voldoende machtigingen heeft. |
1 Als u deze typen wilt gebruiken, moet u verwijzen naar Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 of hoger en de algemene afhankelijkheden voor SDK-typebindingen.
Binden aan string
of Byte[]
wordt alleen aanbevolen wanneer de blobgrootte klein is. Dit wordt aanbevolen omdat de volledige blob-inhoud in het geheugen wordt geladen. Gebruik voor de meeste blobs een Stream
of BlobClient
type. Zie Gelijktijdigheid en geheugengebruik voor meer informatie.
Als u een foutbericht krijgt wanneer u verbinding probeert te maken met een van de Typen Storage SDK, controleert u of u een verwijzing hebt naar de juiste Storage SDK-versie.
U kunt ook StorageAccountAttribute gebruiken om het te gebruiken opslagaccount op te geven. U kunt dit doen wanneer u een ander opslagaccount moet gebruiken dan andere functies in de bibliotheek. De constructor gebruikt de naam van een app-instelling die een opslag-verbindingsreeks bevat. Het kenmerk kan worden toegepast op het niveau van de parameter, methode of klasse. In het volgende voorbeeld ziet u klasseniveau en methodeniveau:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("BlobTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
....
}
Het te gebruiken opslagaccount wordt in de volgende volgorde bepaald:
- De eigenschap van
Connection
hetBlobTrigger
kenmerk. - Het
StorageAccount
kenmerk dat is toegepast op dezelfde parameter als hetBlobTrigger
kenmerk. - Het
StorageAccount
kenmerk dat is toegepast op de functie. - Het
StorageAccount
kenmerk dat is toegepast op de klasse. - Het standaardopslagaccount voor de functie-app, dat is gedefinieerd in de
AzureWebJobsStorage
toepassingsinstelling.
Het @BlobTrigger
kenmerk wordt gebruikt om u toegang te geven tot de blob die de functie heeft geactiveerd. Raadpleeg het triggervoorbeeld voor meer informatie.
Open de blobgegevens via een parameter die overeenkomt met de naamparameter van de binding in het function.json-bestand .
Toegang tot blobgegevens via de parameter die is getypt als InputStream. Raadpleeg het triggervoorbeeld voor meer informatie.
Functions ondersteunt ook Python SDK-typebindingen voor Azure Blob Storage, waarmee u met blobgegevens kunt werken met behulp van deze onderliggende SDK-typen:
Belangrijk
Ondersteuning voor SDK-typen voor Python is momenteel in preview en wordt alleen ondersteund voor het Python v2-programmeermodel. Zie SDK-typen in Python voor meer informatie.
Connecties
De connection
eigenschap is een verwijzing naar de omgevingsconfiguratie die aangeeft hoe de app verbinding moet maken met Azure Blobs. Het kan het volgende opgeven:
- De naam van een toepassingsinstelling met een verbindingsreeks
- De naam van een gedeeld voorvoegsel voor meerdere toepassingsinstellingen, samen het definiëren van een op identiteit gebaseerde verbinding.
Als de geconfigureerde waarde zowel een exacte overeenkomst is voor één instelling als een voorvoegselovereenkomst voor andere instellingen, wordt de exacte overeenkomst gebruikt.
Connection string
Als u een verbindingsreeks wilt verkrijgen, volgt u de stappen in Toegangssleutels voor het opslagaccount beheren. De verbindingsreeks moet zijn voor een opslagaccount voor algemeen gebruik, niet voor een Blob Storage-account.
Deze verbindingsreeks moet worden opgeslagen in een toepassingsinstelling met een naam die overeenkomt met de waarde die is opgegeven door de connection
eigenschap van de bindingsconfiguratie.
Als de naam van de app-instelling begint met 'AzureWebJobs', kunt u hier alleen de rest van de naam opgeven. Als u bijvoorbeeld instelt connection
op 'MyStorage', zoekt de Functions-runtime naar een app-instelling met de naam 'AzureWebJobsMyStorage'. Als u leeg laatconnection
, gebruikt de Functions-runtime de standaardopslag-verbindingsreeks in de app-instelling met de naamAzureWebJobsStorage
.
Op identiteit gebaseerde verbindingen
Als u versie 5.x of hoger van de extensie gebruikt (bundel 3.x of hoger voor non-.NET taalstacks), in plaats van een verbindingsreeks met een geheim te gebruiken, kunt u de app een Microsoft Entra-identiteit laten gebruiken. Als u een identiteit wilt gebruiken, definieert u instellingen onder een gemeenschappelijk voorvoegsel dat wordt toegewezen aan de connection
eigenschap in de trigger- en bindingsconfiguratie.
Als u 'AzureWebJobsStorage' instelt connection
, raadpleegt u Verbinding maken met hostopslag met een identiteit. Voor alle andere verbindingen vereist de extensie de volgende eigenschappen:
Eigenschappen | Sjabloon voor omgevingsvariabele | Beschrijving | Voorbeeldwaarde |
---|---|---|---|
Blob Service-URI | <CONNECTION_NAME_PREFIX>__serviceUri 1 |
De gegevensvlak-URI van de blobservice waarmee u verbinding maakt, met behulp van het HTTPS-schema. | <https:// storage_account_name.blob.core.windows.net> |
1 <CONNECTION_NAME_PREFIX>__blobServiceUri
kan als alias worden gebruikt. Als de verbindingsconfiguratie wordt gebruikt door een blobtrigger, blobServiceUri
moet u ook vergezeld gaan van queueServiceUri
. Zie hieronder.
Het serviceUri
formulier kan niet worden gebruikt wanneer de algemene verbindingsconfiguratie moet worden gebruikt in blobs, wachtrijen en/of tabellen. De URI kan alleen de blobservice aanwijzen. Als alternatief kunt u een URI opgeven die specifiek is bedoeld voor elke service, zodat één verbinding kan worden gebruikt. Als beide versies worden opgegeven, wordt het formulier voor meerdere services gebruikt. Als u de verbinding voor meerdere services wilt configureren in plaats van <CONNECTION_NAME_PREFIX>__serviceUri
, stelt u het volgende in:
Eigenschappen | Sjabloon voor omgevingsvariabele | Beschrijving | Voorbeeldwaarde |
---|---|---|---|
Blob Service-URI | <CONNECTION_NAME_PREFIX>__blobServiceUri |
De gegevensvlak-URI van de blobservice waarmee u verbinding maakt, met behulp van het HTTPS-schema. | <https:// storage_account_name.blob.core.windows.net> |
Wachtrijservice-URI (vereist voor blobtriggers2) | <CONNECTION_NAME_PREFIX>__queueServiceUri |
De gegevensvlak-URI van een wachtrijservice met behulp van het HTTPS-schema. Deze waarde is alleen nodig voor blobtriggers. | <https:// storage_account_name.queue.core.windows.net> |
2 De blobtrigger verwerkt fouten in meerdere nieuwe pogingen door gif-blobs naar een wachtrij te schrijven. In het serviceUri
formulier wordt de AzureWebJobsStorage
verbinding gebruikt. Bij het opgeven blobServiceUri
moet echter ook een wachtrijservice-URI worden opgegeven queueServiceUri
. Het is raadzaam om de service uit hetzelfde opslagaccount als de blobservice te gebruiken. U moet er ook voor zorgen dat de trigger berichten kan lezen en schrijven in de geconfigureerde wachtrijservice door een rol toe te wijzen zoals Inzender voor opslagwachtrijgegevens.
Andere eigenschappen kunnen worden ingesteld om de verbinding aan te passen. Zie Algemene eigenschappen voor op identiteit gebaseerde verbindingen.
Wanneer deze worden gehost in de Azure Functions-service, maken identiteitsverbindingen gebruik van een beheerde identiteit. De door het systeem toegewezen identiteit wordt standaard gebruikt, hoewel een door de gebruiker toegewezen identiteit kan worden opgegeven met de credential
en clientID
eigenschappen. Houd er rekening mee dat het configureren van een door de gebruiker toegewezen identiteit met een resource-id niet wordt ondersteund. Wanneer uw ontwikkelaarsidentiteit wordt uitgevoerd in andere contexten, zoals lokale ontwikkeling, wordt in plaats daarvan uw ontwikkelaarsidentiteit gebruikt, hoewel dit kan worden aangepast. Zie Lokale ontwikkeling met op identiteit gebaseerde verbindingen.
Toestemming verlenen aan de identiteit
Elke identiteit die wordt gebruikt, moet machtigingen hebben om de beoogde acties uit te voeren. Voor de meeste Azure-services betekent dit dat u een rol in Azure RBAC moet toewijzen met behulp van ingebouwde of aangepaste rollen die deze machtigingen bieden.
Belangrijk
Sommige machtigingen worden mogelijk weergegeven door de doelservice die niet nodig is voor alle contexten. Waar mogelijk moet u zich houden aan het principe van minimale bevoegdheid, waarbij de identiteit alleen vereiste bevoegdheden verleent. Als de app bijvoorbeeld alleen uit een gegevensbron moet kunnen lezen, gebruikt u een rol die alleen gemachtigd is om te lezen. Het zou ongepast zijn om een rol toe te wijzen die ook schrijfbewerkingen naar die service toestaat, omdat dit overmatige machtigingen zou zijn voor een leesbewerking. Op dezelfde manier wilt u ervoor zorgen dat de roltoewijzing alleen is afgestemd op de resources die moeten worden gelezen.
U moet een roltoewijzing maken die tijdens runtime toegang biedt tot uw blobcontainer. Beheerrollen zoals Eigenaar zijn niet voldoende. In de volgende tabel ziet u ingebouwde rollen die worden aanbevolen bij het gebruik van de Blob Storage-extensie in normale werking. Uw toepassing vereist mogelijk verdere machtigingen op basis van de code die u schrijft.
Bindingstype | Voorbeeld van ingebouwde rollen |
---|---|
Trigger | Eigenaar van opslagblobgegevens en Inzendervoor opslagwachtrijgegevens 1 Er moeten ook extra machtigingen worden verleend aan de AzureWebJobsStorage-verbinding.2 |
Invoerbinding | Lezer voor opslagblobgegevens |
Uitvoerbinding | Eigenaar van opslagblobgegevens |
1 De blobtrigger verwerkt fouten in meerdere nieuwe pogingen door gif-blobs naar een wachtrij te schrijven in het opslagaccount dat is opgegeven door de verbinding.
2 De AzureWebJobsStorage-verbinding wordt intern gebruikt voor blobs en wachtrijen die de trigger inschakelen. Als deze is geconfigureerd voor het gebruik van een op identiteit gebaseerde verbinding, heeft deze extra machtigingen nodig dan de standaardvereiste. De vereiste machtigingen vallen onder de rollen Eigenaar van opslagblobgegevens, Inzender voor opslagwachtrijgegevens en Inzender voor opslagaccounts. Zie Verbinding maken met hostopslag met een identiteit voor meer informatie.
Blob-naampatronen
U kunt een blobnaampatroon opgeven in de path
eigenschap in function.json of in de BlobTrigger
kenmerkconstructor. Het naampatroon kan een filter- of bindingsexpressie zijn. In de volgende secties worden voorbeelden gegeven.
Tip
Een containernaam kan geen resolver in het naampatroon bevatten.
Bestandsnaam en extensie ophalen
In het volgende voorbeeld ziet u hoe u afzonderlijk verbinding kunt maken met de bestandsnaam en extensie van de blob:
"path": "input/{blobname}.{blobextension}",
Als de blob de naam original-Blob1.txt heeft, zijn de waarden van de blobname
en blobextension
variabelen in functiecode original-Blob1 en txt.
Filteren op blobnaam
In het volgende voorbeeld worden alleen blobs geactiveerd in de input
container die beginnen met de tekenreeks 'original-':
"path": "input/original-{name}",
Als de blobnaam is original-Blob1.txt, is Blob1.txt
de waarde van de name
variabele in functiecode .
Filteren op bestandstype
Het volgende voorbeeld wordt alleen geactiveerd voor .png bestanden:
"path": "samples/{name}.png",
Filteren op accolades in bestandsnamen
Als u wilt zoeken naar accolades in bestandsnamen, escapet u de accolades met behulp van twee accolades. In het volgende voorbeeld wordt gefilterd op blobs met accolades in de naam:
"path": "images/{{20140101}}-{name}",
Als de blob -soundfile.mp3 heet{20140101}, wordt de name
variabele waarde in de functiecode soundfile.mp3.
Polling en latentie
Polling werkt als hybride tussen het inspecteren van logboeken en het uitvoeren van periodieke containerscans. Blobs worden gescand in groepen van 10.000 tegelijk met een vervolgtoken dat tussen intervallen wordt gebruikt. Als uw functie-app zich in het verbruiksabonnement bevindt, kan er een vertraging van 10 minuten optreden bij het verwerken van nieuwe blobs als een functie-app inactief is gegaan.
Waarschuwing
Opslaglogboeken worden op basis van 'best effort' gemaakt. Er is geen garantie dat alle gebeurtenissen worden vastgelegd. Onder bepaalde omstandigheden kunnen logboeken worden gemist.
Als u snellere of betrouwbaardere blobverwerking nodig hebt, kunt u overwegen om uw hosting over te schakelen naar een App Service-plan waarvoor AlwaysOn is ingeschakeld, wat kan leiden tot hogere kosten. U kunt ook overwegen een andere trigger te gebruiken dan de klassieke polling-blobtrigger. Zie Trigger in een blobcontainer voor meer informatie en een vergelijking van de verschillende triggeropties voor blobopslagcontainers.
Blob-ontvangstbevestigingen
De Azure Functions-runtime zorgt ervoor dat er meer dan één keer een blobtriggerfunctie wordt aangeroepen voor dezelfde nieuwe of bijgewerkte blob. Om te bepalen of een bepaalde blobversie is verwerkt, worden blob-ontvangstbevestigingen onderhouden.
Azure Functions slaat blobbevestigingen op in een container met de naam azure-webjobs-hosts in het Azure-opslagaccount voor uw functie-app (gedefinieerd door de app-instelling AzureWebJobsStorage
). Een blobbevestiging heeft de volgende informatie:
- De geactiveerde functie (
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
bijvoorbeeld:MyFunctionApp.Functions.CopyBlob
) - De containernaam
- Het blobtype (
BlockBlob
ofPageBlob
) - De naam van de blob
- De ETag (een blobversie-id, bijvoorbeeld:
0x8D1DC6E70A277EF
)
Als u het opnieuw verwerken van een blob wilt afdwingen, verwijdert u de blobbevestiging voor die blob uit de container azure-webjobs-hosts handmatig. Hoewel het opnieuw verwerken mogelijk niet onmiddellijk plaatsvindt, is het gegarandeerd dat het op een later tijdstip plaatsvindt. De scaninfo-blob in azure-webjobs-hosts/blobscaninfo kan worden bijgewerkt om onmiddellijk opnieuw te worden verwerkt. Alle blobs met een laatst gewijzigde tijdstempel nadat de LatestScan
eigenschap opnieuw wordt gescand.
Gif-blobs
Wanneer een blobtriggerfunctie mislukt voor een bepaalde blob, probeert Azure Functions die in totaal vijf keer standaard worden uitgevoerd.
Als alle vijf pogingen mislukken, voegt Azure Functions een bericht toe aan een Storage-wachtrij met de naam webjobs-blobtrigger-poison. Het maximum aantal nieuwe pogingen kan worden geconfigureerd. Dezelfde MaxDequeueCount-instelling wordt gebruikt voor het verwerken van gif-blob- en gifwachtrijberichten. Het wachtrijbericht voor gif-blobs is een JSON-object dat de volgende eigenschappen bevat:
- FunctionId (in de indeling
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
) - BlobType (
BlockBlob
ofPageBlob
) - ContainerName
- BlobName
- ETag (een blobversie-id, bijvoorbeeld:
0x8D1DC6E70A277EF
)
Geheugengebruik en gelijktijdigheid
Wanneer u verbinding maakt met een uitvoertype dat geen ondersteuning biedt voor streaming, zoals string
, of Byte[]
, moet de runtime de hele blob meer dan één keer in het geheugen laden tijdens de verwerking. Dit kan leiden tot een hoger geheugengebruik dan verwacht bij het verwerken van blobs. Gebruik indien mogelijk een stroomondersteunend type. Typeondersteuning is afhankelijk van de C#-modus en extensieversie. Zie Bindingstypen voor meer informatie.
Op dit moment moet de runtime de volledige blob meer dan één keer in het geheugen laden tijdens de verwerking. Dit kan leiden tot een hoger geheugengebruik dan verwacht bij het verwerken van blobs.
Geheugengebruik kan verder worden beïnvloed wanneer meerdere functie-exemplaren gelijktijdig blobgegevens verwerken. Als u geheugenproblemen ondervindt met behulp van een blobtrigger, kunt u overwegen het aantal gelijktijdige uitvoeringen te verminderen dat is toegestaan. Het verminderen van de gelijktijdigheid kan natuurlijk het neveneffect hebben van het verhogen van de achterstand van blobs die wachten om te worden verwerkt. De geheugenlimieten van uw functie-app zijn afhankelijk van het plan. Zie Servicelimieten voor meer informatie.
De manier waarop u het aantal gelijktijdige uitvoeringen kunt beheren, is afhankelijk van de versie van de opslagextensie die u gebruikt.
Wanneer u versie 5.0.0 van de Opslagextensie of een latere versie gebruikt, bepaalt u gelijktijdigheid door de maxDegreeOfParallelism
instelling in de configuratie van blobs in host.json te gebruiken.
Limieten gelden afzonderlijk voor elke functie die gebruikmaakt van een blobtrigger.
host.json-eigenschappen
Het bestand host.json bevat instellingen waarmee het gedrag van de blobtrigger wordt bepaald. Zie de sectie host.json instellingen voor meer informatie over beschikbare instellingen.