Freigeben über


Verbinden von Azure Functions mit Azure Storage mithilfe von Befehlszeilentools

In diesem Artikel integrieren Sie eine Azure-Storage-Warteschlange in die Funktion und das Speicherkonto, das Sie im vorherigen Schnellstartartikel erstellt haben. Sie erzielen diese Integration mit einer Ausgabebindung, mit der Daten aus einer HTTP-Anforderung in eine Nachricht in der Warteschlange geschrieben werden. Beim Durcharbeiten dieses Artikels fallen keine zusätzlichen Kosten an, die über die wenigen US-Cent aus dem vorherigen Schnellstart hinausgehen. Weitere Informationen zu Bindings finden Sie unter Azure Functions Trigger und Bindings Konzepte.

Konfigurieren Ihrer lokalen Umgebung

Bevor Sie beginnen, müssen Sie den Artikel Quickstart: Erstellen Sie ein Azure Functions-Projekt über die Kommandozeile abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.

Bevor Sie beginnen, müssen Sie den Artikel Quickstart: Erstellen Sie ein Azure Functions-Projekt über die Befehlszeile abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.

Bevor Sie beginnen, müssen Sie den Artikel Quickstart: Erstellen Sie ein Azure Functions-Projekt über die Befehlszeilenschnittstelle abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.

Bevor Sie beginnen, müssen Sie den Artikel Quickstart: Erstellen Sie ein Azure Functions-Projekt über die Befehlszeilenschnittstelle abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.

Bevor Sie beginnen, müssen Sie den Artikel Quickstart: Erstellen Sie ein Azure Functions Projekt über die Befehlszeilenschnittstelle fertigstellen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.

Bevor Sie beginnen, müssen Sie den Artikel Quickstart: Erstellen Sie ein Azure Functions-Projekt über die Befehlszeile abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.

Abrufen der Azure Storage Verbindungszeichenfolge

Wichtig

In diesem Artikel wird derzeit gezeigt, wie Sie mithilfe der connection string, die einen freigegebenen geheimen Schlüssel enthält, eine Verbindung mit Ihrem Azure Storage-Konto herstellen. Die Verwendung eines *connection string* erleichtert es Ihnen, Datenaktualisierungen im Speicherkonto zu überprüfen. Um die beste Sicherheit zu erzielen, sollten Sie stattdessen verwaltete Identitäten verwenden, wenn Sie eine Verbindung mit Ihrem storage Konto herstellen. Weitere Informationen finden Sie im Leitfaden für Entwickelnde unter Verbindungen.

Zuvor haben Sie ein Azure Storage Konto für die Verwendung der Funktions-App erstellt. Die connection string für dieses Konto wird sicher in den App-Einstellungen in Azure gespeichert. Wenn Sie die Einstellung in die Datei local.settings.json herunterladen, können Sie die Verbindung verwenden, um in eine Storage Warteschlange im selben Konto zu schreiben, wenn die Funktion lokal ausgeführt wird.

  1. Führen Sie im Stammverzeichnis des Projekts den folgenden Befehl aus, und ersetzen Sie <APP_NAME> durch den Namen der Funktions-App aus dem vorherigen Schritt. Mit diesem Befehl werden alle vorhandenen Werte in der Datei überschrieben.

    func azure functionapp fetch-app-settings <APP_NAME>
    
  2. Öffnen Sie die local.settings.json-Datei, und suchen Sie den Wert namens AzureWebJobsStorage, bei dem es sich um die Storage-Konto-Verbindungszeichenfolge handelt. Sie verwenden den Namen AzureWebJobsStorage und die connection string in anderen Abschnitten dieses Artikels.

Wichtig

Da die Datei local.settings.json geheime Schlüssel enthält, die aus Azure heruntergeladen wurden, schließen Sie diese Datei immer aus der Quellcodeverwaltung aus. Die Datei .gitignore, erstellt mit einem lokalen Funktionsprojekt, schließt die Datei standardmäßig aus.

