Přizpůsobení připojovací řetězec pomocí manifestů Aspire pro .NET

Dokončeno

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ýkonu webfrontend 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}"
}

Diagram znázorňující, jak závislosti v projektu .NET Aspire generují odkazy v souboru manifestu.

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:

Diagram znázorňující, jak se zástupné symboly vytvářejí v souboru manifestu .NET Aspire

Další informace