Přizpůsobení připojovací řetězec pomocí manifestů Aspire pro .NET
Nástroje pro nasazení, jako je Visual Studio nebo Azure Developer CLI, vytvářejí soubory manifestu, které popisují obsah řešení .NET Aspire. Pokud chcete nasazení přizpůsobit, můžete přímo provést změny v souboru manifestu.
Ve svém maloobchodním prodejci venkovních zařízení jste se rozhodli použít existující instanci Azure Cache for Redis k hostování výstupní mezipaměti pro mikroslužbu webové aplikace. Chcete zajistit, aby se služba webové aplikace připojuje ke správné instanci služby Azure Cache for Redis.
V této lekci se dozvíte, jak změnit připojovací řetězec na služby zálohování v souboru manifestu .NET Aspire.
Generování souboru manifestu pomocí rozhraní příkazového řádku .NET
Během místního vývoje a ladění nevytvoří soubor manifestu .NET Aspire. Pokud jde o nasazení, musí .NET popsat obsah řešení .NET Aspire, včetně jejích mikroslužeb, backingových služeb a konfigurace. Soubor manifestu slouží k tomuto účelu. Popisuje řešení ve formátu JSON.
Pokud chcete vytvořit soubor manifestu, Visual Studio i Azure Developer CLI spusťte příkaz .NET CLI run
s konkrétním cílem. Stejným příkazem můžete ručně vytvořit vlastní soubor manifestu, například takto:
dotnet run --project eShop.AppHost\eShop.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Poznámka:
Ujistěte se, že jste zadali projekt hostitele aplikace s --project
možností.
Příkaz vytvoří výstup podobný tomuto textu:
Building...
info: Aspire.Hosting.DistributedApplication[0]
Aspire version: 8.0.1+a6e341ebbf956bbcec0dda304109815fcbae70c9
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: C:\repos\eShop\aspire-manifest.json
Ke spuštění dotnet
příkazu můžete použít také spouštěcí profil. Spouštěcí profil je skupina nastavení, která při spuštění konfiguruje projekt .NET. Například šablona .NET Aspire Starter vytvoří tyto spouštěcí profily:
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:17170;http://localhost:15281",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21147",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22239"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15281",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19197",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20233"
}
}
}
Přidejte spouštěcí profil pro vytvoření souboru manifestu s kódem JSON podobným tomuto textu:
"profiles": {
"generate-manifest": {
"commandName": "Project",
"launchBrowser": false,
"dotnetRunMessages": true,
"commandLineArgs": "--publisher manifest --output-path aspire-manifest.json"
}
}
V sadě Visual Studio pak můžete při spuštění ladění zvolit profil vygenerování manifestu . Na příkazovém --launch-profile
řádku použijte tuto možnost:
dotnet run --launch-profile generate-manifest
Formát souboru manifestu
Manifest je soubor JSON s jedním elementem nejvyšší úrovně s názvem resources
. V rámci daného objektu najdete jeden objekt pro každou mikroslužbu a backingovou službu. Pro každý z těchto objektů zahrnují nastavení připojovací řetězec, proměnné prostředí a názvy imagí kontejneru.
Tady je ukázkový manifest šablony .NET Aspire Starter bez úprav. Řešení používá mezipaměť Redis:
{
"resources": {
"cache": {
"type": "container.v0",
"connectionString": "{cache.bindings.tcp.host}:{cache.bindings.tcp.port}",
"image": "docker.io/library/redis:7.2",
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"targetPort": 6379
}
}
},
"apiservice": {
"type": "project.v0",
"path": "AspireStarter.ApiService/AspireStarter.ApiService.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory",
"ASPNETCORE_FORWARDEDHEADERS_ENABLED": "true"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http"
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http"
}
}
},
"webfrontend": {
"type": "project.v0",
"path": "AspireStarter.Web/AspireStarter.Web.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory",
"ASPNETCORE_FORWARDEDHEADERS_ENABLED": "true",
"ConnectionStrings__cache": "{cache.connectionString}",
"services__apiservice__http__0": "{apiservice.bindings.http.url}",
"services__apiservice__https__0": "{apiservice.bindings.https.url}"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"external": true
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http",
"external": true
}
}
}
}
}
Připojovací řetězce a odkazy na vazby
V příkladu manifestu existují tři prostředky:
webfrontend
: Tento prostředek je mikroslužba, která zákazníkům prezentuje webové rozhraní.apiservice
: Tento prostředek je rozhraní REST API, kteréwebfrontend
volá. V šabloně je toto volání k získání dat o počasí.cache
: Tento prostředek je mezipaměť Redis, která slouží k optimalizaci výkonuwebfrontend
mikroslužby.
Všimněte si, že každý ze tří prostředků obsahuje bindings
oddíl, který určuje protokoly, které můžete použít pro připojení k danému prostředku.
V souboru Program.cs hostitele aplikace projekt závisí na tom, jak na:webfrontend
cache
apiservice
var cache = builder.AddRedis("cache");
var apiService = builder.AddProject<Projects.AspireStarter_ApiService>("apiservice");
builder.AddProject<Projects.AspireStarter_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(cache)
.WithReference(apiService);
V souboru manifestu jsou tyto závislosti vyjádřeny jako proměnné prostředí:
"env": {
"ConnectionStrings__cache": "{cache.connectionString}",
"services__apiservice__http__0": "{apiservice.bindings.http.url}",
"services__apiservice__https__0": "{apiservice.bindings.https.url}"
}
Závislosti používají zástupné řetězce, které odkazují na strukturu souboru manifestu. Třetí závislost například odkazuje na vazbu HTTPS služby API: