Azure Blob Storage-Ausgabebindung für Azure Functions

Die Ausgabebindung ermöglicht Ihnen das Ändern und Löschen von Blob Storage-Daten in einer Azure-Funktion.

Informationen zu Setup- und Konfigurationsdetails finden Sie in der Übersicht.

Wichtig

In diesem Artikel werden Registerkarten verwendet, um mehrere Versionen des Node.js-Programmiermodells zu unterstützen. Das v4-Modell ist allgemein verfügbar und bietet JavaScript- und TypeScript-Entwicklern eine flexiblere und intuitivere Erfahrung. Weitere Informationen zur Funktionsweise des v4-Modells finden Sie im Azure Functions Node.js-Entwicklerhandbuch. Weitere Informationen zu den Unterschieden zwischen v3 und v4 finden Sie im Migrationshandbuch.

Azure Functions unterstützt zwei Programmiermodelle für Python. Wie Sie Ihre Bindung definieren, hängt vom gewählten Python-Programmiermodell ab.

Mit dem Python v2-Programmiermodell können Sie Bindungen mithilfe von Decorators direkt im Python-Funktionscode definieren. Weitere Informationen finden Sie im Python Developer-Leitfaden.

In diesem Artikel werden beide Programmiermodelle unterstützt.

Beispiel

Go-Support ist derzeit nicht für diese Bindung verfügbar.

Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:

  • Isoliertes Workermodell: Kompilierte C#-Funktion, die in einem Workerprozess ausgeführt wird, der von der Runtime isoliert ist. Ein isolierter Workerprozess ist erforderlich, um C#-Funktionen zu unterstützen, die in LTS- und Nicht-LTS-Versionen von .NET und .NET Framework ausgeführt werden. Erweiterungen für isolierte Workerprozessfunktionen verwenden Microsoft.Azure.Functions.Worker.Extensions.*-Namespaces.
  • In-Process-Modell: Kompilierte C#-Funktion, die im gleichen Prozess wie die Functions-Runtime ausgeführt wird. In einer Variante dieses Modells kann Functions mithilfe von C#-Skripts ausgeführt werden. Dies wird hauptsächlich für die Bearbeitung im C#-Portal unterstützt. Erweiterungen für In-Process-Funktionen verwenden Microsoft.Azure.WebJobs.Extensions.*-Namespaces.

Wichtig

Die Unterstützung für das In-Process-Modell endet am 10. November 2026. Es wird dringend empfohlen, Ihre Apps zum isolierten Workermodell zu migrieren, um den vollständigen Support zu ermöglichen.

Das folgende Beispiel ist eine C#-Funktion, die in einem isolierten Workerprozess ausgeführt wird und einen Blobtrigger mit Blobbindungen für Blobeingabe und -ausgabe verwendet. Die Erstellung eines Blobs im Testsamples-Trigger-Container löst die Funktion aus. Sie liest eine Textdatei aus dem Container test-samples-input und erstellt basierend auf dem Namen der ausgelösten Datei eine neue Textdatei in einem Ausgabecontainer.

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

Dieser Abschnitt enthält folgende Beispiele:

HTTP-Trigger mit OutputBinding (Java)

Das folgende Beispiel zeigt eine Java-Funktion, die mithilfe der Anmerkung HttpTrigger einen Parameter mit dem Namen einer Datei in einem Blob Storage-Container empfängt. Die Anmerkung BlobInput liest dann die Datei und übergibt ihren Inhalt als byte[] an die Funktion. Die Anmerkung BlobOutput bindet an OutputBinding outputItem, das dann von der Funktion verwendet wird, um den Inhalt des Eingabeblobs in den konfigurierten Speichercontainer zu schreiben.

  @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();
  }

Warteschlangentrigger mit Funktionsrückgabewert (Java)

Das folgende Beispiel zeigt eine Java-Funktion, die mithilfe der QueueTrigger-Anmerkung eine Nachricht mit dem Namen einer Datei in einem Blob Storage-Container empfängt. Die Anmerkung BlobInput liest dann die Datei und übergibt ihren Inhalt als byte[] an die Funktion. Die BlobOutput-Anmerkung bindet an den Rückgabewert der Funktion, der dann von der Runtime verwendet wird, um den Inhalt des Eingabeblobs in den konfigurierten Speichercontainer zu schreiben.

  @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;
  }

