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.
Aspire ist eine Toolchain zum Erstellen, Ausführen, Debuggen und Bereitstellen verteilter Anwendungen. Die Integration von Aspire Azure Functions ermöglicht es Ihnen, ein Azure Functions-Projekt als Teil eines Aspire AppHost zu entwickeln, zu debuggen und zu orchestrieren. Die .NET-Beispiele in diesem Artikel verwenden das isolierte Worker-Modell.
Voraussetzungen
Richten Sie Ihre Entwicklungsumgebung für die Verwendung von Azure Functions mit Aspire ein:
Installieren Sie die Aspire-Voraussetzungen, einschließlich des .NET SDK, das Ihr AppHost benötigt.
Installieren Sie die Aspire Azure Functions Hosting-Integration aus dem AppHost-Verzeichnis.
aspire add Aspire.Hosting.Azure.FunctionsInstallieren Sie die Azure Functions Core Tools.
Wenn Sie Visual Studio verwenden, installieren Sie die neuesten Visual Studio- und Azure Functions-Tools-Updates:
- Wechseln Sie zu Extras>Optionen.
- Wählen Sie unter "Projekte und Lösungen" die Option "Azure Functions" aus.
- Wählen Sie Nach Updates suchen aus, und installieren Sie Updates, wenn Sie dazu aufgefordert werden.
Weitere Informationen zum Integrationspaket und den unterstützten AppHost-APIs finden Sie unter Set up Azure Functions in AppHost.
Projektmappenstruktur
Eine Lösung, die Azure Functions und Aspire verwendet, hat mehrere Projekte, darunter ein AppHost und ein oder mehrere Functions-Projekte.
Der AppHost ist der Einstiegspunkt für Ihre Anwendung. Es koordiniert die Einrichtung der Komponenten Ihrer Anwendung, einschließlich des Functions-Projekts.
Die Lösung enthält in der Regel auch ein Dienststandardprojekt . Dieses Projekt stellt eine Reihe von Standarddiensten und Konfigurationen bereit, die für projekte in Ihrer Anwendung verwendet werden sollen.
AppHost-Projekt
Um die Integration erfolgreich zu konfigurieren, stellen Sie sicher, dass das AppHost-Projekt die folgenden Anforderungen erfüllt:
- Der AppHost bezieht sich auf Aspire.Hosting.Azure. Functions. Dieses Paket definiert die Integration.
- Ein C# AppHost referenziert ein Functions-Projekt und ruft
AddAzureFunctionsProject<TProject>()auf oder ruftAddAzureFunctionsProject(name, projectPath)mit dem Pfad zur Projektdatei auf. TypeScript AppHosts verwenden die Projekt-Pfad-Form vonaddAzureFunctionsProject. - Verwenden Sie
AddAzureFunctionsProjectanstelle vonAddProject. Ein Functions-Projekt, das durch die VerwendungAddProjecthinzugefügt wurde, kann nicht richtig starten.
Das folgende Beispiel zeigt eine minimale AppHost.cs Datei für ein C# AppHost-Projekt:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject");
builder.Build().Run();
Azure Functions-Projekt
Um die Integration erfolgreich zu konfigurieren, stellen Sie sicher, dass das Azure Functions-Projekt die folgenden Anforderungen erfüllt:
Zielen Sie auf .NET 8 oder höher ab, nutzen Sie das .NET 9-SDK oder neuer, und verwenden Sie das isolierte Workermodell.
Referenz Microsoft.Azure. Functions.Worker, Microsoft.Azure. Functions.Worker.SDK und, für HTTP-Trigger, Microsoft.Azure. Functions.Worker.Extensions.Http.AspNetCore.
Die
Program.csDatei muss dieIHostApplicationBuilderVersion des Hostinstanzstarts verwenden. Diese Anforderung bedeutet, dass Sie verwendenFunctionsApplication.CreateBuilder(args)müssen.Wenn Ihre Lösung ein Standardmäßiges Dienstprojekt enthält, stellen Sie sicher, dass Ihr Functions-Projekt für die Verwendung konfiguriert ist:
- Das Azure Functions-Projekt muss einen Projektverweis auf das Dienststandardsprojekt enthalten.
- Schließen Sie vor dem Erstellen von
IHostApplicationBuilderinProgram.cseinen Aufruf anbuilder.AddServiceDefaults()an.
Das folgende Beispiel zeigt eine minimale Program.cs Datei für ein in Aspire verwendetes Functions-Projekt:
using Microsoft.Azure.Functions.Worker.Builder;
using Microsoft.Extensions.Hosting;
var builder = FunctionsApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.ConfigureFunctionsWebApplication();
builder.Build().Run();
Dieses Beispiel enthält nicht die standardmäßige Application Insights-Konfiguration, die in vielen anderen Program.cs Beispielen und in den Azure Functions-Vorlagen angezeigt wird. Stattdessen konfigurieren Sie die OpenTelemetry-Integration in Aspire, indem Sie die builder.AddServiceDefaults() Methode aufrufen.
Beachten Sie die folgenden Richtlinien, um die Integration optimal zu verwenden:
- Fügen Sie keine direkten Application Insights-Integrationen in das Funktionsprojekt ein. Die Überwachung in Aspire wird stattdessen über die OpenTelemetry-Unterstützung abgewickelt. Sie können Aspire so konfigurieren, dass Daten über das Dienststandardprojekt nach Azure Monitor exportiert werden.
- Wenn Aspire das Functions-Projekt ausführt, bevorzuge Einstellungen, die vom AppHost eingefügt werden. Du kannst gleichwertige Einstellungen in
local.settings.jsonbeibehalten, um das Projekt eigenständig mitfunc startauszuführen; von Aspire eingefügte Umgebungsvariablen überschreiben diese.
Verbindungskonfiguration mit Aspire
Der AppHost definiert Ressourcen und hilft Ihnen, Verbindungen zwischen ihnen mithilfe von Code herzustellen. In diesem Abschnitt wird gezeigt, wie Verbindungen konfiguriert und angepasst werden, die ihr Azure Functions-Projekt verwendet.
Aspire enthält Standardverbindungsberechtigungen, die Ihnen bei den ersten Schritten helfen können. Diese Berechtigungen sind jedoch möglicherweise nicht geeignet oder für Ihre Anwendung ausreichend.
Für Szenarien, die die rollenbasierte Zugriffssteuerung (Azure Role-Based Access Control, RBAC) verwenden, können Sie Berechtigungen anpassen, indem Sie die WithRoleAssignments() Methode für die Projektressource aufrufen. Wenn Sie aufrufen WithRoleAssignments(), werden alle Standardrollenzuweisungen entfernt, und Sie müssen explizit die gewünschten vollständigen Rollenzuweisungen definieren. Wenn Sie Ihre Anwendung in Azure Container-Apps hosten, erfordert die Verwendung von WithRoleAssignments() auch, dass Sie AddAzureContainerAppEnvironment() auf DistributedApplicationBuilder anrufen.
Hostspeicher von Azure Functions
Azure Functions erfordert für mehrere seiner wichtigsten Funktionalitäten eine Hostspeicherverbindung (AzureWebJobsStorage). Wenn du AddAzureFunctionsProject<TProject>() in deinem AppHost aufrufst, erstellst du standardmäßig eine AzureWebJobsStorage-Verbindung und stellst sie dem Functions-Projekt bereit. Diese Standardverbindung verwendet den Azure Storage-Emulator für lokale Entwicklungsläufe und stellt beim Bereitstellen automatisch ein Speicherkonto bereit. Für mehr Kontrolle ersetzen Sie diese Verbindung durch einen Aufruf .WithHostStorage() der Functions-Projektressource.
Die Standardberechtigungen, die Aspire für die Host-Speicherverbindung setzt, hängen davon ab, ob Sie anrufen WithHostStorage() oder nicht. Beim Hinzufügen von WithHostStorage() wird eine Zuordnung von Mitwirkenden für das Speicherkonto entfernt. In der folgenden Tabelle sind die Standardberechtigungen aufgeführt, die Von Aspire für die Hostspeicherverbindung festgelegt werden:
| Hostspeicherverbindung | Standardrollen |
|---|---|
Kein Anruf an WithHostStorage() |
Mitwirkender an Storage-Blobdaten, Mitwirkender an Storage-Warteschlangendaten, Mitwirkende für Speichertabellendaten, Speicherkonto-Mitwirkender |
Aufrufen von WithHostStorage() |
Mitwirkender an Storage-Blobdaten, Mitwirkender an Storage-Warteschlangendaten, Storage Table Data-Beitragender |
Das folgende Beispiel zeigt eine minimale AppHost.cs Datei, die den Hostspeicher ersetzt und eine Rollenzuweisung angibt:
using Azure.Provisioning.Storage;
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureContainerAppEnvironment("myEnv");
var myHostStorage = builder.AddAzureStorage("myHostStorage");
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithHostStorage(myHostStorage)
.WithRoleAssignments(myHostStorage, StorageBuiltInRole.StorageBlobDataOwner);
builder.Build().Run();
Hinweis
Der Besitzer von Speicher-BLOB-Daten ist die Rolle, die wir für die grundlegenden Anforderungen der Hostspeicherverbindung empfehlen. Ihre App kann Probleme verursachen, wenn die Verbindung mit dem Blob-Dienst nur den Aspire-Standardwert von "Storage Blob Data Contributor" aufweist.
Fügen Sie für Produktionsszenarien Aufrufe von WithHostStorage() und WithRoleAssignments() hinzu. Sie können diese Rolle dann explizit festlegen, zusammen mit allen anderen Personen, die Sie benötigen.
Trigger und Bindungsverbindungen
Ihre Trigger und Bindungen verweisen mithilfe des Namens auf Verbindungen. Die folgenden Aspire-Integrationen bieten diese Verbindungen durch einen Aufruf der Projektressource WithReference():
Das folgende Beispiel zeigt eine minimale AppHost.cs Datei, die einen Warteschlangentrigger konfiguriert. In diesem Beispiel ist die Connection-Eigenschaft des entsprechenden Warteschlangenauslösers auf MyQueueTriggerConnection festgelegt, sodass der Aufruf von WithReference() den Namen angibt.
var builder = DistributedApplication.CreateBuilder(args);
var myAppStorage = builder.AddAzureStorage("myAppStorage").RunAsEmulator();
var queues = myAppStorage.AddQueues("queues");
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithReference(queues, "MyQueueTriggerConnection");
builder.Build().Run();
Bei anderen Integrationen werden Aufrufe zum WithReference Festlegen der Konfiguration auf eine andere Weise durchgeführt. Sie stellen die Konfiguration für Aspire-Clientintegrationen zur Verfügung, aber nicht für Trigger und Bindungen. Für diese Integrationen rufen Sie WithEnvironment() auf, um die Verbindungsinformationen zum Auflösen des Auslösers oder der Bindung zu übergeben.
Das folgende Beispiel zeigt, wie Die Umgebungsvariable MyBindingConnection für eine Ressource festgelegt wird, die einen Verbindungszeichenfolgenausdruck verfügbar macht:
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithEnvironment("MyBindingConnection", otherIntegration.Resource.ConnectionStringExpression);
Wenn Sie möchten, dass sowohl Aspire-Clientintegrationen als auch das System von Triggern und Bindungen einen Anschluss verwenden, können Sie beide WithReference() und WithEnvironment() konfigurieren.
Bei einigen Ressourcen kann sich die Struktur einer Verbindung zwischen der lokalen Ausführung und der Veröffentlichung in Azure möglicherweise unterscheiden. Im vorherigen Beispiel könnte otherIntegration eine Ressource sein, die als Emulator ausgeführt wird, sodass ConnectionStringExpression eine Emulatorverbindungszeichenfolge zurückgeben würde. Wenn die Ressource veröffentlicht wird, kann Aspire jedoch eine identitätsbasierte Verbindung einrichten und ConnectionStringExpression den URI des Diensts zurückgeben. In diesem Fall müssen Sie möglicherweise einen anderen Umgebungsvariablennamen angeben, um identitätsbasierte Verbindungen für Azure-Funktionen einzurichten.
Im folgenden Beispiel wird builder.ExecutionContext.IsPublishMode verwendet, um das erforderliche Suffix bedingt hinzuzufügen:
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithEnvironment("MyBindingConnection" + (builder.ExecutionContext.IsPublishMode ? "__serviceUri" : ""), otherIntegration.Resource.ConnectionStringExpression);
Ausführliche Informationen zu den Verbindungsformaten, die jede Bindung unterstützt, sowie zu den Berechtigungen, die diese Formate erfordern, finden Sie auf den Referenzseiten der Bindung.
Für weitere Informationen darüber, wie Functions-Code von WithReference injizierte Werte liest, finden Sie unter Azure Functions-Runtimekonfiguration.
Hosten der Anwendung
Aspire unterstützt die Bereitstellung von Azure Container Apps für Functions-Projekte. Sie können auch die separate App Service-Integration in der Vorschau verwenden, um eine Funktions-App mit Containerunterstützung als Ziel zu verwenden:
- Als Container-App bereitstellen
- Bereitstellen als Funktions-App mit der Vorschauintegration für App Service
In beiden Fällen wird Ihr Projekt als Container bereitgestellt. Aspire kümmert sich um das Erstellen des Container-Images für Sie und das Hochladen in die Azure Container Registry.
Als Container-App bereitstellen
Wenn Ihr AppHost Azure Container Apps anspricht, richtet Aspire Skalierungsregeln für Ihr Functions-Projekt mit KEDA ein. Wenn du Azure Container Apps verwendest, musst du zusätzliche Funktionstasten einrichten. Weitere Informationen finden Sie unter Access Keys in Azure Container Apps.
Stellen Sie den konfigurierten AppHost bereit, indem Sie aspire deploy ausführen. Weitere Informationen finden Sie unter Deploy to Azure Container Apps und aspire deploy.
Zugriffstasten in Azure-Container-Apps
Mehrere Azure Functions-Szenarien verwenden Zugriffstasten, um eine grundlegende Gegenmaßnahme gegen unerwünschten Zugriff bereitzustellen. Beispielsweise müssen HTTP-Triggerfunktionen standardmäßig einen Zugriffsschlüssel aufrufen, obwohl diese Anforderung mithilfe der AuthLevel Eigenschaft deaktiviert werden kann. Siehe Arbeiten mit Zugriffstasten in Azure-Funktionen für Szenarien, für die möglicherweise ein Schlüssel erforderlich ist.
Wenn Sie ein Functions-Projekt mit Aspire für Azure Container Apps bereitstellen, erstellt oder verwaltet das System keine Functions-Zugangsschlüssel automatisch. Wenn du Access Keys verwenden musst, kannst du sie als Teil deiner AppHost-Einrichtung verwalten. Dieser Abschnitt zeigt Ihnen, wie Sie eine Erweiterungsmethode erstellen, die Sie aus der AppHost.cs AppHost-Datei aufrufen können, um Zugangsschlüssel zu erstellen und zu verwalten. Dieser Ansatz verwendet Azure Key Vault, um die Schlüssel zu speichern und als geheime Schlüssel in die Container-App zu integrieren.
Hinweis
Das Verhalten beruht hier auf dem ContainerApps geheimen Provider, der eine Funktions-Hostversion 4.1044.0 oder eine spätere Version benötigt.
Für diese Schritte ist Bicep-Version 0.38.3 oder höher erforderlich. Sie können Ihre Bicep-Version überprüfen, indem Sie das Kommando bicep --version in einem Eingabeaufforderungsfenster ausführen. Wenn Sie die Azure CLI installiert haben, können Sie az bicep upgrade verwenden, um Bicep schnell auf die neueste Version zu aktualisieren.
Fügen Sie die folgenden NuGet-Pakete Ihrem AppHost-Projekt hinzu:
Erstellen Sie eine neue Klasse in Ihrem AppHost-Projekt und fügen Sie folgenden Code hinzu:
using Aspire.Hosting.Azure;
using Azure.Provisioning.AppContainers;
namespace Aspire.Hosting;
internal static class Extensions
{
private record SecretMapping(string OriginalName, IAzureKeyVaultSecretReference Reference);
public static IResourceBuilder<T> PublishWithContainerAppSecrets<T>(
this IResourceBuilder<T> builder,
IResourceBuilder<AzureKeyVaultResource>? keyVault = null,
string[]? hostKeyNames = null,
string[]? systemKeyExtensionNames = null)
where T : AzureFunctionsProjectResource
{
if (!builder.ApplicationBuilder.ExecutionContext.IsPublishMode)
{
return builder;
}
keyVault ??= builder.ApplicationBuilder.AddAzureKeyVault("functions-keys");
var hostKeysToAdd = (hostKeyNames ?? []).Append("default").Select(k => $"host-function-{k}");
var systemKeysToAdd = systemKeyExtensionNames?.Select(k => $"host-systemKey-{k}_extension") ?? [];
var secrets = hostKeysToAdd.Union(systemKeysToAdd)
.Select(secretName => new SecretMapping(
secretName,
CreateSecretIfNotExists(builder.ApplicationBuilder, keyVault, secretName.Replace("_", "-"))
)).ToList();
return builder
.WithReference(keyVault)
.WithEnvironment("AzureWebJobsSecretStorageType", "ContainerApps")
.PublishAsAzureContainerApp((infra, app) => ConfigureFunctionsContainerApp(infra, app, builder.Resource, secrets));
}
private static void ConfigureFunctionsContainerApp(
AzureResourceInfrastructure infrastructure,
ContainerApp containerApp,
IResource resource,
List<SecretMapping> secrets)
{
const string volumeName = "functions-keys";
const string mountPath = "/run/secrets/functions-keys";
var appIdentityAnnotation = resource.Annotations.OfType<AppIdentityAnnotation>().Last();
var containerAppIdentityId = appIdentityAnnotation.IdentityResource.Id.AsProvisioningParameter(infrastructure);
var containerAppSecretsVolume = new ContainerAppVolume
{
Name = volumeName,
StorageType = ContainerAppStorageType.Secret
};
foreach (var mapping in secrets)
{
var secret = mapping.Reference.AsKeyVaultSecret(infrastructure);
containerApp.Configuration.Secrets.Add(new ContainerAppWritableSecret()
{
Name = mapping.Reference.SecretName.ToLowerInvariant(),
KeyVaultUri = secret.Properties.SecretUri,
Identity = containerAppIdentityId
});
containerAppSecretsVolume.Secrets.Add(new SecretVolumeItem
{
Path = mapping.OriginalName.Replace("-", "."),
SecretRef = mapping.Reference.SecretName.ToLowerInvariant()
});
}
containerApp.Template.Containers[0].Value!.VolumeMounts.Add(new ContainerAppVolumeMount
{
VolumeName = volumeName,
MountPath = mountPath
});
containerApp.Template.Volumes.Add(containerAppSecretsVolume);
}
public static IAzureKeyVaultSecretReference CreateSecretIfNotExists(
IDistributedApplicationBuilder builder,
IResourceBuilder<AzureKeyVaultResource> keyVault,
string secretName)
{
var secretParameter = ParameterResourceBuilderExtensions.CreateDefaultPasswordParameter(builder, $"param-{secretName}", special: false);
builder.AddBicepTemplateString($"key-vault-key-{secretName}", """
param location string = resourceGroup().location
param keyVaultName string
param secretName string
@secure()
param secretValue string
// Reference the existing Key Vault
resource keyVault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
name: keyVaultName
}
// Deploy the secret only if it does not already exist
@onlyIfNotExists()
resource newSecret 'Microsoft.KeyVault/vaults/secrets@2023-07-01' = {
parent: keyVault
name: secretName
properties: {
value: secretValue
}
}
""")
.WithParameter("keyVaultName", keyVault.GetOutput("name"))
.WithParameter("secretName", secretName)
.WithParameter("secretValue", secretParameter);
return keyVault.GetSecret(secretName);
}
}
Sie können dann diese Methode in der AppHost.cs Datei Ihres AppHosts verwenden:
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithHostStorage(storage)
.WithExternalHttpEndpoints()
.PublishWithContainerAppSecrets(systemKeyExtensionNames: ["mcp"]);
In diesem Beispiel wird ein Standard-Key Vault verwendet, der durch die Erweiterungsmethode erstellt wurde. Er führt zu einem Standardschlüssel und einem Systemschlüssel für die Verwendung mit der Model Context Protocol-Erweiterung.
Um diese Schlüssel von Clients zu verwenden, müssen Sie sie aus dem Schlüsseltresor abrufen.
Als Funktions-App bereitstellen
Hinweis
Die Bereitstellung als Funktions-App erfordert die Aspire-Azure-App-Service-Integration, die derzeit als Vorschau verfügbar ist.
Du kannst Aspire mithilfe der Aspire-Azure-App-Service-Integration so konfigurieren, dass es in einer Funktions-App bereitgestellt wird. Da Aspire das Functions-Projekt als Container bereitstellt, muss der Hosting-Plan für Ihre Funktionsanwendung die Bereitstellung containerisierter Anwendungen unterstützen.
Um Ihr Aspire Functions-Projekt als Funktions-App bereitzustellen, folgen Sie diesen Schritten:
- Führen Sie im AppHost-Verzeichnis
aspire add Aspire.Hosting.Azure.AppServiceaus, um das NuGet-Paket Aspire.Hosting.Azure.AppService hinzuzufügen. - Rufen Sie in der
AppHost.cs-DateiAddAzureAppServiceEnvironment()auf IhrerIDistributedApplicationBuilder-Instanz auf, um einen App Service-Plan zu erstellen. Beachten Sie, dass dies trotz des Namens keine App Service-Umgebung-Ressource bereitstellt. - Rufen Sie in der Projektressource „Functions“
.WithExternalHttpEndpoints()auf. Dies ist für die Bereitstellung mit der Aspire Azure App Service-Integration erforderlich. - Rufen Sie in der Functions-Projektressource
.PublishAsAzureAppServiceWebsite((infra, app) => app.Kind = "functionapp,linux")auf, um dieses Projekt im Plan als Function-App zu konfigurieren.
Wichtig
Stellen Sie sicher, dass Sie die app.Kind Eigenschaft auf "functionapp,linux" setzen. Diese Einstellung stellt sicher, dass die Ressource als Funktions-App erstellt wird, die sich auf die Erfahrungen beim Arbeiten mit Ihrer Anwendung auswirkt.
Das folgende Beispiel zeigt eine minimale AppHost.cs-Datei, die ein Functions-Projekt als Funktions-App bereitstellt:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppServiceEnvironment("functions-env");
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithExternalHttpEndpoints()
.PublishAsAzureAppServiceWebsite((infra, app) => app.Kind = "functionapp,linux");
builder.Build().Run();
Diese Konfiguration erstellt einen Premium V3-Plan. Bei Verwendung einer dedizierten App Service-Plan-SKU ist die Skalierung nicht ereignisbasiert. Stattdessen wird die Skalierung über die App Service-Planeinstellungen verwaltet.
Überlegungen und bewährte Methoden
Berücksichtigen Sie die folgenden Punkte, wenn Sie die Integration von Azure Functions mit Aspire bewerten:
Trigger- und Bindungskonfiguration über Aspire ist derzeit auf bestimmte Integrationen beschränkt. Ausführliche Informationen finden Sie in diesem Artikel unter Verbindungskonfiguration mit Aspire .
Die
Program.cs-Datei des Funktionsprojekts sollte dieIHostApplicationBuilder-Version des Hostinstanzstarts verwenden. MitIHostApplicationBuilderkönnen Siebuilder.AddServiceDefaults()aufrufen, um Aspire Service Defaults zu Ihrem Functions-Projekt hinzuzufügen.Aspire verwendet OpenTelemetry zur Überwachung. Sie können Aspire so konfigurieren, dass Daten über das Dienststandardprojekt nach Azure Monitor exportiert werden.
In vielen anderen Azure Functions-Kontexten können Sie die direkte Integration in Application Insights einschließen, indem Sie den Workerdienst registrieren. Registrieren Sie keine zweite, direkte Application Insights Pipeline, wenn Sie Aspire Service Defaults verwenden.
Für Functions-Projekte, die in eine Aspire-Orchestrierung aufgenommen sind, sollte der AppHost die meisten Anwendungskonfigurationen bereitstellen. Du kannst
local.settings.jsonverwenden, um das Functions-Projekt eigenständig mitfunc startauszuführen. Wenn Aspire das Projekt ausführt, überschreiben Aspire-injizierte Umweltvariablen Werte mit denselben Namen inlocal.settings.json.Vermeiden Sie es, einen zweiten Azure Storage-Emulator für Verbindungen zu starten, die der AppHost verwaltet. Konkurrierende Emulator-Instanzen können zu Port- und Speicherkonflikten führen.
Weitere Informationen finden Sie unter Azure Functions Laufzeitkonfiguration und Aspire-Telemetrie.