Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Schnellstartanleitung verwenden Sie Azure Developer-Befehlszeilentools, um einen serverlosen Workflow zu erstellen, der mehrere parallel ausgeführte Aufgaben koordiniert. Sie erstellen Ressourcen in Azure, überprüfen den Code lokal und deployen ihn dann in einer neuen serverlosen Funktions-App, die in einem Flex-Consumption-Plan in Azure Functions läuft.
Das Projekt verwendet die Azure Developer CLI (azd), um die Bereitstellung Ihres Codes für Azure zu vereinfachen. Diese Bereitstellung folgt den aktuellen bewährten Methoden für sichere und skalierbare Azure Functions Bereitstellungen. In dieser Schnellstartanleitung wird das Fan-Out/Fan-In-Muster in Durable Functions veranschaulicht. Es handelt sich dabei um eine Erweiterung, die zustandsbehaftete Workflows mit permanenter Ausführung orchestriert. Das Beispiel verwendet den Durable Task Scheduler, ein vollständig verwaltetes Backend für Durable Functions, das das Azure Storage-Backend ersetzt. Das Beispiel ruft Artikeltitel parallel ab: Die Orchestrierung wird in mehrere gleichzeitig ausgeführte Aktivitäten unterteilt (Fan-Out). Anschließend werden die Ergebnisse wieder zu einem einzigen Ergebnis kombiniert (Fan-In).
Standardmäßig folgt der Flex-Verbrauchsplan einem Abrechnungsmodell nach dem Prinzip 'Bezahlen nach Nutzung'. Dies bedeutet, dass bei diesem Quickstart ein kleiner Betrag von ein paar US-Cent oder weniger in Ihrem Azure-Konto anfallen wird.
Voraussetzungen
Ein Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
Initialisieren des Projekts
Verwenden Sie den Befehl azd init, um ein lokales Durable Functions-Codeprojekt aus einer Vorlage zu erstellen.
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diesen
azd init-Befehl in einem leeren Ordner aus:azd init --template durable-functions-quickstart-dotnet-azd -e dfquickstart-dotnetMit diesem Befehl werden die Projektdateien aus dem Repository template abgerufen und das Projekt in einem neuen Ordner initialisiert. Das
-e-Flag legt einen Namen für die aktuelle Umgebung fest. Inazdder Umgebung wird ein eindeutiger Bereitstellungskontext für Ihre App verwaltet, und Sie können mehrere definieren. Der Umgebungsname wird auch im Namen der Ressourcengruppe verwendet, die Sie in Azure erstellen.Wechsle ins Projektverzeichnis und navigiere dann zum
fanoutfaninApp-Ordner:cd durable-functions-quickstart-dotnet-azd/fanoutfanin
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diesen
azd init-Befehl in einem leeren Ordner aus:azd init --template durable-functions-quickstart-python-azd -e dfquickstart-pythonMit diesem Befehl werden die Projektdateien aus dem Repository template abgerufen und das Projekt in einem neuen Ordner initialisiert. Das
-e-Flag legt einen Namen für die aktuelle Umgebung fest. Inazdder Umgebung wird ein eindeutiger Bereitstellungskontext für Ihre App verwaltet, und Sie können mehrere definieren. Der Umgebungsname wird auch im Namen der Ressourcengruppe verwendet, die Sie in Azure erstellen.Wechsle ins Projektverzeichnis und navigiere dann zum
srcApp-Ordner:cd durable-functions-quickstart-python-azd/src
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diesen
azd init-Befehl in einem leeren Ordner aus:azd init --template durable-functions-quickstart-typescript-azd -e dfquickstart-typescriptMit diesem Befehl werden die Projektdateien aus dem Repository template abgerufen und das Projekt in einem neuen Ordner initialisiert. Das
-e-Flag legt einen Namen für die aktuelle Umgebung fest. Inazdder Umgebung wird ein eindeutiger Bereitstellungskontext für Ihre App verwaltet, und Sie können mehrere definieren. Der Umgebungsname wird auch im Namen der Ressourcengruppe verwendet, die Sie in Azure erstellen.Wechsle ins Projektverzeichnis und navigiere dann zum
srcApp-Ordner:cd durable-functions-quickstart-typescript-azd/src
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diesen
azd init-Befehl in einem leeren Ordner aus:azd init --template durable-functions-quickstart-java-azd -e dfquickstart-javaMit diesem Befehl werden die Projektdateien aus dem Repository template abgerufen und das Projekt in einem neuen Ordner initialisiert. Das
-e-Flag legt einen Namen für die aktuelle Umgebung fest. Inazdder Umgebung wird ein eindeutiger Bereitstellungskontext für Ihre App verwaltet, und Sie können mehrere definieren. Der Umgebungsname wird auch im Namen der Ressourcengruppe verwendet, die Sie in Azure erstellen.Wechseln Sie in das Projektverzeichnis:
cd durable-functions-quickstart-java-azd
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diesen
azd init-Befehl in einem leeren Ordner aus:azd init --template durable-functions-quickstart-javascript-azd -e dfquickstart-javascriptMit diesem Befehl werden die Projektdateien aus dem Repository template abgerufen und das Projekt in einem neuen Ordner initialisiert. Das
-e-Flag legt einen Namen für die aktuelle Umgebung fest. Inazdder Umgebung wird ein eindeutiger Bereitstellungskontext für Ihre App verwaltet, und Sie können mehrere definieren. Der Umgebungsname wird auch im Namen der Ressourcengruppe verwendet, die Sie in Azure erstellen.Wechsle ins Projektverzeichnis und navigiere dann zum
srcApp-Ordner:cd durable-functions-quickstart-javascript-azd/src
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diesen
azd init-Befehl in einem leeren Ordner aus:azd init --template durable-functions-quickstart-powershell-azd -e dfquickstart-powershellMit diesem Befehl werden die Projektdateien aus dem Repository template abgerufen und das Projekt in einem neuen Ordner initialisiert. Das
-e-Flag legt einen Namen für die aktuelle Umgebung fest. Inazdder Umgebung wird ein eindeutiger Bereitstellungskontext für Ihre App verwaltet, und Sie können mehrere definieren. Der Umgebungsname wird auch im Namen der Ressourcengruppe verwendet, die Sie in Azure erstellen.Wechsle ins Projektverzeichnis und navigiere dann zum
srcApp-Ordner:cd durable-functions-quickstart-powershell-azd/src
Bereitstellen von Azure-Ressourcen
Dieses Projekt verwendet den azd provision Befehl, um die erforderlichen Azure-Ressourcen zu erstellen, darunter eine neue Funktions-App in einem Flex-Consumption-Plan, einen Durable Task Scheduler und einen Task-Hub.
Tip
Das Projekt enthält ein Set von Bicep-Dateien (im Ordner infra), die azd verwendet, um eine sichere Bereitstellung für einen Flex-Verbrauchsplan zu erstellen, der bewährten Verfahren folgt.
Gehe zurück zum Root-Projektordner (dem Ordner, der die
azure.yamlDatei enthält):cd ..
- Stelle sicher, dass du dich noch im Root-Projektordner befindest (dem Ordner, der die
azure.yamlDatei enthält).
Führe diesen Befehl aus, um dich mit deinem Azure-Konto zu authentifizieren:
azd auth loginFühre diesen Befehl aus dem Root-Projektordner aus, um
azddie erforderlichen Azure-Ressourcen zu erstellen:azd provisionDer Stammordner enthält die
azure.yaml-Definitionsdatei, dieazderfordert.Wenn Sie dazu aufgefordert werden, stellen Sie die folgenden erforderlichen Bereitstellungsparameter bereit:
Parameter Description Azure-Abonnement Das Abonnement, in dem Ihre Ressourcen erstellt werden. Wenn dein Konto mehr als einen Mieter hat, musst du zuerst deinen Mieter auswählen. Azure-Standort Azure Region, in der die Ressourcengruppe erstellt werden soll, die die neuen Azure Ressourcen enthält. Es werden nur Regionen angezeigt, die den Flex-Verbrauchsplan derzeit unterstützen. vnetEnabled Ob in einem virtuellen Netzwerk bereitgestellt werden soll. Für diesen Quickstart wählen Sie falsch aus. Der
azd provisionBefehl verwendet Ihre Antworten auf diese Prompts mit den Bicep-Konfigurationsdateien, um diese erforderlichen Azure-Ressourcen zu erstellen und zu konfigurieren:- Flex-Verbrauchsplan und Funktionsanwendung
- Azure Storage (erforderlich) und Application Insights (empfohlen)
- Durable Task Scheduler und Aufgabenhub
- Zugriffsrichtlinien und -rollen für Ihr Konto
- Dienst-zu-Dienst-Verbindungen mit verwalteten Identitäten (anstelle gespeicherter Verbindungszeichenfolgen)
Nachdem der Befehl erfolgreich abgeschlossen wurde, werden Links zu den von Ihnen erstellten Ressourcen angezeigt.
Die Provisionierung führt außerdem ein Post-Provision-Skript aus, das eine local.settings.json-Datei in deinem App-Ordner generiert. Diese Datei enthält die Verbindungseinstellungen für den bereitgestellten Durable Task Scheduler-Endpunkt, den Sie benötigen, um das Projekt lokal auszuführen.
Starten Sie Azurite
Um das Projekt lokal auszuführen, benötigt die Functions-Laufzeit einen lokalen Speicheremulator. Die "AzureWebJobsStorage": "UseDevelopmentStorage=true" Einstellung in der local.settings.json-Datei weist die Laufzeit an, Azurite für diesen Zweck zu verwenden.
Führe in einem neuen Terminalfenster diesen Befehl aus, um Azurite zu starten:
azurite --skipApiVersionCheck --location ~/azurite-data
Lassen Sie Azurite in diesem Terminalfenster laufen, während Sie lokal testen.
Ausführen in Ihrer lokalen Umgebung
Gehe in deinem ursprünglichen Terminal in den
fanoutfaninApp-Ordner und starte den Funktionen-Host:cd fanoutfanin func startWenn der Funktionshost in Ihrem lokalen Projektordner gestartet wird, schreibt er die lokalen URL-Endpunkte Ihrer HTTP-ausgelösten Funktionen in die Terminalausgabe.
Note
Da die Zugriffstastenautorisierung bei der lokalen Ausführung nicht erzwungen wird, benötigen Sie keine Zugriffstaste, um Ihre Funktion aufzurufen.
Nehmen Sie in Ihrem Browser eine GET-Anforderung an den Endpunkt vor, der die Orchestrierung startet:
http://localhost:7071/api/FetchOrchestration_HttpStart
Diese Anforderung startet eine neue Orchestrierungsinstanz. Die Orchestrierung wird auf mehrere Aktivitäten unterteilt, damit die Titel der Microsoft Learn-Artikel parallel abgerufen werden können. Nach Beendigen der Aktivitäten gibt die Orchestrierung im Fan-In-Modus die Titel als formatierte Zeichenfolge zurück.
Gehe in deinem ursprünglichen Terminal in den
srcApp-Ordner, erstelle und aktiviere eine virtuelle Umgebung, installiere Abhängigkeiten und starte den Functions-Host:cd srcDie Art und Weise, wie du deine virtuelle Umgebung (benannt) erstellst und aktivierst, hängt von deinem Terminal
.venvab:python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt func startWenn der Funktionshost in Ihrem lokalen Projektordner gestartet wird, schreibt er die lokalen URL-Endpunkte Ihrer HTTP-ausgelösten Funktionen in die Terminalausgabe.
Note
Da die Zugriffstastenautorisierung bei der lokalen Ausführung nicht erzwungen wird, benötigen Sie keine Zugriffstaste, um Ihre Funktion aufzurufen.
Nehmen Sie in Ihrem Browser eine GET-Anforderung an den HTTP-Startendpunkt vor:
http://localhost:7071/api/orchestrators/fetch_orchestration
Diese Anforderung startet eine neue Orchestrierungsinstanz. Die Orchestrierung wird auf mehrere Aktivitäten unterteilt, damit die Titel der Microsoft Learn-Artikel parallel abgerufen werden können. Nach Beendigen der Aktivitäten gibt die Orchestrierung im Fan-In-Modus die Titel als formatierte Zeichenfolge zurück.
Gehe in deinem ursprünglichen Terminal in den
srcApp-Ordner, installiere Abhängigkeiten, baue das Projekt und starte den Functions-Host:cd src npm install npm run build func startWenn der Funktionshost in Ihrem lokalen Projektordner gestartet wird, schreibt er die lokalen URL-Endpunkte Ihrer HTTP-ausgelösten Funktionen in die Terminalausgabe.
Note
Da die Zugriffstastenautorisierung bei der lokalen Ausführung nicht erzwungen wird, benötigen Sie keine Zugriffstaste, um Ihre Funktion aufzurufen.
Nehmen Sie in Ihrem Browser eine GET-Anforderung an den HTTP-Startendpunkt vor:
http://localhost:7071/api/orchestrators/fetchOrchestration
Diese Anforderung startet eine neue Orchestrierungsinstanz. Die Orchestrierung wird auf mehrere Aktivitäten unterteilt, damit die Titel der Microsoft Learn-Artikel parallel abgerufen werden können. Nach Beendigen der Aktivitäten gibt die Orchestrierung im Fan-In-Modus die Titel als formatierte Zeichenfolge zurück.
Baue in deinem ursprünglichen Terminal das Projekt und starte dann den Functions-Host aus dem Build-Ausgabeordner:
mvn clean package cd target/azure-functions/durable-functions-quickstart func startWenn der Funktionshost in Ihrem lokalen Projektordner gestartet wird, schreibt er die lokalen URL-Endpunkte Ihrer HTTP-ausgelösten Funktionen in die Terminalausgabe.
Note
Da die Zugriffstastenautorisierung bei der lokalen Ausführung nicht erzwungen wird, benötigen Sie keine Zugriffstaste, um Ihre Funktion aufzurufen.
Nehmen Sie in Ihrem Browser eine GET-Anforderung an den Endpunkt vor, der die Orchestrierung startet:
http://localhost:7071/api/FetchOrchestration_HttpStart
Diese Anforderung startet eine neue Orchestrierungsinstanz. Die Orchestrierung wird auf mehrere Aktivitäten unterteilt, damit die Titel der Microsoft Learn-Artikel parallel abgerufen werden können. Nach Beendigen der Aktivitäten gibt die Orchestrierung im Fan-In-Modus die Titel als formatierte Zeichenfolge zurück.
Gehe in deinem ursprünglichen Terminal in den
srcApp-Ordner, installiere Abhängigkeiten und starte den Functions-Host:cd src npm install func startWenn der Funktionshost in Ihrem lokalen Projektordner gestartet wird, schreibt er die lokalen URL-Endpunkte Ihrer HTTP-ausgelösten Funktionen in die Terminalausgabe.
Note
Da die Zugriffstastenautorisierung bei der lokalen Ausführung nicht erzwungen wird, benötigen Sie keine Zugriffstaste, um Ihre Funktion aufzurufen.
Nehmen Sie in Ihrem Browser eine GET-Anforderung an den Endpunkt vor, der die Orchestrierung startet:
http://localhost:7071/api/FetchOrchestration_HttpStart
Diese Anforderung startet eine neue Orchestrierungsinstanz. Die Orchestrierung wird auf mehrere Aktivitäten unterteilt, damit die Titel der Microsoft Learn-Artikel parallel abgerufen werden können. Nach Beendigen der Aktivitäten gibt die Orchestrierung im Fan-In-Modus die Titel als formatierte Zeichenfolge zurück.
Gehe in deinem ursprünglichen Terminal in den
srcApp-Ordner und starte den Funktionen-Host:cd src func startWenn der Funktionshost in Ihrem lokalen Projektordner gestartet wird, schreibt er die lokalen URL-Endpunkte Ihrer HTTP-ausgelösten Funktionen in die Terminalausgabe.
Note
Da die Zugriffstastenautorisierung bei der lokalen Ausführung nicht erzwungen wird, benötigen Sie keine Zugriffstaste, um Ihre Funktion aufzurufen.
Nehmen Sie in Ihrem Browser eine GET-Anforderung an den Endpunkt vor, der die Orchestrierung startet:
http://localhost:7071/api/FetchOrchestration_HttpStart
Diese Anforderung startet eine neue Orchestrierungsinstanz. Die Orchestrierung wird auf mehrere Aktivitäten unterteilt, damit die Titel der Microsoft Learn-Artikel parallel abgerufen werden können. Nach Beendigen der Aktivitäten gibt die Orchestrierung im Fan-In-Modus die Titel als formatierte Zeichenfolge zurück.
Der HTTP-Endpunkt gibt eine JSON-Antwort mit mehreren URLs zurück. Der
statusQueryGetUriEndpunkt stellt den Orchestrierungsstatus bereit.Kopieren Sie den
statusQueryGetUriWert, und fügen Sie ihn in Ihren Browser oder HTTP-Testtool ein, um den Status der Orchestrierung zu überprüfen. Wenn die Orchestrierung abgeschlossen ist, werden die abgerufenen Artikeltitel in der Antwort angezeigt.Wenn Sie fertig sind, drücken Sie STRG+C im Terminalfenster, um den
func-Hostprozess zu beenden.
- Führen Sie
deactivateaus, um die virtuelle Umgebung zu beenden.
Überprüfen des Codes (optional)
Sie können den Code überprüfen, der das Fan-out-/Fan-In-Muster implementiert:
Die Titelabrufaktivitäten werden mithilfe einer dynamischen Aufgabenliste nachverfolgt. Die Zeile await Task.WhenAll(parallelTasks); wartet darauf, dass alle aufgerufenen Aktivitäten, die gleichzeitig ausgeführt werden, abgeschlossen sind. Wenn alles abgeschlossen ist, werden alle Ausgaben zu einer Zeichenfolge formatiert und aggregiert.
[Function(nameof(FetchOrchestration))]
public static async Task<string> RunOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
ILogger logger = context.CreateReplaySafeLogger(nameof(FetchOrchestration));
logger.LogInformation("Fetching data.");
var parallelTasks = new List<Task<string>>();
// List of URLs to fetch titles from
var urls = new List<string>
{
"https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
"https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
"https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
"https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
};
// Run fetching tasks in parallel
foreach (var url in urls)
{
Task<string> task = context.CallActivityAsync<string>(nameof(FetchTitleAsync), url);
parallelTasks.Add(task);
}
// Wait for all the parallel tasks to complete before continuing
await Task.WhenAll(parallelTasks);
// Return fetched titles as a formatted string
return string.Join("; ", parallelTasks.Select(t => t.Result));
}
Hier können Sie das vollständige Vorlagenprojekt überprüfen.
Die Titelabrufaktivitäten werden mithilfe einer dynamischen Aufgabenliste nachverfolgt. Die Zeile yield context.task_all(tasks) wartet darauf, dass alle aufgerufenen Aktivitäten, die gleichzeitig ausgeführt werden, abgeschlossen sind. Wenn alles abgeschlossen ist, werden alle Ausgaben zu einer Zeichenfolge formatiert und aggregiert.
# List of URLs to fetch titles from
urls = [
"https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
"https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
"https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
"https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
]
# Run fetching tasks in parallel
tasks = []
for url in urls:
task = context.call_activity("fetch_title", url)
tasks.append(task)
# Wait for all the parallel tasks to complete before continuing
results = yield context.task_all(tasks)
# Return fetched titles as a formatted string
return "; ".join(results)
@myApp.activity_trigger(input_name="url")
async def fetch_title(url: str):
"""Activity function that fetches the title from a URL."""
logger = logging.getLogger("FetchTitle")
logger.info(f"Fetching from url {url}.")
try:
async with ClientSession() as session:
Hier können Sie das vollständige Vorlagenprojekt überprüfen.
Die Titelabrufaktivitäten werden mithilfe einer dynamischen Aufgabenliste nachverfolgt. Die Zeile yield context.df.Task.all(parallelTasks) wartet darauf, dass alle aufgerufenen Aktivitäten, die gleichzeitig ausgeführt werden, abgeschlossen sind. Wenn alles abgeschlossen ist, werden alle Ausgaben zu einer Zeichenfolge formatiert und aggregiert.
const urls = [
"https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
"https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
"https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
"https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
];
// Run fetching tasks in parallel
const parallelTasks = [];
for (const url of urls) {
const task = context.df.callActivity(fetchTitleActivityName, url);
parallelTasks.push(task);
}
// Wait for all the parallel tasks to complete before continuing
const results: string[] = yield context.df.Task.all(parallelTasks);
// Return fetched titles as a formatted string
return results.join("; ");
};
df.app.orchestration("fetchOrchestration", fetchOrchestration);
const fetchTitleAsync: ActivityHandler = async function (
url: string,
context: InvocationContext
Hier können Sie das vollständige Vorlagenprojekt überprüfen.
Die Titelabrufaktivitäten werden mithilfe einer dynamischen Aufgabenliste nachverfolgt. Die Zeile ctx.allOf(parallelTasks).await() wartet darauf, dass alle aufgerufenen Aktivitäten, die gleichzeitig ausgeführt werden, abgeschlossen sind. Wenn alles abgeschlossen ist, werden alle Ausgaben zu einer Zeichenfolge formatiert und aggregiert.
@FunctionName("FetchOrchestration")
public String runOrchestrator(
@DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {
List<String> urls = List.of(
"https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
"https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
"https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
"https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps"
);
// Fan out: run fetching tasks in parallel
List<Task<String>> parallelTasks = urls.stream()
.map(url -> ctx.callActivity("FetchTitle", url, String.class))
.collect(Collectors.toList());
// Fan in: wait for all parallel tasks to complete
List<String> results = ctx.allOf(parallelTasks).await();
// Return fetched titles as a formatted string
return String.join("; ", results);
}
Hier können Sie das vollständige Vorlagenprojekt überprüfen.
Die Titelabrufaktivitäten werden mithilfe einer dynamischen Aufgabenliste nachverfolgt. Die Zeile yield context.df.Task.all(parallelTasks) wartet darauf, dass alle aufgerufenen Aktivitäten, die gleichzeitig ausgeführt werden, abgeschlossen sind. Wenn alles abgeschlossen ist, werden alle Ausgaben zu einer Zeichenfolge formatiert und aggregiert.
df.app.orchestration('fetchOrchestration', function* (context) {
context.log("Fetching data.");
const urls = [
"https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
"https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
"https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
"https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
];
// Fan out: run fetching tasks in parallel
const parallelTasks = urls.map(url => context.df.callActivity(activityName, url));
// Fan in: wait for all parallel tasks to complete
const results = yield context.df.Task.all(parallelTasks);
// Return fetched titles as a formatted string
return results.join("; ");
});
Hier können Sie das vollständige Vorlagenprojekt überprüfen.
Die Titelabrufaktivitäten werden mithilfe einer dynamischen Aufgabenliste nachverfolgt. Die Zeile Wait-ActivityFunction -Task $parallelTasks wartet darauf, dass alle aufgerufenen Aktivitäten, die gleichzeitig ausgeführt werden, abgeschlossen sind. Wenn alles abgeschlossen ist, werden alle Ausgaben zu einer Zeichenfolge formatiert und aggregiert.
param($Context)
$urls = @(
"https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
"https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
"https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
"https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps"
)
# Fan out: run fetching tasks in parallel
$parallelTasks = @()
foreach ($url in $urls) {
$parallelTasks += Invoke-DurableActivity -FunctionName 'FetchTitle' -Input $url -NoWait
}
# Fan in: wait for all parallel tasks to complete
$results = Wait-ActivityFunction -Task $parallelTasks
# Return fetched titles as a formatted string
$output = $results -join "; "
$output
Hier können Sie das vollständige Vorlagenprojekt überprüfen.
Nachdem du deine Funktionen lokal überprüft hast, ist es Zeit, sie auf Azure zu deployen.
In Azure bereitstellen
Führe diesen Befehl aus dem Root-Projektordner aus, um dein Codeprojekt in Azure in der Funktions-App zu deployen:
azd deploy
Der Befehl azd deploy packt deinen Code und stellt ihn für die während der Bereitstellung erstellte Function App bereit. Nachdem der Befehl abgeschlossen ist, startet und läuft die App im bereitgestellten Paket.
Aufrufen der Funktion für Azure
Sie können jetzt Ihren Orchestrierungsendpunkt in Azure aufrufen, indem Sie eine HTTP-Anforderung an seine URL senden. Wenn Ihre Funktionen in Azure ausgeführt werden, wird eine Zugriffsschlüsselautorisierung erzwungen, und Sie müssen einen Funktionszugriffsschlüssel mit Ihrer Anfrage bereitstellen.
Sie können die Kerntools verwenden, um den URL-Endpunkt des HTTP-Triggers abzurufen, der die Orchestrierung in Azure startet.
Führen Sie in Ihrem lokalen Terminal oder in der Eingabeaufforderung diese Befehle aus, um die Werte für die URL-Endpunkte zu erhalten:
APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME) func azure functionapp list-functions $APP_NAME --show-keysDer
azd env get-value-Befehl ruft ihren Funktions-App-Namen aus der lokalen Umgebung ab. Wenn Sie die--show-keysOption mitfunc azure functionapp list-functionsverwenden, enthält der zurückgegebene Aufruf-URL: Wert für jeden Endpunkt alle erforderlichen Zugriffstasten auf Funktionsebene.Verwenden Sie einen Browser oder ein HTTP-Testtool, um eine GET-Anfrage an den HTTP-Start-Endpunkt zu stellen, um die Orchestrierung in Ihrer Funktions-App in Azure zu starten.
Code erneut bereitstellen
Führe azd deploy so oft aus, wie nötig, um Codeupdates für deine Funktions-App bereitzustellen. Wenn du die Azure-Ressourcen aktualisieren musst, führe es erneut ausazd provision.
Note
Das neueste Bereitstellungspaket überschreibt immer bereitgestellte Codedateien.
Ihre ersten Antworten auf azd Prompts und alle von azd generierten Umgebungsvariablen werden lokal in Ihrer benannten Umgebung gespeichert. Verwenden Sie den azd env get-values Befehl, um alle Variablen in Ihrer Umgebung zu überprüfen, die Sie beim Erstellen von Azure-Ressourcen verwendet haben.
Bereinigen von Ressourcen
Wenn Sie mit der Arbeit mit Ihrer Funktions-App und verwandten Ressourcen fertig sind, verwenden Sie diesen Befehl, um die Funktions-App und die zugehörigen Ressourcen aus Azure zu löschen und weitere Kosten zu vermeiden:
azd down --no-prompt
Note
Die --no-prompt-Option weist azd an, Ihre Ressourcengruppe ohne Bestätigung von Ihnen zu löschen.
Dieser Befehl wirkt sich nicht auf Ihr lokales Codeprojekt aus.