Verwenden Sie die -Anmerkung in der @BlobOutput für Funktionsparameter, deren Wert in ein Objekt in Blob Storage geschrieben wird. Der Parametertyp sollte OutputBinding<T> sein, wobei T ein beliebiger nativer Java-Typ oder ein einfaches Java-Objekt (POJO) ist.

Das folgende Beispiel zeigt eine durch die Warteschlange ausgelöste TypeScript-Funktion, die eine Kopie eines Blobs erstellt. Eine Warteschlangennachricht, die den Namen des zu kopierenden Blobs enthält, löst die Funktion aus. Der Name des neuen Blobs lautet {Name des Originalblobs}-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,
});

Das folgende Beispiel zeigt eine durch die Warteschlange ausgelöste JavaScript-Funktion, die eine Kopie eines Blobs erstellt. Eine Warteschlangennachricht, die den Namen des zu kopierenden Blobs enthält, löst die Funktion aus. Der Name des neuen Blobs lautet {Name des Originalblobs}-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);
    },
});

Im folgenden Beispiel wird veranschaulicht, wie eine Kopie eines eingehenden Blob als Ausgabe einer PowerShell-Funktion erstellt wird.

In der Konfigurationsdatei der Funktion (function.json) wird die Metadateneigenschaft trigger verwendet, um den Ausgabeblobnamen in den path-Eigenschaften anzugeben.

Hinweis

Um unendliche Schleifen zu vermeiden, stellen Sie sicher, dass sich der Eingabe- und Ausgabepfad voneinander unterscheiden.

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

Dies ist der 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

Das folgende Beispiel zeigt Blobeingabe- und Blobausgabebindungen. Das Beispiel hängt davon ab, ob Sie das Python-Programmiermodell v1 oder v2 verwenden.

Der Code erstellt eine Kopie eines Blobs.

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"

Attribute

Von C#-Bibliotheken des Typs In-Process und Isolierter Workerprozess wird das Attribut verwendet, um die Funktion zu definieren. Das C#-Skript verwendet stattdessen eine Konfigurationsdatei function.json, wie im C#-Skript-Handbuch beschrieben.

Vom Konstruktor BlobOutputAttribute werden folgende Parameter akzeptiert:

Parameter BESCHREIBUNG
BlobPath Der Pfad des Blobs.
Connection Der Name einer App-Einstellung oder -Einstellungssammlung, die angibt, wie eine Verbindung mit Azure Blobs hergestellt wird. Siehe Verbindungen.

Wenn Sie die Entwicklung lokal ausführen, fügen Sie Ihre Anwendungseinstellungen in der Datei local.settings.json in der Values-Sammlung hinzu.

Decorator-Elemente

Gilt nur für das Python v2-Programmiermodell.

Für Python v2-Funktionen, die mithilfe von Decorators definiert wurden, definieren die folgenden Eigenschaften für die Decorators blob_input und blob_output die Blob Storage-Trigger:

Eigenschaft BESCHREIBUNG
arg_name Der Name der Variablen, die das Blob im Funktionscode darstellt.
path Der Pfad zum Blob Für den Decorator blob_input ist es der gelesene Blob. Für den Decorator blob_output handelt es sich um die Ausgabe oder Kopie des Eingabeblobs.
connection Die Verbindungszeichenfolge für das Speicherkonto.
dataType Gibt für dynamisch typisierte Sprachen den zugrunde liegenden Datentyp an. Mögliche Werte sind string, binary oder stream. Weitere Details finden Sie in den Konzepten für Trigger und Bindungen.

Informationen zu Python-Funktionen, die mithilfe von function.json definiert wurden, finden Sie im Abschnitt Konfiguration.

Anmerkungen

