Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Aspire , dağıtık uygulamalar oluşturmak, çalıştırmak, hata ayıklamak ve dağıtmak için bir araç zinciridir. Aspire Azure İşlevleri entegrasyonu, bir Azure İşlevleri projesini Aspire AppHost'un parçası olarak geliştirmeye, hata ayıklamanıza ve düzenlemenize olanak tanır. Bu makaledeki .NET örnekleri izole işçi modelini kullanır.
Prerequisites
Aspire ile Azure İşlevleri'nin kullanılması için geliştirme ortamınızı ayarlayın:
AppHost tarafından gerekli olan .NET SDK dahil olmak üzere Aspire ön koşullarını yükleyin.
AppHost dizininden Aspire Azure İşlevleri barındırma entegrasyonunu yükleyin.
aspire add Aspire.Hosting.Azure.FunctionsAzure İşlevleri Temel Araçları'nı yükleyin.
Visual Studio kullanıyorsanız, en son Visual Studio ve Azure İşlevleri araç güncellemelerini yükleyin:
- Araçlar>Seçenekler'e gidin.
- Projeler ve Çözümler'in altında Azure İşlevleri'ne tıklayın.
- Güncelleştirmeleri denetle seçeneğini belirleyin ve istendiğinde güncelleştirmeleri yükleyin.
Entegrasyon paketi ve desteklenen AppHost API'leri hakkında daha fazla bilgi için AppHost'ta Azure İşlevleri'ı Düzenle.
Çözüm yapısı
Azure İşlevleri ve Aspire kullanan bir çözüm, AppHost ve bir veya daha fazla Functions projesi dahil olmak üzere birden fazla projeye sahiptir.
AppHost, başvurunuz için giriş noktasıdır. İşlevler projesi dahil olmak üzere uygulamanızın bileşenlerinin kurulumunu düzenler.
Çözüm genellikle bir hizmet varsayılanları projesi de içerir. Bu proje, uygulamanızdaki projeler arasında kullanılacak bir dizi varsayılan hizmet ve yapılandırma sağlar.
AppHost projesi
Entegrasyonu başarılı bir şekilde yapılandırmak için, AppHost projesinin aşağıdaki gereksinimleri karşıladığından emin olun:
- AppHost, Aspire.Hosting.Azure.Functions öğesine başvurur. Bu paket entegrasyonu tanımlar.
- Bir C# AppHost, bir Functions projesini referans alır ve
AddAzureFunctionsProject<TProject>()çağırır veya proje dosyasının yolunu kullanarakAddAzureFunctionsProject(name, projectPath)çağırır. TypeScript AppHosts, 'nin project-path formunuaddAzureFunctionsProjectkullanır. -
AddAzureFunctionsProjectyerineAddProjectkullanın.AddProjectkullanılarak eklenen bir Functions projesi düzgün şekilde başlatılamıyor.
Aşağıdaki örnek, bir C# AppHost projesi için minimum AppHost.cs bir dosyayı göstermektedir:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject");
builder.Build().Run();
Azure İşlevleri projesi
Tümleştirmeyi başarıyla yapılandırmak için Azure İşlevleri projesinin aşağıdaki gereksinimleri karşıladığından emin olun:
.NET 8 veya daha yeni sürümleri hedefleyin, .NET 9 SDK veya daha yenisini kullanın ve izole çalışan modelini kullanın.
Referans: Microsoft.Azure. Functions.Worker, Microsoft.Azure. Functions.Worker.Sdk ve HTTP tetikleyicileri için Microsoft.Azure. Functions.Worker.Extensions.Http.AspNetCore.
Dosyanız
Program.csIHostApplicationBuildersürümünü kullanmalıdır. Bu gereksinim, kullanmanızFunctionsApplication.CreateBuilder(args)gerektiği anlamına gelir.Çözümünüz bir hizmet varsayılanları projesi içeriyorsa İşlevler projenizin bunu kullanacak şekilde yapılandırıldığından emin olun:
- İşlevler projesi, hizmet varsayılanları projesine yönelik bir proje başvurusu içermelidir.
-
IHostApplicationBuilderöğesiniProgram.csiçinde derlemeden öncebuilder.AddServiceDefaults()işlevine bir çağrı ekleyin.
Aşağıdaki örnekte Aspire'de kullanılan İşlevler projesi için en düşük Program.cs dosya gösterilmektedir:
using Microsoft.Azure.Functions.Worker.Builder;
using Microsoft.Extensions.Hosting;
var builder = FunctionsApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.ConfigureFunctionsWebApplication();
builder.Build().Run();
Bu örnek, diğer Program.cs birçok örnekte ve Azure İşlevleri şablonlarında görünen varsayılan Application Insights yapılandırmasını içermez. Bunun yerine, Aspire'de builder.AddServiceDefaults() yöntemini çağırarak OpenTelemetry entegrasyonunu yapılandırabilirsiniz.
Tümleştirmeden en iyi şekilde yararlanmak için aşağıdaki yönergeleri göz önünde bulundurun:
- İşlevler projesine doğrudan Application Insights tümleştirmesi eklemeyin. Bunun yerine Aspire'de izleme, OpenTelemetry desteği aracılığıyla işlenir. Aspire'i hizmet varsayılanları projesi aracılığıyla Verileri Azure İzleyici'ye aktaracak şekilde yapılandırabilirsiniz.
- Aspire Functions projesini çalıştırırken, AppHost tarafından enjekte edilen ayarları tercih edin. Projeyi
func startile bağımsız olarak çalıştırmak için eşdeğer ayarlarılocal.settings.jsoniçinde tutabilirsiniz; Aspire tarafından eklenen ortam değişkenleri bunları geçersiz kılar.
Aspire ile bağlantı yapılandırması
AppHost kaynakları tanımlar ve kod kullanarak aralarında bağlantı kurmanıza yardımcı olur. Bu bölümde, Azure İşlevleri projenizin kullandığı bağlantıların nasıl yapılandırılıp özelleştirileceği gösterilmektedir.
Aspire, başlamanıza yardımcı olabilecek varsayılan bağlantı izinlerini içerir. Ancak, bu izinler uygulamanız için uygun veya yeterli olmayabilir.
Azure rol tabanlı erişim denetimi (RBAC) kullanan senaryolar için, proje kaynağında WithRoleAssignments() yöntemini çağırarak izinleri özelleştirebilirsiniz. çağrısı WithRoleAssignments()yaptığınızda, tüm varsayılan rol atamaları kaldırılır ve istediğiniz tam küme rol atamalarını açıkça tanımlamanız gerekir. Uygulamanızı Azure Container Apps'te barındırıyorsanız, WithRoleAssignments() kullanmak için AddAzureContainerAppEnvironment() üzerinde DistributedApplicationBuilder çağrı yapmanız gerekir.
Azure İşlevleri barındırma depolama alanı
Azure İşlevleri, temel davranışlarının birkaçı için bir konak depolama bağlantısı (AzureWebJobsStorage) gerektirir. AppHost'unuzu çağırdığınızda AddAzureFunctionsProject<TProject>() , varsayılan olarak bir AzureWebJobsStorage bağlantı oluşturur ve bunu Functions projesine sağlarsınız. Bu varsayılan bağlantı, yerel geliştirme çalışmaları için Azure Depolama emülatörü kullanır ve dağıttığınızda otomatik olarak bir depolama hesabı oluşturur. Daha fazla kontrol için, bu bağlantıyı Functions proje kaynağını çağırarak .WithHostStorage() değiştirin.
Aspire’nin ana bilgisayar depolama bağlantısı için belirlediği varsayılan izinler, WithHostStorage() çağırıp çağırmamanıza bağlıdır.
WithHostStorage() eklemek, bir Depolama Hesabı Katkıda Bulunanı atamasını kaldırır. Aşağıdaki tabloda Aspire'in konak depolama bağlantısı için ayar yaptığı varsayılan izinler listeleniyor:
| Ana bilgisayar depolama bağlantısı | Varsayılan roller |
|---|---|
Arama yok WithHostStorage() |
Depolama Blob Veri Katkı Sağlayıcısı Depolama Kuyruğu Veri Katkı Sağlayıcı Depolama Tablosu Veri Katılımcısı Depolama Hesabı Katılımcısı |
Arama WithHostStorage() |
Depolama Blob Veri Katkı Sağlayıcısı Depolama Kuyruğu Veri Katkı Sağlayıcı Depolama Tablosu Veri Katkı Sağlayıcısı |
Aşağıdaki örnek, ana depolamayı yerine koyan ve rol atamasını belirten minimal AppHost.cs bir dosyayı gösterir:
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();
Note
Depolama Blobu Veri Sahibi , konak depolama bağlantısının temel gereksinimleri için önerdiğimiz roldür. Blob hizmetine bağlantı yalnızca Depolama Blob Verisi Katkıcısı Aspire rolüne sahipse, uygulamanız sorunlarla karşılaşabilir.
Üretim senaryoları için hem WithHostStorage() hem de WithRoleAssignments() çağrılarını ekleyin. Ardından bu rolü, ihtiyacınız olan diğer kişilerle birlikte açıkça ayarlayabilirsiniz.
Bağlantıları tetikleme ve bağlama
Tetikleyicileriniz ve bağlamalarınız ada göre bağlantılara referans verir. Aşağıdaki Aspire tümleştirmeleri, proje kaynağındaki WithReference() çağrısı aracılığıyla bu bağlantıları sağlar.
Aşağıdaki örnek, bir kuyruk tetikleyicisini yapılandıran minimal AppHost.cs bir dosyayı gösterir. Bu örnekte, karşılık gelen kuyruk tetikleyicisinin Connection özelliği MyQueueTriggerConnection olarak ayarlanmıştır, bu yüzden WithReference() adı belirtir.
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();
Diğer tümleştirmelerde, WithReference yapılandırmayı farklı bir şekilde ayarlamak için yapılan çağrılar. Yapılandırmayı Aspire istemci tümleştirmeleri için kullanılabilir hale getirir, ancak tetikleyiciler ve bağlamalar için kullanılamaz. Bu tümleştirmeler için, tetikleyicinin veya bağlayıcının bağlantı bilgilerini çözülmesi için iletmek amacıyla WithEnvironment() çağrısı yapın.
Aşağıdaki örnekte, bağlantı dizesi ifadesini kullanıma sunan bir kaynak için ortam değişkeninin MyBindingConnection nasıl ayarlanacağı gösterilmektedir:
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithEnvironment("MyBindingConnection", otherIntegration.Resource.ConnectionStringExpression);
Eğer hem Aspire istemci tümleştirmelerinin hem de tetikleyici ve bağlama sisteminin bir bağlantı kullanmasını istiyorsanız, WithReference() ve WithEnvironment()'yi yapılandırabilirsiniz.
Bazı kaynaklar için, bağlantının yapısı yerel olarak çalıştırdığınız ve Azure'da yayımladığınız zaman arasında farklı olabilir. Önceki örnekte, öykünücü olarak çalışan otherIntegration bir kaynak olduğunda, bu nedenle ConnectionStringExpression bir öykünücü bağlantı dizesi döndürebilir. Ancak kaynak yayımlandığında Aspire kimlik tabanlı bir bağlantı ayarlayabilir ve ConnectionStringExpression hizmetin URI'sini döndürebilir. Bu durumda, Azure İşlevleri için kimlik tabanlı bağlantılar ayarlamak için farklı bir ortam değişkeni adı sağlamanız gerekebilir.
Aşağıdaki örnek, gerekli son eki koşullu olarak eklemek için kullanır builder.ExecutionContext.IsPublishMode :
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithEnvironment("MyBindingConnection" + (builder.ExecutionContext.IsPublishMode ? "__serviceUri" : ""), otherIntegration.Resource.ConnectionStringExpression);
Her bağlamanın desteklediği bağlantı biçimleri ve bu biçimlerin gerektirdiği izinler hakkında ayrıntılı bilgi için bağlamanın başvuru sayfalarına bakın.
Functions kodunun enjekte WithReferenceedilen değerleri nasıl okuduğu hakkında daha fazla bilgi için bkz. Azure İşlevleri runtime configuration.
Uygulamayı barındırma
Aspire, Functions projeleri için Azure Container Apps dağıtımını destekler. Ayrıca ayrı önizleme uygulama uygulama entegrasyonunu kullanarak konteyner özellikli bir fonksiyon uygulamasını hedefleyebilirsiniz:
- Konteyner uygulaması olarak dağıt
- Önizleme App Service entegrasyonunu kullanarak fonksiyon uygulaması olarak dağıt
Her iki durumda da projeniz bir konteyner olarak dağıtılır. Aspire kapsayıcı görüntüsünü sizin için oluşturup Azure Container Registry'ye göndermeyi üstlenir.
Konteyner uygulaması olarak dağıt
AppHost Azure Container Apps'ı hedeflediğinde, Aspire Functions projeniz için KEDA kullanarak ölçeklendirme kuralları ayarlar. Azure Container Apps kullanırken fonksiyon anahtarları için ekstra kurulum yapmanız gerekir. Daha fazla bilgi için Azure Container Apps'te erişim anahtarları konusuna bakın.
Yapılandırılmış AppHost'u aspire deploy çalıştırarak dağıtın. Daha fazla bilgi için bkz. Deploy to Azure Container Apps ve aspire deploy.
Azure Container Apps'te erişim anahtarları
Çeşitli Azure İşlevleri senaryoları, istenmeyen erişime karşı temel bir risk azaltma sağlamak için erişim anahtarlarını kullanır. Örneğin, HTTP tetikleyici işlevleri varsayılan olarak bir erişim anahtarının çağrılmasına ihtiyaç duyar, ancak bu gereksinim özelliği kullanılarak AuthLeveldevre dışı bırakılabilir. Anahtar gerektirebilecek senaryolar için bkz. Azure İşlevleri'nde erişim anahtarlarıyla çalışma .
Aspire ile Azure Container Apps'e bir Functions projesi dağıttığınızda, sistem otomatik olarak Functions erişim anahtarlarını oluşturmaz veya yönetmez. Erişim anahtarlarını kullanmanız gerekiyorsa, bunları AppHost kurulumunuzun bir parçası olarak yönetebilirsiniz. Bu bölüm, erişim anahtarları oluşturmak ve yönetmek için AppHost'unuzun AppHost.cs dosyasından çağırabileceğiniz bir uzantı yöntemini nasıl oluşturacağınızı gösterir. Bu yaklaşımda anahtarları depolamak için Azure Key Vault kullanılır ve bunları kapsayıcı uygulamasına gizli dizi olarak bağlar.
Note
Buradaki ContainerApps davranış, gizli sağlayıcıya bağlıdır ve bu da Functions host sürümü 4.1044.0 veya daha sonrasını gerektirir.
Bu adımlar için Bicep sürümü 0.38.3 veya daha yeni bir sürümü gerektirir. Bicep sürümünüzü kontrol etmek için bir komut isteminden bicep --version komutunu çalıştırabilirsiniz. Azure CLI yüklüyse, Bicep'i en son sürüme hızla güncelleştirmek için kullanabilirsiniz az bicep upgrade .
AppHost projenize aşağıdaki NuGet paketlerini ekleyin:
AppHost projenizde yeni bir sınıf oluşturun ve aşağıdaki kodu ekleyin:
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);
}
}
Sonra AppHost AppHost.cs dosyanızda bu yöntemi kullanabilirsiniz:
builder.AddAzureFunctionsProject<Projects.MyFunctionsProject>("MyFunctionsProject")
.WithHostStorage(storage)
.WithExternalHttpEndpoints()
.PublishWithContainerAppSecrets(systemKeyExtensionNames: ["mcp"]);
Bu örnek, uzantı yöntemi tarafından oluşturulan varsayılan bir anahtar kasası kullanır. Model Bağlam Protokolü uzantısıyla kullanılan bir varsayılan anahtar ve sistem anahtarı oluşur.
Bu anahtarları kullanmak için istemcilerden anahtarları anahtar deposundan almanız gerekir.
Fonksiyon uygulaması olarak dağıt
Note
Fonksiyon uygulaması olarak dağıtmak için şu anda önizleme aşamasında olan Aspire Azure App Service entegrasyonu gereklidir.
Aspire'yi bir fonksiyon uygulamasına dağıtacak şekilde Aspire Azure App Service entegrasyonunu kullanarak yapılandırmak mümkündür. Aspire, Functions projesini bir konteyner olarak dağıttığı için, fonksiyon uygulamanızın barındırma planı konteynerize uygulamaları dağıtmayı desteklemelidir.
Aspire Functions projenizi bir fonksiyon uygulaması olarak dağıtmak için şu adımları izleyin:
- AppHost dizininden,
aspire add Aspire.Hosting.Azure.AppServiceNuGet paketini eklemek için komutunu çalıştırın. -
AppHost.csbir App Service planı oluşturmak için,AddAzureAppServiceEnvironment()dosyasında örneğiniziIDistributedApplicationBuilderçağırın. Adına rağmen, bunun bir App Service Ortamı kaynağı sağlamadığını unutmayın. - İşlevler proje kaynağında
.WithExternalHttpEndpoints()öğesini çağırın. Aspire Azure App Service tümleştirmesi ile dağıtmak için bu gereklidir. - Functions projesi kaynağında, bu projeyi plan içinde bir işlev uygulaması olarak özelleştirmek için
.PublishAsAzureAppServiceWebsite((infra, app) => app.Kind = "functionapp,linux")çağırın.
Important
özelliğini app.Kindolarak ayarladığınızdan "functionapp,linux" emin olun. Bu ayar, kaynağın bir işlev uygulaması olarak oluşturulmasını sağlar ve bu da uygulamanızla çalışma deneyimlerini etkiler.
Aşağıdaki örnek, bir Functions projesini fonksiyon uygulaması olarak dağıtan minimal AppHost.cs bir dosyayı gösterir:
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();
Bu yapılandırma bir Premium V3 planı oluşturur. Ayrılmış bir App Service planı SKU'su kullanılırken ölçeklendirme olay tabanlı değildir. Bunun yerine ölçeklendirme, App Service planı ayarları aracılığıyla yönetilir.
Dikkat edilmesi gerekenler ve en iyi yöntemler
Azure İşlevleri'nin Aspire ile tümleştirmesini değerlendirirken aşağıdaki noktaları göz önünde bulundurun:
Aspire aracılığıyla tetikleme ve bağlama yapılandırması şu anda belirli tümleştirmelerle sınırlıdır. Ayrıntılar için bu makaledeki Aspire ile bağlantı yapılandırması bölümüne bakın.
İşlev projenizin
Program.csdosyasıIHostApplicationBuildersürümünü kullanmalıdır.IHostApplicationBuilderkullanarak, Functions projenizebuilder.AddServiceDefaults()eklemek için çağırabilirsiniz.Aspire, izleme için OpenTelemetry kullanır. Aspire'i hizmet varsayılanları projesi aracılığıyla Verileri Azure İzleyici'ye aktaracak şekilde yapılandırabilirsiniz.
Diğer birçok Azure İşlevi bağlamında çalışan hizmetini kaydederek Application Insights ile doğrudan tümleştirme ekleyebilirsiniz. Aspire Service Defaults kullanırken ikinci, doğrudan Application Insights pipeline kaydetmeyin.
Aspire orkestrasyonuna dahil edilen Fonksiyon projeleri için, AppHost çoğu uygulama yapılandırmasını sağlamalıdır.
local.settings.jsonFonksiyonlar projesini bağımsız olarak çalıştırmak için kullanabilirsin.func startAspire projeyi çalıştırdığında, Aspire tarafından enjekte edilen ortam değişkenleri aynı isimlere sahip değerleri geçersiz kılar.local.settings.jsonAppHost'un yönettiği bağlantılar için ikinci bir Azure Depolama emülatörü başlatmaktan kaçının. Rekabet eden emülatör örnekleri port ve depolama çatışmalarına yol açabilir.
Daha fazla bilgi için bkz. Azure İşlevleri runtime configuration ve Aspire telemetri.