Novinky v .NET.NET Aspire 9.0
📢 .NET Aspire 9.0 je příští hlavní obecná dostupnost (GA) verze .NET Aspire; podporuje oba:
- .NET 8.0 dlouhodobá podpora (LTS) nebo
- .NET Podpora standardních termínů (STS) 9.0
Poznámka
Můžete použít .NET Aspire 9.0 s .NET 8 nebo .NET 9!
Toto vydání řeší některé z nejžádanějších funkcí a problémových bodů ze strany komunity. Nejlepší funkce jsou řízené komunitou! Pokud se chcete připojit ke komunitě, navštivte nás na na platformě Discord, kde můžete chatovat s členy týmu a spolupracovat s námi na GitHub.
Další informace o oficiální verzi .NET a podpoře verzí .NET Aspire najdete tady:
- .NET zásady podpory: Definice pro LTS a STS.
- .NET .NET Aspire zásady podpory: Důležité jedinečné podrobnosti životního cyklu produktu.
Aktualizace na .NET.NET Aspire 9
Pokud chcete upgradovat ze starších verzí .NET Aspire na .NET Aspire 9, postupujte podle pokynů v oficiální příručce Upgrade na .NET.NET Aspire 9. Tato příručka obsahuje podrobné pokyny k upgradu stávajících řešení .NET Aspire na .NET Aspire 9. Bez ohledu na to, jestli ho provádíte ručně nebo používáte Pomocníka pro upgrade, průvodce zpřístupňuje krátký postup.
Vylepšení nástrojového vybavení
.NET Aspire 9 usnadňuje konfiguraci prostředí pro vývoj .NET Aspire aplikací. Už nepotřebujete .NET úlohu. Místo toho nainstalujete nový .NET.NET Aspire SDK do projektu hostující aplikace vašich .NET.NET Aspire řešení. Další informace naleznete v části .NET.NET Aspire konfigurace a nástroje.
Šablony se přesunuly.
.NET
.NET Aspire 9 přesouvá obsah, který byl dříve instalován prostřednictvím pracovní zátěže, do samostatných balíčků NuGet. To zahrnuje šablony pro vytváření nových projektů a řešení .NET.NET Aspire. Tyto šablony se instalují pomocí příkazu dotnet new install
. Můžete je nainstalovat spuštěním následujícího příkazu:
dotnet new install Aspire.ProjectTemplates::9.0.0
Spropitné
Pokud už máte nainstalovanou .NET.NET Aspire úlohu, musíte předat příznak --force
pro přepsání existujících šablon. Klidně odinstalujte pracovní zátěž .NET.NET Aspire.
Další informace naleznete v šablonách .NET.NET Aspire.
Vylepšení uživatelského rozhraní řídicího panelu a nové funkce interaktivity
Řídicí panel .NET.NET Aspire se s každou verzí dál vylepšuje.
Správa životního cyklu prostředků
Nejžádanější funkcí řídicího panelu je správa životních cyklů orchestrovaných pojmenovaných prostředků. Konkrétně schopnost zastavit, spustit a restartovat prostředky. Tato funkce funguje pro projekty, kontejnery a spustitelné soubory. Umožňuje restartovat jednotlivé prostředky, aniž by bylo nutné restartovat celého hostitele aplikace. U projektových prostředků se během připojení ladicího programu znovu připojí při restartování. Další informace najdete na řídicím panelu: .NET.NET Aspire, Zastavení nebo spuštění prostředku.
Mobilní a responzivní podpora
Řídicí panel .NET Aspire je teď přívětivý pro mobilní zařízení a rychle se přizpůsobuje široké škále velikostí obrazovky a umožňuje správu nasazených .NET Aspire aplikací na cestách. Provedli jsme další vylepšení přístupnosti, včetně zobrazení nastavení a přetečení obsahu na mobilních zařízeních.
Citlivé vlastnosti, objemy a kontroly stavu zdraví v detailech o prostředcích
Zobrazení podrobností o prostředku obsahuje několik vylepšení:
Vlastnosti lze označit jako citlivé a automaticky je maskovat v uživatelském rozhraní řídicího panelu. Tato funkce zabezpečení pomáhá zabránit náhodnému zveřejnění klíčů nebo hesel při sdílení řídicího panelu s jinými lidmi. Například argumenty kontejneru můžou předávat citlivé informace, takže se ve výchozím nastavení maskují.
Nakonfigurované svazky kontejnerů jsou zobrazené v podrobnostech o prostředcích.
.NET .NET Aspire 9 přidává podporu zdravotních kontrol. Podrobné informace o těchto kontrolách lze nyní zobrazit v podokně podrobností o prostředku, které ukazují, proč může být prostředek označen jako nezdravý nebo zhoršený. Další informace o kontrolách stavu najdete zde.
Barevný záznam konzoly
Escape kódy ANSI formátují text v terminálech ovládáním barev (popředí a pozadí) a stylů, jako jsou tučné písmo, podtržené a kurzíva. Dříve stránka konzolových protokolů řídicího panelu mohla vykreslit pouze jeden escape kód ANSI najednou, což selhalo při kombinaci více kódů. Může například zobrazit červený text, ale ne text, který byl červený i tučný.
Příspěvek komunity od @mangeg zlepšil podporu řídicích kódů ANSI a odstranil toto omezení.
Dalším vylepšením protokolů konzoly je skrytí nepodporovaných escape sekvencí. Kódy, které nesouvisí se zobrazením textu, jako je umístění kurzoru nebo komunikace s operačním systémem, nemají v tomto uživatelském rozhraní smysl a jsou skryté.
Přidání telemetrických dat orientovaných na uživatele
telemetrie zůstává zásadním aspektem .NET.NET Aspire. V .NET.NET Aspire 9 se do služby Telemetry zavedlo mnoho nových funkcí.
Vylepšené filtrování telemetrie
Stopy je možné filtrovat pomocí hodnot atributů. Pokud například chcete zobrazit trasování jenom pro jeden koncový bod v aplikaci, je možné vyfiltrovat atribut http.route
požadavků HTTP na zadanou hodnotu.
Filtrování telemetrie také podporuje automatické dokončování existujících hodnot. Dialogové okno Přidat filtr poskytuje kombinované pole pro výběr z hodnot dostupných na nástěnce. Tato funkce usnadňuje filtrování skutečných dat a pomáhá vyhnout se překlepům samostatným zadáním hodnoty.
Další informace najdete v tématu .NET.NET Aspire řídicí panel: Filtrování trasování.
Kombinování telemetrie z více prostředků
Pokud má prostředek více replik, můžete teď filtrovat telemetrii a zobrazit data ze všech instancí najednou. Vyberte nadřazený zdroj s označením (application)
. Další informace viz .NET.NET Aspire dashboard: Kombinování telemetrie z více zdrojů.
Podpora telemetrie prohlížeče
Řídicí panel podporuje protokol OpenTelemetry (OTLP) přes HTTP a sdílení prostředků mezi různými zdroji (CORS). Tyto funkce umožňují odesílat OpenTelemetry z aplikací prohlížeče na řídicí panel .NET Aspire.
Například jednostránková aplikace založená na prohlížeči (SPA) může nakonfigurovat JavaScript OpenTelemetry SDK, aby odesílala strukturované protokoly, trasování a metriky vytvořené v prohlížeči na řídicí panel. Telemetrie prohlížeče se zobrazuje společně s telemetrií serveru.
stránka s podrobnostmi trasování telemetrie prohlížeče
Další informace o konfiguraci telemetrie prohlížeče najdete v dokumentaci v části Povolení telemetrie prohlížeče.
Hostitel aplikací (Orchestrace)
Hostitel aplikace .NET.NET Aspire je jednou z nejdůležitějších funkcí .NET.NET Aspire. V .NET.NET Aspire 9 bylo do hostitele aplikace přidáno několik nových funkcí.
Čekání na závislosti
Pokud jste postupovali společně s .NET.NET Aspire, už víte, že váš projekt hostitele aplikace je místo, kde definujete model aplikace. Vytvoříte tvůrce distribuovaných aplikací, přidáte a nakonfigurujete prostředky a vyjadřujete jejich závislosti. Teď můžete určit, že prostředek by měl před spuštěním čekat na jiný prostředek. To může pomoct vyhnout se chybám připojení při spuštění tím, že spustíte pouze prostředky, když jsou jejich závislosti připravené.
var builder = DistributedApplication.CreateBuilder(args);
var rabbit = builder.AddRabbitMQ("rabbit");
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(rabbit)
.WaitFor(rabbit); // Don't start "api" until "rabbit" is ready...
builder.Build().Run();
Když se hostitel aplikace spustí, počká, až bude prostředek rabbit
připravený, a teprve potom spustí prostředek api
.
Existují dvě exponované metody pro čekání na prostředek:
- WaitFor: Před spuštěním jiného prostředku počkejte, až bude prostředek připravený.
- WaitForCompletion: Počkejte, až se prostředek dokončí, než spustíte jiný prostředek.
Další informace viz .NET.NET Aspire hostitel aplikace: Čekání na prostředky.
Kontroly stavu prostředků
Rozhraní API WaitFor
používá standardní .NET kontroly stavu k určení, jestli je prostředek připravený. Co ale znamená, že je prostředek připravený? Nejlepší je, že je to možné konfigurovat příjemcem nad rámec jejich výchozích hodnot.
Pokud prostředek nezpřístupňuje žádné kontroly stavu (žádné kontroly stavu zaregistrované v aplikaci), hostitel aplikace před spuštěním závislého prostředku počká, až bude prostředek ve stavu Running.
U prostředků, které zpřístupňují koncové body HTTP, můžete snadno přidat kontrolu stavu, která dotazuje konkrétní cestu pro odpověď HTTP 200.
var builder = DistributedApplication.CreateBuilder(args);
var catalogApi = builder.AddContainer("catalog-api", "catalog-api")
.WithHttpEndpoint(targetPort: 8080)
.WithHttpHealthCheck("/health");
builder.AddProject<Projects.WebApplication1>("store")
.WithReference(catalogApi.GetEndpoint("http"))
.WaitFor(catalogApi);
builder.Build().Run();
Předchozí příklad přidá do prostředku catalog-api
kontrolu zdravotního stavu. Hostitel aplikace čeká, až kontrola stavu vrátí stav "zdravý", než spustí prostředek store
. Zjistí, že prostředek je připravený, když koncový bod /health
vrátí stavový kód HTTP 200.
Zatímco store
čeká, až catalog-api
bude v pořádku, prostředky na řídicím panelu se zobrazí takto:
Mechanismus kontroly stavu hostitele aplikace je založen na implementaci IHealthChecksBuilder z jmenného prostoru Microsoft.Extensions.Diagnostics.HealthChecks.
Data zprávy o kontrolách zdraví, která se zobrazují na řídicím panelu:
Vytvoření vlastní kontroly zdraví je jednoduché. Začněte definováním kontroly zdraví a potom přidružte její název k jakýmkoliv prostředkům, pro které platí.
var builder = DistributedApplication.CreateBuilder(args);
var healthyAfter = DateTime.Now.AddSeconds(20);
builder.Services.AddHealthChecks().AddCheck(
"delay20secs",
() => DateTime.Now > healthyAfter
? HealthCheckResult.Healthy()
: HealthCheckResult.Unhealthy()
);
var cache = builder.AddRedis("cache")
.WithHealthCheck("delay20secs");
builder.AddProject<Projects.MyApp>("myapp")
.WithReference(cache)
.WaitFor(cache);
Předchozí příklad přidá do prostředku cache
kontrolu stavu, která nahlásí, že není v pořádku po dobu prvních 20 sekund od spuštění hostitele aplikace. Prostředek myapp
tedy čeká 20 sekund před spuštěním, aby bylo zajištěno, že prostředek cache
je funkční.
Metody AddCheck a WithHealthCheck poskytují jednoduchý mechanismus pro vytváření kontrol stavu a jejich přidružení ke konkrétním prostředkům.
Trvalé kontejnery
Hostitel aplikace teď podporuje trvalé kontejnery. Trvalé kontejnery se odchylují od typického životního cyklu kontejneru .NET.NET Aspire orchestrovaných aplikací. I když jsou vytvořené a spuštěny (pokud ještě nejsou k dispozici) orchestátorem .NET Aspire, nejsou odstraněny .NET Aspire.
To je užitečné, když chcete kontejner nechat spuštěný i po zastavení hostitele aplikace.
Důležitý
Pokud chcete tyto kontejnery odstranit, musíte je ručně zastavit pomocí modulu runtime kontejneru.
Pokud chcete definovat IResourceBuilder<ContainerResource>
s trvalou životností, zavolejte metodu WithLifetime a předejte ContainerLifetime.Persistent:
var builder = DistributedApplication.CreateBuilder(args);
var queue = builder.AddRabbitMQ("rabbit")
.WithLifetime(ContainerLifetime.Persistent);
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(queue)
.WaitFor(queue);
builder.Build().Run();
Řídicí panel zobrazuje trvalé kontejnery s ikonou připínáčku.
Jakmile se hostitel aplikace zastaví, kontejner se bude dál spouštět:
Mechanismus trvalosti kontejneru se pokusí zjistit, kdy je vhodné kontejner vytvořit znovu. Pokud se například prostředí pro kontejner změní, kontejner se restartuje, takže pokud se změnila vstupní konfigurace prostředku, nemusíte kontejner ručně zastavit.
Příkazy prostředků
Hostitel aplikace podporuje přidávání vlastních příkazů do prostředků. To je užitečné, když chcete přidat vlastní funkce, které hostitel aplikace nativně nepodporuje. Je pravděpodobné, že existuje mnoho příležitostí, kdy zveřejnění vlastních rozšiřujících metod u prostředků bude užitečné. .NET .NET Aspire Community Toolkit může být dobrým místem ke sdílení těchto rozšíření.
Když definujete vlastní příkaz, je k dispozici na řídicím panelu jako funkce uživatelského prostředí.
Důležitý
Tyto příkazy řídicího panelu .NET.NET Aspire jsou k dispozici pouze při místním spuštění řídicího panelu. Nejsou k dispozici při spuštění řídicího panelu v Azure Container Apps.
Další informace o vytváření vlastních příkazů prostředků najdete v tématu Postupy: Vytváření vlastních příkazů prostředků v .NET.NET Aspire.
Sítě kontejnerů
Hostitel aplikace teď přidá všechny kontejnery do společné sítě s názvem default-aspire-network
. To je užitečné, když chcete komunikovat mezi kontejnery, aniž byste procházeli přes síť hostitelů. To také usnadňuje migraci z docker compose na hostitele aplikace, protože kontejnery můžou vzájemně komunikovat pomocí názvu kontejneru.
Model událostí
Model událostí umožňuje vývojářům připojit se k životnímu cyklu aplikace a prostředků. To je užitečné pro spouštění vlastního kódu v konkrétních bodech životního cyklu aplikace. Existují různé způsoby odběru událostí, včetně globálních událostí a událostí vztažených k jednotlivým prostředkům.
Události z celého světa:
- BeforeStartEvent: Událost aktivovaná před spuštěním aplikace. Toto je poslední místo, kde se pozorují změny modelu aplikace. Spustí se v režimech Spustit i Publikovat. Jedná se o blokující událost, což znamená, že se aplikace nespustí, dokud se nedokončí všechny obslužné rutiny.
- AfterResourcesCreatedEvent: Událost aktivovaná po vytvoření prostředků. Běží pouze v režimu Run.
- AfterEndpointsAllocatedEvent: Událost aktivovaná po přidělení koncových bodů pro všechny prostředky. Běží pouze v režimu Run.
Globální události jsou podobné událostem životního cyklu hostitele aplikace. Další informace najdete v tématu Životní cykly hostitele aplikace.
události pro jednotlivé prostředky:
- BeforeResourceStartedEvent: Událost, která se aktivuje před zahájením jednoho zdroje. Běží pouze v režimu Run. Jedná se o blokující událost, což znamená, že se prostředek nespustí, dokud se všechny obslužné rutiny nedokončí.
- ConnectionStringAvailableEvent: Událost, která se aktivuje, když je pro prostředek k dispozici připojovací řetězec. Běží pouze v režimu Run.
- ResourceReadyEvent: Událost, která se aktivuje, když je prostředek připravený k použití. Běží pouze v režimu Run.
Další informace naleznete v části Eventing v .NET.NET Aspire.
Integrace
.NET .NET Aspire nadále přidávat integrace, které usnadňují zahájení práce s vašimi oblíbenými službami a nástroji. Další informace naleznete v přehledu integrací .NET.NET Aspire.
Redis Přehled
Podpora
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis")
.WithRedisInsight(); // Starts a Redis Insight container image
// that is pre-configured to work with the
// Redis instance.
Metodu rozšíření WithRedisInsight je možné použít u více Redis prostředků a každý z nich se zobrazí na řídicím panelu Redis Insight.
Další informace najdete v tématu Redis Insights .
OpenAI (Preview)
Od .NET Aspire 9 je k dispozici další integrace OpenAI, která umožňuje přímo používat nejnovější oficiální knihovnu OpenAI dotnet. Integrace klienta zaregistruje OpenAIClient jako singletonovou službu v kolekci služeb. Klient se dá použít k interakci s rozhraním API OpenAIREST.
Kromě toho už dostupná integrace .NET AspireAzureOpenAI byla vylepšena tak, aby poskytovala flexibilní způsob konfigurace OpenAIClient
pro službu Azure AI OpenAI nebo vyhrazené rozhraní API OpenAIREST s novou metodou tvůrce AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String). Následující příklad zjistí, jestli je připojovací řetězec pro službu AzureAzure AI OpenAI a zaregistruje nejvhodnější instanci OpenAIClient
automaticky.
builder.AddOpenAIClientFromConfiguration("openai");
Pokud například připojení openai
vypadalo jako Endpoint=https://{account}.azure.com;Key={key};
odhadlo by, že může kvůli názvu domény zaregistrovat klienta AzureAzure AI OpenAI. Jinak by se použila běžná OpenAIClient
.
Pro více podrobností si přečtěte Azure- neutrální řešení klienta.
MongoDB
Přidání podpory pro zadání MongoDB uživatelského jména a hesla při použití metody rozšíření AddMongoDB(IDistributedApplicationBuilder, String, Nullable<Int32>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>). Pokud nezadáte, vygeneruje se náhodné uživatelské jméno a heslo, ale můžete ho zadat ručně pomocí prostředků parametrů.
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("mongousername");
var password = builder.AddParameter("mongopassword", secret: true);
var db = builder.AddMongo("db", username, password);
Důležitá vylepšení Azure
Následující části popisují vylepšení Azure, která byla přidána v .NET Aspire 9. Úplný seznam všech převratných změn naleznete v části Převratné změny v .NET.NET Aspire 9.
Azure přizpůsobení prostředků
V .NET Aspire 8 bylo přizpůsobení Azure prostředků označeno jako experimentální, protože podkladové knihovny Azure.Provisioning
byly nové a potřebovaly shromáždit zpětnou vazbu, než mohly být označeny jako stabilní. V .NET.NET Aspire 9 byla tato rozhraní API aktualizována a odstranil se experimentální atribut.
Azure Změna názvů prostředků způsobující nekompatibilitu
V rámci aktualizace knihoven Azure.Provisioning se aktualizovalo výchozí schéma pojmenování pro Azure prostředky s lepší podporou různých zásad pojmenování. Tato aktualizace ale způsobila změnu způsobu pojmenování prostředků. Nová zásada pojmenování může vést k opuštění stávajících Azure prostředků a vytvoření nových prostředků Azure po aktualizaci .NET Aspire aplikace z 8 na 9. Pokud chcete dál používat stejné zásady pojmenování z .NET.NET Aspire 8, můžete do Program.csAppHost přidat následující kód:
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Azure SQL, PostgreSQLa Redis Aktualizace
Azure SQL, PostgreSQLa Redis zdroje se liší od jiných Azure zdrojů, protože pro tyto technologie existují místní zdroje kontejneru. V .NET Aspire 8 vytvořte tyto Azure prostředky, které jste potřebovali začít s místním prostředkem kontejneru, a pak buď jako, nebo publikovat jako do prostředku Azure. Tento návrh zavedl problémy a nevešel se do jiných rozhraní API.
Tento kód můžete mít například v .NET.NET Aspire 8:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddSqlServer("sql")
.PublishAsAzureSqlDatabase();
var pgsql = builder.AddPostgres("pgsql")
.PublishAsAzurePostgresFlexibleServer();
var cache = builder.AddRedis("cache")
.PublishAsAzureSqlDatabase();
V .NET.NET Aspire 9 byla tato rozhraní API označena jako zastaralá a implementoval se nový vzor rozhraní API:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddAzureSqlServer("sql")
.RunAsContainer();
var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
.RunAsContainer();
var cache = builder.AddAzureRedis("cache")
.RunAsContainer();
ID Microsoft Entra ve výchozím nastavení
Aplikace .NET Aspire byly pro zvýšení bezpečnosti aktualizovány ve výchozím nastavení tak, aby databáze Azure pro prostředky PostgreSQL a Azure Cache for Redis standardně používaly Microsoft Entra ID. To vyžaduje změny aplikací, které se k těmto prostředkům potřebují připojit. Informace o aktualizaci aplikací pro připojení k těmto prostředkům pomocí ID Microsoft Entra najdete v následujících tématech:
Následující příklady ukazují, jak nakonfigurovat aplikaci tak, aby se připojila k prostředkům Azure pomocí MICROSOFT Entra ID:
Pokud potřebujete použít ověřování pomocí hesla nebo přístupového klíče (nedoporučuje se), můžete se přihlásit pomocí následujícího kódu:
var builder = DistributedApplication.CreateBuilder(args);
var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
.WithPasswordAuthentication();
var cache = builder.AddAzureRedis("cache")
.WithAccessKeyAuthentication();
Podpora pro Azure Functions (Preview)
Podpora pro Azure funkce je jednou z nejčastěji žádaných vlastností na sledovači problémů .NET.NET Aspire a jsme nadšeni, že v této verzi zavádíme podporu ve fázi náhledu. K předvedení této podpory použijeme .NET.NET Aspire k vytvoření a nasazení webhooku.
Začněte vytvořením nového projektu Azure Functions pomocí dialogového okna Visual Studio Nový projekt. Po zobrazení výzvy zaškrtněte políčko Zařazení do Aspire orchestrace při vytváření projektu.
V projektu hostitele aplikace si všimněte, že k novému PackageReference
📦existuje Aspire . Hostování.Azure. Balíček NuGet functions:
<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" Version="9.0.0" />
<PackageReference Include="Aspire.Hosting.Azure.Functions" Version="9.0.0" />
</ItemGroup>
Tento balíček poskytuje rozhraní API AddAzureFunctionsProject<TProject>(IDistributedApplicationBuilder, String), které lze vyvolat v hostiteli aplikace a nakonfigurovat projekty Azure Functions v rámci .NET Aspire hostitele:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp");
builder.Build().Run();
V tomto příkladu je webhook zodpovědný za překlad vstupního řetězce do Pig Latin. Aktualizujte obsah našeho triggeru následujícím kódem:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using System.Text;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;
namespace PigLatinApp;
public class Function1(ILogger<Function1> logger)
{
public record InputText(string Value);
public record PigLatinText(string Value);
[Function("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[FromBody] InputText inputText)
{
logger.LogInformation("C# HTTP trigger function processed a request.");
var result = TranslateToPigLatin(inputText.Value);
return new OkObjectResult(new PigLatinText(result));
}
private static string TranslateToPigLatin(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
var words = input.Split(' ');
StringBuilder pigLatin = new();
foreach (string word in words)
{
if (IsVowel(word[0]))
{
pigLatin.Append(word + "yay ");
}
else
{
int vowelIndex = FindFirstVowelIndex(word);
if (vowelIndex is -1)
{
pigLatin.Append(word + "ay ");
}
else
{
pigLatin.Append(
word.Substring(vowelIndex) + word.Substring(0, vowelIndex) + "ay ");
}
}
}
return pigLatin.ToString().Trim();
}
private static int FindFirstVowelIndex(string word)
{
for (var i = 0; i < word.Length; i++)
{
if (IsVowel(word[i]))
{
return i;
}
}
return -1;
}
private static bool IsVowel(char c) =>
char.ToLower(c) is 'a' or 'e' or 'i' or 'o' or 'u';
}
Nastavte zarážku na první logger.LogInformation
řádek metody Run
a stisknutím klávesy F5 spusťte host Functions. Po spuštění řídicího panelu .NET.NET Aspire uvidíte následující:
.NET .NET Aspire má:
- Nakonfigurovali jsme emulovaný úložný prostředek Azure, který má hostitel používat k vedení záznamů.
- Spuštění hostitele Služby Functions místně s cílem jako zaregistrovaný projekt Functions.
- Propojil port definovaný v projektu funkcí launchSettings.json k naslouchání.
Pomocí oblíbeného klienta HTTP můžete odeslat požadavek do triggeru a sledovat vstupy vázané z textu požadavku v ladicím programu.
curl --request POST \
--url http://localhost:7282/api/Function1 \
--header 'Content-Type: application/json' \
--data '{
"value": "Welcome to Azure Functions"
}'
Teď jste připraveni nasadit naši aplikaci do Azure Container Apps (ACA). Nasazení v současné době závisí na buildech preview balíčků Azure Functions Worker a Worker SDK. V případě potřeby upgradujte verze odkazované v projektu Functions:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.0.0-preview2" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.0-preview2" />
</ItemGroup>
Musíte také zveřejnit veřejný koncový bod pro náš projekt Azure Functions, aby se žádosti mohly odesílat do triggeru HTTP:
builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp")
.WithExternalHttpEndpoints();
Chcete-li nasadit aplikaci s azd
rozhraním příkazového řádku, musíte nejdřív získat nejnovější verzi. Pokud chcete nainstalovat nejnovější verzi, zobrazí se upozornění, pokud vaše verze není aktuální. Postupujte podle pokynů a aktualizujte na nejnovější verzi.
Po instalaci přejděte do složky obsahující projekt hostitele aplikace a spusťte azd init
:
$ azd init
Initializing an app to run on Azure (azd init)
? How do you want to initialize your app? Use code in the current directory
(✓) Done: Scanning app code in current directory
Detected services:
.NET (Aspire)
Detected in: ./PigLatinApp/PigLatinApp.AppHost/PigLatinApp.AppHost.csproj
azd will generate the files necessary to host your app on Azure using Azure Container Apps.
? Select an option Confirm and continue initializing my app
? Enter a new environment name: azfunc-piglatin
Generating files to run your app on Azure:
(✓) Done: Generating ./azure.yaml
(✓) Done: Generating ./next-steps.md
SUCCESS: Your app is ready for the cloud!
Potom aplikaci nasaďte spuštěním azd up
:
$ azd up
? Select an Azure Subscription to use: 130. [redacted]
? Select an Azure location to use: 50. (US) West US 2 (westus2)
Packaging services (azd package)
Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.
Subscription: [redacted]
Location: West US 2
You can view detailed progress in the Azure Portal:
[redacted]
(✓) Done: Resource group: rg-azfunc-piglatin (967ms)
(✓) Done: Container Registry: [redacted] (13.316s)
(✓) Done: Log Analytics workspace: [redacted] (16.467s)
(✓) Done: Container Apps Environment: [redacted] (1m35.531s)
(✓) Done: Storage account: [redacted] (21.37s)
Deploying services (azd deploy)
(✓) Done: Deploying service piglatinapp
- Endpoint: {{endpoint-url}}
Aspire Dashboard: {{dashboard-url}}
Nakonec otestujte nasazenou aplikaci Functions pomocí oblíbeného klienta HTTP:
curl --request POST \
--url {{endpoint-url}}/api/Function1 \
--header 'Content-Type: application/json' \
--data '{
"value": "Welcome to Azure Functions"
}'
Podpora Azure Functions v .NET Aspire je stále ve verzi Preview s podporou omezené sady triggerů, mezi které patří:
- HTTP spouštěče
- Azure Triggery front úložiště
- Azure spouštěče úložiště objectů blob
- Azure Service Bus spouští
- Azure Event Hubs spouští
Pro podrobnější informace navštivte oficiální integraci funkcí .NET AspireAzure (Preview).
Přizpůsobení Azure Container Apps
Jednou z nejžádanějších funkcí je možnost přizpůsobit Azure Container Apps, který vytváří hostitel aplikace, aniž bychom zasahovali do Bicep. To je možné pomocí rozhraní API PublishAsAzureContainerApp<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure,ContainerApp>) a PublishAsAzureContainerApp<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure,ContainerApp>) v oboru názvů Aspire.Hosting.Azure.AppContainers
. Tyto metody přizpůsobí definici Azure kontejnerové aplikace, kterou hostitel aplikace vytvoří.
Přidejte odkaz na balíček do souboru projektu:
<ItemGroup>
<PackageReference Include="Aspire.Hosting.Azure.AppContainers"
Version="9.0.0" />
</ItemGroup>
Následující příklad ukazuje, jak škálovat repliky Azure Container App na nulu (0
):
var builder = DistributedApplication.CreateBuilder(args);
var db = builder.AddAzurePostgresFlexibleServer("pg")
.RunAsContainer()
.AddDatabase("db");
// Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
#pragma warning disable AZPROVISION001
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(db)
.PublishAsAzureContainerApp((module, containerApp) =>
{
// Scale to 0
containerApp.Template.Value!.Scale.Value!.MinReplicas = 0;
});
#pragma warning restore AZPROVISION001
builder.Build().Run();
Předchozí příklad kódu odkládá generování definice Azure Container App na hostitele aplikace. To vám umožní přizpůsobit definici aplikace kontejneru Azure, aniž byste museli spouštět azd infra synth
a nebezpečně upravovat vygenerované soubory bicep.