Das @BlobOutput-Attribut gewährt Ihnen Zugriff auf das Blob, das die Funktion ausgelöst hat. Wenn Sie ein Bytearray mit dem Attribut verwenden, legen Sie dataType auf binary fest. Weitere Detailinformationen finden Sie im Ausgabebeispiel.

Konfiguration

Gilt nur für das Python v1-Programmiermodell.

In der folgenden Tabelle werden die Eigenschaften erläutert, die Sie für das options-Objekt festlegen können, das an die output.storageBlob()-Methode übergeben wurde.

Eigenschaft BESCHREIBUNG
path Der Pfad zum Blobcontainer.
connection Der Name einer App-Einstellung oder -Einstellungssammlung, die angibt, wie eine Verbindung mit Azure Blobs hergestellt wird. Siehe Verbindungen.

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.

Eigenschaft BESCHREIBUNG
type Muss auf blob festgelegt sein.
direction Muss für eine Ausgabebindung auf out festgelegt werden. Ausnahmen sind im Abschnitt Verwendung angegeben.
name Der Name der Variablen, die das Blob im Funktionscode darstellt. Legen Sie diesen Wert auf $return fest, um auf den Rückgabewert der Funktion zu verweisen.
path Der Pfad zum Blobcontainer.
connection Der Name einer App-Einstellung oder -Einstellungssammlung, die angibt, wie eine Verbindung mit Azure Blobs hergestellt wird. Siehe Verbindungen.

Vollständige Beispiele finden Sie im Abschnitt „Beispiele“.

Verwendung

Die von der Blobausgabe unterstützten Bindungstypen hängen von der Version des Erweiterungspakets und der C#-Modalität ab, die in Ihrer Funktions-App verwendet wird.

Wenn die Funktion in ein einzelnes Blob schreiben soll, kann die Blobausgabebindung an die folgenden Typen gebunden werden:

type BESCHREIBUNG
string Den Blobinhalt als Zeichenfolge. Verwenden Sie diese Option, wenn der Inhalt des Blobs einfacher Text ist.
byte[] Die Bytes des Blobinhalts.
Serialisierbare JSON-Typen Ein Objekt, das den Inhalt eines JSON-Blobs darstellt. Functions versucht, einen POCO-Typ (Plain-Old CLR Object) in JSON-Daten zu serialisieren.

Wenn die Funktion in mehrere Nachrichten schreiben soll, kann die Blobausgabebindung an die folgenden Typen gebunden werden:

type BESCHREIBUNG
T[], wobei T einer der einzelnen Blob-Ausgabebindungstypen ist. Ein Array, das Inhalt für mehrere Blobs enthält. Jeder Eintrag stellt den Inhalt eines Blobs dar.

Erstellen und verwenden Sie für andere Ausgabeszenarien einen BlobClient oder BlobContainerClient mit anderen Typen von Azure.Storage.Blobs direkt. Ein Beispiel für die Verwendung der Abhängigkeitsinjektion zum Erstellen eines Clienttyps aus dem Azure SDK finden Sie unter Registrieren von Azure-Clients .

Die Bindung an string oder Byte[] wird nur bei kleinen Blobs empfohlen. Die Verwendung dieser Typen wird empfohlen, da der gesamte Inhalt des Blobs in den Speicher geladen wird. Für die meisten Blobs sollte der Typ Stream oder BlobClient verwendet werden. Weitere Informationen finden Sie unter Parallelität und Arbeitsspeichernutzung.

Wenn beim Versuch, eine Bindung an einen der Storage SDK-Typen einzurichten, ein Fehler auftritt, vergewissern Sie sich, dass Sie über einen Verweis auf die richtige Storage SDK-Version verfügen.

Sie können auch StorageAccountAttribute verwenden, um das zu verwendende Speicherkonto anzugeben. Sie können so vorgehen, wenn Sie ein anderes Speicherkonto als andere Funktionen in der Bibliothek verwenden müssen. Der Konstruktor akzeptiert den Namen einer App-Einstellung mit einer Speicherverbindungszeichenfolge. Das Attribut kann auf Parameter-, Methoden- oder Klassenebene angewendet werden. Das folgende Beispiel zeigt die Anwendung auf Klassen- und Methodenebene:

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

