Sdílet prostřednictvím


Aspire Přehled publikování a nasazení

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 compose plus 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í.

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í.

Viz také