Registrieren von Bindungserweiterungen

Mit Ausnahme von HTTP- und Timertriggern werden Bindungen als Erweiterungspakete implementiert. Führen Sie den folgenden Befehl dotnet add package im Terminalfenster aus, um dem project das Storage Erweiterungspaket hinzuzufügen.

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues --prerelease

Jetzt können Sie dem Projekt die Speicher-Ausgabebindung hinzufügen.

Hinzufügen einer Ausgabebindungsdefinition zur Funktion

Obwohl eine Funktion nur einen Trigger haben kann, kann sie mehrere Eingabe- und Ausgabebindungen aufweisen, mit denen Sie eine Verbindung mit anderen Azure Diensten und Ressourcen herstellen können, ohne benutzerdefinierten Integrationscode zu schreiben.

Bei Verwendung des Node.js v4-Programmiermodells werden Bindungsattribute direkt in der Datei ./src/functions/HttpExample.js definiert. Aus der vorherigen Schnellstartanleitung enthält Ihre Datei bereits eine HTTP-Bindung, die durch die Methode app.http definiert wird.

const { app } = require('@azure/functions');

app.http('httpTrigger', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: async (request, context) => {
    try {
      context.log(`Http function processed request for url "${request.url}"`);

      const name = request.query.get('name') || (await request.text());
      context.log(`Name: ${name}`);

      if (!name) {
        return { status: 404, body: 'Not Found' };
      }

      return { body: `Hello, ${name}!` };
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

Bei Verwendung des Node.js v4-Programmiermodells werden Bindungsattribute direkt in der Datei ./src/functions/HttpExample.js definiert. Aus der vorherigen Schnellstartanleitung enthält Ihre Datei bereits eine HTTP-Bindung, die durch die Methode app.http definiert wird.

import {
  app,
  HttpRequest,
  HttpResponseInit,
  InvocationContext,
} from '@azure/functions';

export async function httpTrigger1(
  request: HttpRequest,
  context: InvocationContext,
): Promise<HttpResponseInit> {
  context.log(`Http function processed request for url "${request.url}"`);

  const name = request.query.get('name') || (await request.text()) || 'world';

  return { body: `Hello, ${name}!` };
}

app.http('httpTrigger1', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: httpTrigger1,
});

Sie deklarieren diese Bindungen in der Datei function.json in Ihrem Funktionsordner. Im vorherigen Schnellstart enthält Ihre Datei function.json im Ordner HttpExample zwei Bindungen in der Sammlung bindings.

Bei Verwendung des Python v2-Programmiermodells werden Bindungsattribute direkt in der function_app.py-Datei als Dekorateure definiert. Aus der vorherigen Schnellstartanleitung enthält Ihre Datei function_app.py bereits eine Decorator-basierte Bindung:

import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)

Der route-Decorator fügt der Funktion die HttpTrigger- und HttpOutput-Bindung hinzu, sodass Ihre Funktion ausgelöst werden kann, wenn HTTP-Anforderungen die angegebene Route erreichen.

Wenn Sie aus dieser Funktion in eine Azure Storage-Warteschlange schreiben möchten, fügen Sie den Dekorator queue_output in Ihren Funktionscode ein:

@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")

Im Dekorateur identifiziert arg_name den Bindungsparameter, auf den in Ihrem Code verwiesen wird, queue_name ist der Name der Warteschlange, in die die Bindung schreibt, und connection ist der Name einer Anwendungseinstellung, die den connection string für das Storage Konto enthält. In Schnellstarts verwenden Sie dasselbe Storage-Konto wie bei der Funktions-App, die sich in der Einstellung AzureWebJobsStorage befindet (aus der Datei "local.settings.json"). Wenn das queue_name-Element nicht vorhanden ist, erstellt die Bindung es bei der ersten Verwendung.

"bindings": [
  {
    "authLevel": "function",
    "type": "httpTrigger",
    "direction": "in",
    "name": "Request",
    "methods": [
      "get",
      "post"
    ]
  },
  {
    "type": "http",
    "direction": "out",
    "name": "Response"
  }
]

Um in eine Azure Storage-Warteschlange zu schreiben:

  • Hinzufügen einer extraOutputs-Eigenschaft zur Bindungskonfiguration

    {
        methods: ['GET', 'POST'],
        extraOutputs: [sendToQueue], // add output binding to HTTP trigger
        authLevel: 'anonymous',
        handler: () => {}
    }
    
  • Fügen Sie eine output.storageQueue-Funktion oberhalb des Aufrufs von app.http hinzu

    const sendToQueue: StorageQueueOutput = output.storageQueue({
      queueName: 'outqueue',
      connection: 'AzureWebJobsStorage',
    });
    

Die zweite Bindung in der Sammlung hat den Namen res. Diese http-Bindung ist eine Ausgabebindung (out), die zum Schreiben der HTTP-Antwort verwendet wird.

Wenn Sie aus dieser Funktion in eine Azure Storage Warteschlange schreiben möchten, fügen Sie eine out Bindung vom Typ queue mit dem Namen msg hinzu, wie im folgenden Code gezeigt:

    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

Für einen queue-Typ müssen Sie den Namen der Warteschlange in queueName angeben und den name der Azure Storage verbindung (aus local.settings.jsondatei) in connection angeben.

In einem C#-project werden die Bindungen als Bindungsattribute für die Funktionsmethode definiert. Bestimmte Definitionen hängen davon ab, ob Ihre App In-Process (C#-Klassenbibliothek) oder in einem isolierten Workerprozess ausgeführt wird.

Öffnen Sie die Datei HttpExample.cs project, und fügen Sie die folgende MultiResponseKlasse hinzu:

public class MultiResponse
{
    [QueueOutput("outqueue", Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public IActionResult HttpResponse { get; set; }
}

Mit der MultiResponse-Klasse können Sie in eine Speicherwarteschlange mit dem Namen outqueue sowie eine HTTP-Erfolgsmeldung schreiben. Da das QueueOutput-Attribut auf ein Zeichenfolgenarray angewendet wird, können mehrere Nachrichten an die Warteschlange gesendet werden.

Die Eigenschaft Connection legt die Verbindungszeichenfolge für das Speicherkonto fest. In diesem Fall können Sie Connection weglassen, da Sie bereits das Standardkonto storage verwenden.

In einem Java-project werden die Bindungen als Bindungsanmerkungen für die Funktionsmethode definiert. Die Datei function.json wird dann automatisch auf der Grundlage dieser Anmerkungen generiert.

Navigieren Sie zum Speicherort des Funktionscodes unter src/main/java, öffnen Sie die Datei Function.java project, und fügen Sie der run-Methodendefinition den folgenden Parameter hinzu:

@QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") OutputBinding<String> msg

Der parameter msg ist ein OutputBinding<T> typ, der eine Auflistung von Zeichenfolgen darstellt. Diese Zeichenfolgen werden als Nachrichten in eine Ausgabebindung geschrieben, wenn die Funktion abgeschlossen wird. In diesem Fall ist die Ausgabe eine Speicherwarteschlange mit dem Namen outqueue. Die Connection String für das Speicherkonto wird von der Methode connection festgelegt. Sie übergeben die Anwendungseinstellung, die die Verbindungszeichenfolge des Speicherkontos enthält, anstatt die Verbindungszeichenfolge selbst zu übergeben.

Die Definition der Methode run muss nun wie im folgenden Beispiel aussehen:

@FunctionName("HttpTrigger-Java")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION)  
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") 
        OutputBinding<String> msg, final ExecutionContext context) {
    ...
}

Weitere Informationen zu den Details zu Bindungen finden Sie unter Azure Functions triggers and bindings concepts und queue output configuration.

Hinzufügen von Code für die Verwendung der Ausgabebindung

Nachdem die Warteschlangenbindung definiert wurde, können Sie Ihre Funktion nun so aktualisieren, dass sie den Ausgabeparameter msg empfängt und Nachrichten in die Warteschlange geschrieben werden.

Aktualisieren Sie HttpExample\function_app.py so, dass es dem folgenden Code entspricht, indem Sie den Parameter msg zur Funktionsdefinition und msg.set(name) unter der if name:-Anweisung hinzufügen:

import azure.functions as func
import logging

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        msg.set(name)
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

Der Parameter msg ist eine Instanz des azure.functions.Out class. Die set-Methode schreibt eine Zeichenfolgennachricht in die Warteschlange. In diesem Fall ist dies der name, der in der URL-Abfragezeichenfolge an die Funktion übergeben wird.

Fügen Sie Code hinzu, der das Ausgabebindungsobjekt für context.extraOutputs verwendet, um eine Warteschlangennachricht zu erstellen. Fügen Sie diesen Code vor der return-Anweisung hinzu.

context.extraOutputs.set(sendToQueue, [msg]);

Ihre Funktion könnte nun wie folgt aussehen:

const { app, output } = require('@azure/functions');

const sendToQueue = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  extraOutputs: [sendToQueue],
  handler: async (request, context) => {
    try {
      context.log(`Http function processed request for url "${request.url}"`);

      const name = request.query.get('name') || (await request.text());
      context.log(`Name: ${name}`);

      if (name) {
        const msg = `Name passed to the function ${name}`;
        context.extraOutputs.set(sendToQueue, [msg]);
        return { body: msg };
      } else {
        context.log('Missing required data');
        return { status: 404, body: 'Missing required data' };
      }
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

Fügen Sie Code hinzu, der das Ausgabebindungsobjekt für context.extraOutputs verwendet, um eine Warteschlangennachricht zu erstellen. Fügen Sie diesen Code vor der return-Anweisung hinzu.

context.extraOutputs.set(sendToQueue, [msg]);

Ihre Funktion könnte nun wie folgt aussehen:

import {
  app,
  output,
  HttpRequest,
  HttpResponseInit,
  InvocationContext,
  StorageQueueOutput,
} from '@azure/functions';

const sendToQueue: StorageQueueOutput = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

export async function HttpExample(
  request: HttpRequest,
  context: InvocationContext,
): Promise<HttpResponseInit> {
  try {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || (await request.text());
    context.log(`Name: ${name}`);

    if (name) {
      const msg = `Name passed to the function ${name}`;
      context.extraOutputs.set(sendToQueue, [msg]);
      return { body: msg };
    } else {
      context.log('Missing required data');
      return { status: 404, body: 'Missing required data' };
    }
  } catch (error) {
    context.log(`Error: ${error}`);
    return { status: 500, body: 'Internal Server Error' };
  }
}

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: HttpExample,
});

Fügen Sie Code hinzu, der das Cmdlet Push-OutputBinding verwendet, um Text unter Verwendung der Ausgabebindung msg in die Warteschlange zu schreiben. Fügen Sie diesen Code hinzu, bevor Sie den OK-Status in der if-Anweisung festlegen.

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

Die Funktion muss nun wie folgt aussehen:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

if ($name) {
    # Write the $name value to the queue, 
    # which is the name passed to the function.
    $outputMsg = $name
    Push-OutputBinding -name msg -Value $outputMsg

    $status = [HttpStatusCode]::OK
    $body = "Hello $name"
}
else {
    $status = [HttpStatusCode]::BadRequest
    $body = "Please pass a name on the query string or in the request body."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = $status
    Body = $body
})