Das zu verwendende Speicherkonto wird anhand von Folgendem bestimmt (in der angegebenen Reihenfolge):

  • Die Eigenschaft BlobTrigger des Attributs Connection.
  • Das Attribut StorageAccount, das auf den gleichen Parameter angewendet wird wie das Attribut BlobTrigger.
  • Das Attribut StorageAccount, das auf die Funktion angewendet wird.
  • Das Attribut StorageAccount, das auf die Klasse angewendet wird.
  • Das Standardspeicherkonto für die Funktions-App, das in der AzureWebJobsStorage-Anwendungseinstellung definiert ist.

Das @BlobOutput-Attribut gewährt Ihnen Zugriff auf das Blob, das die Funktion ausgelöst hat. Wenn Sie ein Bytearray mit dem Attribut verwenden, legen Sie dataType auf binary fest. Weitere Detailinformationen finden Sie im Ausgabebeispiel.

Auf die Blobdaten greifen Sie zu, indem Sie den Wert direkt zurückgeben oder context.extraOutputs.set() verwenden.

Greifen Sie auf die Blobdaten über einen Parameter zu, der mit dem Namen übereinstimmt, der durch den name-Parameter der Bindung in der Datei function.json festgelegt ist.

Sie können Funktionsparameter als die folgenden Typen deklarieren, um Ausgaben in den Blob-Speicher zu schreiben:

  • Zeichenfolgen als func.Out[str]
  • Streams als func.Out[func.InputStream]

Weitere Detailinformationen finden Sie im Ausgabebeispiel.

Verbindungen

Die Eigenschaft connection wird in den Anwendungseinstellungen auf einen Schlüssel gesetzt, der einen Wert zurückgibt, der von der Functions-Laufzeit verwendet wird, um sich mit dem von der Erweiterung verwendeten Speicherkonto zu verbinden. Der Wert der Verbindungseigenschaftseinstellung hängt vom Verbindungstyp ab:

  • Managed Identity Connection: Die connection Eigenschaft wird <CONNECTION_NAME_PREFIX> von einer Gruppe von Settings geteilt, die zusammen eine identitätsbasierte Verbindung zum Speicherkonto definieren. Weitere Informationen finden Sie unter Identitätsverbindungen definieren.
  • Key Vault-Referenz: Die connection Property-Einstellung gibt eine Azure Key Vault-Referenz an den Ort zurück, an dem die Verbindungszeichenfolge zentral verwaltet wird. Weitere Informationen finden Sie unter Define Key Vault connections.
  • App Configuration Reference: Die connection Property-Einstellung liefert eine Azure App Configuration-Referenz, die eine Verbindungszeichenfolge oder eine Key Vault-Referenz zurückgibt. Weitere Informationen finden Sie unter Azure App Configuration im Artikel über Verbindungen.
  • Connection string: Die connection Eigenschaftseinstellung gibt den tatsächlichen Storage Account Verbindungszeichenfolge zurück. Da der Verbindungszeichenfolge gemeinsame geheime Schlüssel enthält, solltest du, wenn möglich, eine verwaltete Identitätsverbindung in Betracht ziehen. Weitere Informationen finden Sie unter Zusammenhänge definieren.

Um mehr über Bindungsverbindungen zu erfahren, siehe Verbindung verwalten in Azure Functions. Um eine Verbindungszeichenfolge zu erhalten, folgen Sie den Schritten unter Verwaltung der Zugriffsschlüssel für Speicherkonten.

Wenn du einen Schlüssel oder ein Schlüsselpräfix mit dem Namen connection oder einen leeren String einsetztAzureWebJobsStorage, verwendet die Binding-Erweiterung das Standard-Host-Speicherkonto. Weitere Informationen finden Sie unter Speicherleistung optimieren.

Ausnahmen und Rückgabecodes

Bindung Verweis
Blob Blobfehlercodes
Blob, Tabelle, Warteschlange Speicherfehlercodes
Blob, Tabelle, Warteschlange Problembehandlung

Nächste Schritte