Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aspire odděluje vytváření prostředků nasazení od provádění nasazení. Rozhraní Aspire příkazového řádku (aspire) poskytuje dvě základní rozhraní:
-
aspire publish: Generuje zprostředkující a parametrizované prostředky pro jednu nebo více integrací hostování, které implementují sémantiku publikování. -
aspire deploy: Spustí nasazení (když integrace implementuje sémantiku nasazení) tím, že dořeší parametry a použije změny v cílovém prostředí.
Tyto příkazy poskytují přímý přístup k možnostem publikování a nasazení. Skutečné chování (co se vygeneruje, jak probíhá nasazení) pochází z integrace hostingu, na které odkazujete (například: Docker, Kubernetes, Azure). Systém je rozšiřitelný – můžete vytvořit vlastní integrace publikování nebo nasazení, které se připojují ke stejnému modelu.
Příkaz aspire publish vytvoří artefakty nasazení, které obsahují nevyřešené parametry (zástupné symboly). Příkaz aspire deploy používá tyto artefakty, rozluší parametry, pokud to cílová integrace podporuje, a pak spustí nasazení. Některé integrace příkaz nepodporují deploy .
Aspire Příkazy CLI (koncepční chování)
| Command | Jak funguje | Výstupy | Stav parametru | Vyžaduje schopnost integrace. |
|---|---|---|---|---|
aspire publish |
Transformuje aplikační model na prostředky specifické pro integraci (Vytváření souborů, manifestů, specifikací atd.). | Přechodné artefakty (ne přímo produkční- konečné). | Nevyřešené (zástupné symboly, např. ${VAR} podobné). |
Podpora publikování |
aspire deploy |
Spustí nasazení pomocí jedné nebo více integrací (sestavení, rozlišení parametrů, použití). | Skutečné prostředky / použité změny. | Vyřešený. | Nasazení podpory |
Pokud integrace neimplementuje funkci nasazení, aspire deploy nebude ten cíl nasazen (může upozornit nebo neudělá nic).
Když spustíte aspire publish bez jakýchkoli integrací, které podporují publikování, uvidíte:
Step 1: Analyzing model.
✗ FAILED: Analyzing the distributed application model for publishing and deployment capabilities. 00:00:00
No resources in the distributed application model support publishing.
❌ FAILED: Analyzing model. completed with errors
Podobně když spustíte aspire deploy bez jakýchkoli integrací podporujících nasazení, zobrazí se tato chyba:
Step 1: Analyzing model.
✗ FAILED: Analyzing the distributed application model for publishing and deployment capabilities. 00:00:00
No resources in the distributed application model support deployment.
❌ FAILED: Analyzing model. completed with errors
Tyto zprávy označují, že potřebujete do projektu AppHost přidat integrace hostování. Integrace hostování jsou balíčky NuGet (například Aspire.Hosting.Docker, Aspire.Hosting.Kubernetesnebo Aspire.Hosting.Azure), které poskytují možnosti publikování a nasazení pro konkrétní cílové platformy.
Zástupné symboly parametrů
Publikované materiály záměrně obsahují místo konkrétních hodnot zástupné hodnoty. U Docker výstupu publikování založeného na compose se parametrizace zobrazuje jako odkazy na standardní proměnné prostředí. Publikační artefakt může například zahrnovat:
services:
pg:
image: "docker.io/library/postgres:17.6"
environment:
POSTGRES_HOST_AUTH_METHOD: "scram-sha-256"
POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256 --auth-local=scram-sha-256"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "${PG_PASSWORD}"
ports:
- "8000:5432"
networks:
- "aspire"
dbsetup:
image: "${DBSETUP_IMAGE}"
environment:
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"
HTTP_PORTS: "8001"
ConnectionStrings__db: "Host=pg;Port=5432;Username=postgres;Password=${PG_PASSWORD};Database=db"
ports:
- "8002:8001"
- "8004:8003"
depends_on:
pg:
condition: "service_started"
networks:
- "aspire"
Klíčové body:
-
${PG_PASSWORD}a${DBSETUP_IMAGE}(a podobné) jsou zástupné symboly v publikovaném souboru. - Nejsou vyřešeny během
aspire publish. - Modul nasazení (což může zahrnovat
aspire deploy,docker composeplus skript exportující proměnné, injektáž proměnných CI/CD atd.) poskytne jejich hodnoty později. - Tím se tajné kódy a hodnoty specifické pro prostředí oddělují od vygenerované struktury.
Různé integrace můžou používat různé zástupné symboly (proměnné prostředí, tokeny nebo metadata parametrů), ale princip zůstává: publikování zachovává tvar, nasazení vkládá hodnoty.
Model vydavatele a výpočetní prostředí
Aspire používá flexibilní model vydavatele, který distribuuje chování publikování napříč grafem aplikace. Prostředky podporují publikování a nasazení prostřednictvím poznámek:
Tento návrh umožňuje hybridní a heterogenní nasazení, kde se různé služby v rámci stejné aplikace dají nasadit do různých cílů (cloud, hraniční, místní).
Výpočetní prostředí
Výpočetní prostředí je základní koncept nasazení, který Aspire představuje cílovou platformu, ve které se nasadí prostředky vaší aplikace. Výpočetní prostředí definují způsob transformace prostředků a vygenerování artefaktů nasazení. Příklady předdefinovaných výpočetních prostředí zahrnují Azure Container Apps prostředí a Docker prostředí Compose.
Výpočetní prostředky jsou spustitelné části vaší aplikace, jako .NET jsou projekty, kontejnery a spustitelné soubory, které je potřeba nasadit do výpočetního prostředí.
Když přidáte výpočetní prostředí, jako je Docker Compose nebo Kubernetes, Aspire použije správné chování publikování u všech kompatibilních výpočetních prostředků v modelu aplikace – nevyžaduje se žádná další konfigurace.
Několik prostředí vyžaduje nejednoznačnost
Pokud přidáte více výpočetních prostředí, potřebujete vědět, Aspire kam prostředek patří. Výpočetní prostředí aplikují transformace na všechny použitelné výpočetní prostředky (projekty, kontejnery, spustitelné soubory). Pokud více než jedno prostředí odpovídá danému prostředku, Aspire vyvolá nejednoznačnou chybovou výjimku prostředí v době publikování.
Můžete to vyřešit pomocí:WithComputeEnvironment
var k8s = builder.AddKubernetesEnvironment("k8s-env");
var compose = builder.AddDockerComposeEnvironment("docker-env");
builder.AddProject<Projects.Frontend>("frontend")
.WithComputeEnvironment(k8s);
builder.AddProject<Projects.Backend>("backend")
.WithComputeEnvironment(compose);
Tento příklad ukazuje, jak byste mohli explicitně mapovat služby na různá výpočetní prostředí. Například front-end v Kubernetes a back-end v Docker Compose.
Matice podpory integrace hostování
| Integrační balíček | Target | Publikovat | Deploy | Poznámky |
|---|---|---|---|---|
| Aspire. Hostování.Docker | Docker / Docker Skládat | ✅ Ano | ❌ Ne | Použijte vygenerovaný Compose s vlastními skripty nebo nástroji. |
| Aspire. Hostování.Kubernetes | Kubernetes | ✅ Ano | ❌ Ne | Použijte je pomocí kubectl, GitOps nebo jiných kontrolerů. |
| Aspire. Hostování.Azure AppContainers | Azure Container Apps | ✅ Ano | ✅ Ano (Preview) | Funkce nasazení je ve verzi Preview a může se změnit. |
| Aspire. Hostování.Azure AppService | Azure App Service | ✅ Ano | ✅ Ano (Preview) | Funkce nasazení je ve verzi Preview a může se změnit. |
Návod
Podpora nasazení je specifická pro integraci. Absence podpory pro nasazení znamená to, že používáte publikované artefakty s externími softwarovými nástroji.
Typické pracovní postupy
1. Generování artefaktů (jakákoli integrace)
aspire publish -o artifacts/
Zkontrolujte obsah artefaktů/ (například Docker soubory Compose, Kubernetes manifesty, Azure specifikační dokumenty atd.).
2. Místní spuštění (Docker příklad)
# Provide or export required environment variables, then:
docker compose -f artifacts/docker-compose.yml up --build
Chybějící proměnné, jako je PG_PASSWORD, musí být nastavené v shellu, v souboru .env nebo vložené vámi zvoleným spouštěčem.
3. Použití aspire deploy
Pokud integrace podporuje nasazení, můžete spustit:
aspire deploy
Tím se vyřeší parametry a provedou změny v nasazení pro integrace, které nasazení podporují.
Extensibility
Tyto příkazy aspire publish a aspire deploy podporují rozšiřitelné pracovní postupy prostřednictvím komentářů, které můžete přidat do prostředků. Tato funkce je ve verzi Preview a může se změnit v budoucích verzích.
Vlastní publikování a zpětná volání nasazení
Prostředky podporují vlastní publikování a chování nasazení prostřednictvím anotací.
-
PublishingCallbackAnnotation: Spustí vlastní logiku během
aspire publishoperací. -
DeployingCallbackAnnotation: Spustí vlastní logiku během
aspire deployoperací.
Následující příklad ukazuje použití DeployingCallbackAnnotation k registraci vlastního chování nasazení:
#pragma warning disable ASPIREPUBLISHERS001
#pragma warning disable ASPIREINTERACTION001
using Aspire.Hosting.Publishing;
using Microsoft.Extensions.DependencyInjection;
var builder = DistributedApplication.CreateBuilder(args);
// Custom deployment step defined below
builder.AddDataSeedJob("SeedInitialData", seedDataPath: "data/seeds");
builder.Build().Run();
internal class DataSeedJobResource([ResourceName] string name, string seedDataPath)
: Resource(name)
{
public string SeedDataPath { get; } = seedDataPath;
}
internal static class DataSeedJobResourceBuilderExtensions
{
public static IResourceBuilder<DataSeedJobResource> AddDataSeedJob(
this IDistributedApplicationBuilder builder,
string name,
string seedDataPath = "data/seeds")
{
var job = new DataSeedJobResource(name, seedDataPath);
var resourceBuilder = builder.AddResource(job);
// Attach a DeployingCallbackAnnotation that will be invoked on `aspire deploy`
job.Annotations.Add(new DeployingCallbackAnnotation(async ctx =>
{
CancellationToken ct = ctx.CancellationToken;
// Prompt the user for a confirmation using the interaction service
var interactionService = ctx.Services.GetRequiredService<IInteractionService>();
var envResult = await interactionService.PromptInputAsync(
"Environment Configuration",
"Please enter the target environment name:",
new InteractionInput
{
Label = "Environment Name",
InputType = InputType.Text,
Required = true,
Placeholder = "dev, staging, prod"
},
cancellationToken: ct);
// Custom deployment logic here
var reporter = ctx.ActivityReporter;
await using (var deployStep = await reporter.CreateStepAsync(
$"Deploying data seed job to {envResult.Value}", ct))
{
// Simulate deployment work
await Task.Delay(2000, ct);
await deployStep.SucceedAsync("Data seed job deployed successfully", ct);
}
}));
return resourceBuilder;
}
}
Tato vlastní logika nasazení se bezproblémově integruje s příkazem aspire deploy a poskytuje interaktivní výzvy a hlášení o průběhu. Další informace naleznete v tématu Poznámky k prostředkům v Aspire.
Diagnostika a auditování
Publikování poskytuje neměnný snímek zamýšlené struktury před objevením tajemství. Můžete:
- Rozdíl publikovaných výstupů mezi potvrzeními
- Vyhledejte nepovolené obrázky nebo konfiguraci.
- Zachovat záznam pro dodržování předpisů a pak samostatně zaznamenat vyřešenou sadu použitou v době nasazení.
Další nástroje
Azure Developer CLI (azd)
Azure Developer CLI (azd) má prvotřídní podporu pro nasazování Aspire projektů. Může zřizovat infrastrukturu, spravovat prostředí a koordinovat injektáž tajných kódů a hodnot. Artefakty publikování můžete začlenit Aspire do azd pracovních postupů nebo přímo použít Azure integraci (Preview).
Manifest nasazení
Počínaje verzí 9.2 se formát manifestu postupně ukončuje ve prospěch podpory příkazů publikování a nasazení v rozhraní příkazového řádku (CLI) a API pro definování funkcionalit publikování a nasazení. Dřívější pracovní postupy zdůraznily jeden "manifest nasazení" vygenerovaný ze speciálních AppHost cílů. Moderní přístup se zaměřuje na integraci a její rozšiřitelnost aspire publish. Starší formát manifestu se dále nevyvíjí, ale můžete ho přesto vygenerovat pro kontrolu nebo ladění:
aspire publish --publisher manifest -o diagnostics/
Toto:
- Vytvoří snímek manifestu, který je užitečný pro pochopení grafů zdrojových prostředků nebo pro řešení potíží.
- Nemělo by být považováno za primární kontrakt nasazení.
- Poskytuje se výhradně kvůli zpětné kompatibilitě a viditelnosti ladění.
Klíčové poznatky
Publikování je první, po kterém následuje nasazení, které odděluje strukturu od hodnot. Artefakty vytvořené během publikování jsou parametrizovány s vyřešením, ke kterému dochází později v procesu. Konkrétní integrace určují skutečné chování publikování a nasazení a systém je navržený tak, aby byl rozšiřitelný a umožňuje vytvářet vlastní integrace, které cílí na nové platformy nebo interní nástroje. I když se starší verze manifestu stále dá vygenerovat, zůstane statická a už se nevyvíjí.