Ersetzen Sie die vorhandene Run Methode durch den folgenden Code:

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
    _logger.LogInformation("C# HTTP trigger function processed a request.");

    var message = "Welcome to Azure Functions!";

    // Return a response to both HTTP trigger and storage output binding.
    return new MultiResponse()
    {
        // Write a single message.
        Messages = new string[] { message },
        HttpResponse = new OkObjectResult(message)
    };
}

Nun können Sie den neuen Parameter msg verwenden, um von Ihrem Funktionscode aus in die Ausgabebindung zu schreiben. Fügen Sie vor der Erfolgsantwort die folgende Codezeile hinzu, um der Ausgabebindung name den Wert msg hinzuzufügen:

msg.setValue(name);

Wenn Sie eine Ausgabebindung verwenden, müssen Sie nicht den Azure Storage SDK-Code für die Authentifizierung, das Abrufen eines Warteschlangenverweises oder das Schreiben von Daten verwenden. Die Functions-Runtime und die Warteschlangenausgabebindung übernehmen diese Aufgaben für Sie.

Die Methode run muss nun wie im folgenden Beispiel aussehen:

public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
        .body("Please pass a name on the query string or in the request body").build();
    } else {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

Aktualisieren der Tests

Da der Archetyp auch eine Reihe von Tests erstellt, müssen Sie diese Tests aktualisieren, um den neuen Parameter msg in der Signatur der Methode run zu behandeln.

Navigieren Sie zum Speicherort des Testcodes unter src/test/java, öffnen Sie die Datei Function.java project, und ersetzen Sie die Codezeile unter //Invoke durch den folgenden Code:

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

Beachten Sie, dass Sie den Code für das Durchführen der Authentifizierung, das Abrufen eines Warteschlangenverweises oder das Schreiben von Daten nicht erstellen müssen. Alle diese Integrationsaufgaben werden bequem in der Azure Functions Laufzeit- und Warteschlangenausgabebindung behandelt.

Lokales Ausführen der Funktion

  1. Führen Sie Die Funktion aus, indem Sie den lokalen Azure Functions Laufzeithost aus dem Ordner LocalFunctionProj starten.

    func start
    

    Gegen Ende der Ausgabe müssen die folgenden Zeilen angezeigt werden:

    Screenshot der Ausgabe des Terminalfensters beim lokalen Ausführen der Funktion.

    Hinweis

    Wenn HttpExample nicht wie oben dargestellt angezeigt wird, haben Sie wahrscheinlich den Host von außerhalb des Stammordners der project gestartet. Verwenden Sie in diesem Fall Ctrl+C, um den Host zu beenden, zum Stammordner des project zu wechseln und den vorherigen Befehl erneut auszuführen.

  2. Kopieren Sie die URL Ihrer HTTP-Funktion aus dieser Ausgabe in einen Browser, und fügen Sie die Abfragezeichenfolge ?name=<YOUR_NAME> an. Die vollständige URL lautet dann z. B. http://localhost:7071/api/HttpExample?name=Functions. Im Browser sollte eine Antwortmeldung angezeigt werden, die den Wert Ihrer Abfragezeichenkette zurückgibt. Das Terminal, in dem Sie ihre project gestartet haben, zeigt auch die Protokollausgabe an, während Sie Anforderungen stellen.

  3. Wenn Sie fertig sind, drücken Sie STRG+C, und geben Sie y ein, um den Funktionshost zu beenden.

Anzeigen der Nachricht in der Azure Storage-Warteschlange

Sie können die Warteschlange im Azure portal oder im Microsoft Azure Storage Explorer anzeigen. Sie können die Warteschlange auch in der Azure CLI anzeigen, wie in den folgenden Schritten beschrieben:

  1. Öffnen Sie die local.setting.json-Datei des Funktionenprojekts, und kopieren Sie den Wert der Verbindungszeichenfolge. Führen Sie in einem Terminal- oder Befehlsfenster den folgenden Befehl aus, um eine Umgebungsvariable namens AZURE_STORAGE_CONNECTION_STRING zu erstellen, und fügen Sie ihre spezifischen connection string anstelle von <MY_CONNECTION_STRING> ein. (Diese Umgebungsvariable bedeutet, dass Sie die connection string nicht für jeden nachfolgenden Befehl angeben müssen, indem Sie das Argument --connection-string verwenden.)

    export AZURE_STORAGE_CONNECTION_STRING="<MY_CONNECTION_STRING>"
    
  2. (Optional) Verwenden Sie den Befehl az storage queue list, um die Storage Warteschlangen in Ihrem Konto anzuzeigen. Die Ausgabe dieses Befehls muss eine Warteschlange mit dem Namen outqueue enthalten. Sie wurde erstellt, als die Funktion ihre erste Nachricht in diese Warteschlange geschrieben hat.

    az storage queue list --output tsv
    
  3. Verwenden Sie den Befehl az storage message get, um die Nachricht aus dieser Warteschlange zu lesen. Dies sollte der Wert sein, den Sie beim früheren Testen der Funktion angegeben haben. Mit dem Befehl wird die erste Nachricht aus der Warteschlange gelesen und entfernt.

    echo `echo $(az storage message get --queue-name outqueue -o tsv --query '[].{Message:content}') | base64 --decode`
    

    Da der Nachrichtentext base64-codiert gespeichert ist, muss die Nachricht decodiert werden, bevor sie angezeigt wird. Nachdem Sie az storage message get ausgeführt haben, wird die Nachricht aus der Warteschlange entfernt. Falls in outqueue nur eine Nachricht enthalten war, rufen Sie keine Nachricht ab, wenn Sie diesen Befehl zum zweiten Mal ausführen, sondern erhalten einen Fehler.

Projekt in Azure erneut bereitstellen

Nachdem Sie lokal überprüft haben, dass die Funktion eine Nachricht in die Azure Storage Warteschlange geschrieben hat, können Sie Ihr Projekt erneut bereitstellen, um den Endpunkt zu aktualisieren, der auf Azure ausgeführt wird.

Verwenden Sie im Ordner LocalFunctionsProj den Befehl func azure functionapp publish, um die project erneut bereitzustellen, indem Sie <APP_NAME> durch den Namen Ihrer App ersetzen.

func azure functionapp publish <APP_NAME>

Verwenden Sie im lokalen project Ordner den folgenden Maven-Befehl, um Ihre project erneut zu veröffentlichen:

mvn azure-functions:deploy

Überprüfen in Azure

  1. Verwenden Sie wie in der vorherigen Schnellstartanleitung einen Browser oder curl, um die erneut bereitgestellte Funktion zu testen.

    Kopieren Sie die vollständige Aufruf-URL, die in der Ausgabe des Befehls zum Veröffentlichen (publish) angezeigt wird, in eine Browseradressleiste, und fügen Sie den Abfrageparameter &name=Functions an. Im Browser sollte die gleiche Ausgabe wie bei der lokalen Ausführung der Funktion angezeigt werden.

  2. Überprüfen Sie die Storage Warteschlange erneut, wie im vorherigen Abschnitt beschrieben, um zu überprüfen, ob sie die neue Nachricht enthält, die in die Warteschlange geschrieben wurde.

Bereinigen von Ressourcen

Verwenden Sie nach Abschluss des Vorgangs den unten angegebenen Befehl, um die Ressourcengruppe und alle darin enthaltenen Ressourcen zu löschen, damit keine weiteren Kosten anfallen.

az group delete --name AzureFunctionsQuickstart-rg

Nächste Schritte

Sie haben Ihre HTTP-ausgelöste Funktion aktualisiert, um Daten in eine Storage-Warteschlange zu schreiben. Jetzt erfahren Sie mehr über die Entwicklung von Funktionen über die Befehlszeile mithilfe von Core Tools und Azure CLI: