Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met de uitvoerbinding kunt u blobopslaggegevens in een Azure-functie wijzigen en verwijderen.
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
Go-ondersteuning is momenteel niet beschikbaar voor deze binding.
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. Het aanmaken van een blob in de testsamples-triggercontainer activeert de functie. 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.
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace SampleApp
{
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";
}
}
}
Deze sectie bevat de volgende voorbeelden:
HTTP-trigger, met behulp van OutputBinding (Java)
In het volgende voorbeeld ziet u een Java-functie die gebruikmaakt van de HttpTrigger aantekening om een parameter te ontvangen die de naam van een bestand in een blob-opslagcontainer bevat. De BlobInput aantekening leest vervolgens het bestand en geeft de inhoud door aan de functie als een byte[]. De BlobOutput aantekening wordt gekoppeld OutputBinding outputItem, die vervolgens door de functie wordt gebruikt om de inhoud van de invoerblob naar de geconfigureerde opslagcontainer te schrijven.
@FunctionName("copyBlobHttp")
@StorageAccount("Storage_Account_Connection_String")
public HttpResponseMessage copyBlobHttp(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@BlobInput(
name = "file",
dataType = "binary",
path = "samples-workitems/{Query.file}")
byte[] content,
@BlobOutput(
name = "target",
path = "myblob/{Query.file}-CopyViaHttp")
OutputBinding<String> outputItem,
final ExecutionContext context) {
// Save blob to outputItem
outputItem.setValue(new String(content, StandardCharsets.UTF_8));
// build HTTP response with size of requested blob
return request.createResponseBuilder(HttpStatus.OK)
.body("The size of \"" + request.getQueryParameters().get("file") + "\" is: " + content.length + " bytes")
.build();
}
Wachtrijtrigger, met behulp van functie-retourwaarde (Java)
In het volgende voorbeeld ziet u een Java-functie die gebruikmaakt van de QueueTrigger aantekening om een bericht te ontvangen met de naam van een bestand in een blobopslagcontainer. De BlobInput aantekening leest vervolgens het bestand en geeft de inhoud door aan de functie als een byte[]. De BlobOutput aantekening wordt gekoppeld aan de retourwaarde van de functie, die vervolgens door de runtime wordt gebruikt om de inhoud van de invoerblob naar de geconfigureerde opslagcontainer te schrijven.
@FunctionName("copyBlobQueueTrigger")
@StorageAccount("Storage_Account_Connection_String")
@BlobOutput(
name = "target",
path = "myblob/{queueTrigger}-Copy")
public String copyBlobQueue(
@QueueTrigger(
name = "filename",
dataType = "string",
queueName = "myqueue-items")
String filename,
@BlobInput(
name = "file",
path = "samples-workitems/{queueTrigger}")
String content,
final ExecutionContext context) {
context.getLogger().info("The content of \"" + filename + "\" is: " + content);
return content;
}
Gebruik in de Runtime-bibliotheek van Java-functies de @BlobOutput aantekening voor functieparameters waarvan de waarde naar een object in blobopslag zou worden geschreven. Het parametertype moet OutputBinding<T> zijn, waarbij T elk native Java type of een gewoon oud Java object (POJO) is.
In het volgende voorbeeld ziet u een door de wachtrij geactiveerde TypeScript-functie waarmee een kopie van een blob wordt gemaakt. Een wachtrijbericht met de naam van de te kopiëren blob activeert de functie. De nieuwe blob heeft de naam {originalblobname}-Copy.
import { app, input, InvocationContext, output } from '@azure/functions';
const blobInput = input.storageBlob({
path: 'samples-workitems/{queueTrigger}',
connection: 'MyStorageConnectionAppSetting',
});
const blobOutput = output.storageBlob({
path: 'samples-workitems/{queueTrigger}-Copy',
connection: 'MyStorageConnectionAppSetting',
});
export async function storageQueueTrigger1(queueItem: unknown, context: InvocationContext): Promise<unknown> {
return context.extraInputs.get(blobInput);
}
app.storageQueue('storageQueueTrigger1', {
queueName: 'myqueue-items',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [blobInput],
return: blobOutput,
handler: storageQueueTrigger1,
});
In het volgende voorbeeld ziet u een door een wachtrij geactiveerde JavaScript-functie waarmee een kopie van een blob wordt gemaakt. Een wachtrijbericht met de naam van de te kopiëren blob activeert de functie. De nieuwe blob heeft de naam {originalblobname}-Copy.
const { app, input, output } = require('@azure/functions');
const blobInput = input.storageBlob({
path: 'samples-workitems/{queueTrigger}',
connection: 'MyStorageConnectionAppSetting',
});
const blobOutput = output.storageBlob({
path: 'samples-workitems/{queueTrigger}-Copy',
connection: 'MyStorageConnectionAppSetting',
});
app.storageQueue('storageQueueTrigger1', {
queueName: 'myqueue-items',
connection: 'MyStorageConnectionAppSetting',
extraInputs: [blobInput],
return: blobOutput,
handler: (queueItem, context) => {
return context.extraInputs.get(blobInput);
},
});
In het volgende voorbeeld ziet u hoe u een kopie van een binnenkomende blob maakt als uitvoer van een PowerShell-functie.
In het configuratiebestand van de functie (function.json) wordt de trigger eigenschap metagegevens gebruikt om de naam van de uitvoerblob in de path eigenschappen op te geven.
Notitie
Als u oneindige lussen wilt voorkomen, moet u ervoor zorgen dat uw invoer- en uitvoerpaden verschillen.
{
"bindings": [
{
"name": "myInputBlob",
"path": "data/{trigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in",
"type": "blobTrigger"
},
{
"name": "myOutputBlob",
"type": "blob",
"path": "data/copy/{trigger}",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
}
],
"disabled": false
}
Dit is de PowerShell-code:
# Input bindings are passed in via param block.
param([byte[]] $myInputBlob, $TriggerMetadata)
Write-Host "PowerShell Blob trigger function Processed blob Name: $($TriggerMetadata.Name)"
Push-OutputBinding -Name myOutputBlob -Value $myInputBlob
In het volgende voorbeeld ziet u blobinvoer- en uitvoerbindingen. Het voorbeeld is afhankelijk van of u het python-programmeermodel v1 of v2 gebruikt.
Met de code wordt een kopie van een blob gemaakt.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="BlobOutput1")
@app.route(route="file")
@app.blob_input(arg_name="inputblob",
path="sample-workitems/test.txt",
connection="<BLOB_CONNECTION_SETTING>")
@app.blob_output(arg_name="outputblob",
path="newblob/test.txt",
connection="<BLOB_CONNECTION_SETTING>")
def main(req: func.HttpRequest, inputblob: str, outputblob: func.Out[str]):
logging.info(f'Python Queue trigger function processed {len(inputblob)} bytes')
outputblob.set(inputblob)
return "ok"
Kenmerken
Zowel in-processals geïsoleerde werkproces C#-bibliotheken gebruiken kenmerk 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 BlobOutputAttribute constructor 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. |
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_input en blob_output decorators de Blob Storage-triggers:
| Eigenschappen | Description |
|---|---|
arg_name |
De naam van de variabele die de blob in functiecode vertegenwoordigt. |
path |
Het pad naar de blob voor de blob_input decorator is de blob gelezen. Voor de blob_output decorator is dit de uitvoer of kopie van de invoerblob. |
connection |
De verbindingsreeks van het opslagaccount. |
dataType |
Voor dynamisch getypte talen geeft u het onderliggende gegevenstype op. Mogelijke waarden zijn string, binaryof stream. Raadpleeg de concepten voor triggers en bindingen voor meer informatie. |
Zie de sectie Configuratie voor Python-functies die zijn gedefinieerd met behulp van function.json.
Aantekeningen
Het @BlobOutput kenmerk geeft u toegang tot de blob die de functie heeft geactiveerd. Als u een bytematrix gebruikt met het kenmerk, stelt u deze in dataType op binary. Raadpleeg het uitvoervoorbeeld voor meer informatie.
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 output.storageBlob() methode is doorgegeven.
| Eigenschappen | Description |
|---|---|
| path | Het pad naar de blobcontainer. |
| verbinding | De naam van een app-instelling of verzameling die aangeeft hoe verbinding moet worden gemaakt met Azure Blobs. Zie verbindingen. |
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.
| Eigenschappen | Description |
|---|---|
| type | Moet worden ingesteld op blob. |
| direction | Moet worden ingesteld op out een uitvoerbinding. Uitzonderingen worden vermeld in de sectie Gebruik . |
| name | De naam van de variabele die de blob in functiecode vertegenwoordigt. Ingesteld om $return te verwijzen naar de retourwaarde van de functie. |
| path | Het pad naar de blobcontainer. |
| verbinding | De naam van een app-instelling of verzameling die aangeeft hoe verbinding moet worden gemaakt met Azure Blobs. Zie verbindingen. |
Zie de sectie Voorbeeld voor volledige voorbeelden.
Gebruik
De bindingstypen die door de blob-uitvoer worden ondersteund, zijn afhankelijk van de versie van het extensiepakket en de C#-modaliteit die wordt gebruikt in uw functie-app.
Wanneer u wilt dat de functie naar één blob schrijft, kan de blob-uitvoerbinding worden gekoppeld 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 | Een object dat de inhoud van een JSON-blob vertegenwoordigt. Functions probeert een normaal oud CLR-objecttype (POCO) te serialiseren in JSON-gegevens. |
Wanneer u wilt dat de functie naar meerdere blobs schrijft, kan de blob-uitvoerbinding worden gekoppeld aan de volgende typen:
| Type | Description |
|---|---|
T[] waarbij T een van de bindingstypen voor één blob-uitvoer is |
Een matrix met inhoud voor meerdere blobs. Elke vermelding vertegenwoordigt de inhoud van één blob. |
Voor andere uitvoerscenario's maakt en gebruikt u rechtstreeks een BlobClient of BlobContainerClient met andere typen van Azure.Storage.Blobs. Zie Azure-clients registreren voor een voorbeeld van het gebruik van afhankelijkheidsinjectie om een clienttype te maken op basis van de Azure SDK.
Binden aan stringof Byte[] wordt alleen aanbevolen wanneer de blobgrootte klein is. Het gebruik van deze typen wordt aanbevolen omdat de volledige inhoud van de blob 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
BlobTriggerhetConnectionkenmerk. - Het
StorageAccountkenmerk dat is toegepast op dezelfde parameter als hetBlobTriggerkenmerk. - Het
StorageAccountkenmerk dat is toegepast op de functie. - Het
StorageAccountkenmerk dat is toegepast op de klasse. - Het standaardopslagaccount voor de functie-app, dat is gedefinieerd in de
AzureWebJobsStoragetoepassingsinstelling.
Het @BlobOutput kenmerk geeft u toegang tot de blob die de functie heeft geactiveerd. Als u een bytematrix gebruikt met het kenmerk, stelt u deze in dataType op binary. Raadpleeg het uitvoervoorbeeld voor meer informatie.
Open de blobgegevens via een parameter die overeenkomt met de naamparameter van de binding in het function.json-bestand .
U kunt functieparameters declareren als de volgende typen om naar blobopslag te schrijven:
- Tekenreeksen als
func.Out[str] - Streams als
func.Out[func.InputStream]
Raadpleeg het uitvoervoorbeeld voor meer informatie.
Connecties
De connection eigenschap wordt ingesteld op een sleutel in applicatieinstellingen die een waarde teruggeeft die door de Functions-runtime wordt gebruikt om verbinding te maken met het opslagaccount dat door de extensie wordt gebruikt. De waarde van de connectie-eigenschapsinstelling hangt af van het type verbinding:
-
Beheerde identiteitsverbinding: De
connectioneigenschap wordt<CONNECTION_NAME_PREFIX>gedeeld door een groep instellingen die samen een identiteitsgebaseerde verbinding met het opslagaccount definiëren. Voor meer informatie, zie Definieer identiteitsverbindingen. -
Key Vault-referentie: De
connectionproperty-instelling geeft een Azure Key Vault-referentie terug naar de locatie waar de verbindingsreeks centraal wordt onderhouden. Voor meer informatie, zie Define Key Vault-verbindingen. -
App Configuration referentie: De
connectionproperty-instelling geeft een Azure App Configuration-referentie terug die een verbindingsreeks of een Key Vault-referentie teruggeeft. Voor meer informatie, zie Azure App Configuration in het artikel over verbindingen. -
Connection string: De
connectionproperty-instelling geeft de daadwerkelijke storage account verbindingsreeks terug. Omdat de verbindingsreeks gedeelde geheime sleutels bevat, zou je moeten overwegen een managed identity-verbinding te gebruiken, waar mogelijk. Voor meer informatie, zie Verbindingen definiëren.
Voor meer informatie over bindingsverbindingen, zie Verbinding beheren in Azure Functions. Als u een verbindingsreeks wilt verkrijgen, volgt u de stappen in Toegangssleutels voor het opslagaccount beheren.
Wanneer je een sleutel of sleutelprefix met de naam connection of een lege string insteltAzureWebJobsStorage, gebruikt de binding-extensie het standaard host-opslagaccount. Voor meer informatie, zie Optimaliseer opslagprestaties.
Uitzonderingen en retourcodes
| Binding | Verwijzing |
|---|---|
| Blob | Blob-foutcodes |
| Blob, Tabel, Wachtrij | Foutcodes voor opslag |
| Blob, Tabel, Wachtrij | Problemen oplossen |