.NET .NET Aspire format manifestu dla konstruktorów narzędzi wdrażania
W tym artykule przedstawiono format manifestu .NET.NET Aspire. Ten artykuł służy jako przewodnik referencyjny dla konstruktorów narzędzi wdrażania, ułatwiając tworzenie narzędzi do wdrażania projektów .NET.NET Aspire na określonych platformach hostingu, lokalnych lub w chmurze.
.NET .NET Aspire upraszcza lokalne środowisko programistyczne, pomagając zarządzać współzależnościami między integracjami aplikacji. Aby uprościć wdrażanie aplikacji, .NET Aspire projekty mogą wygenerować manifest wszystkich zasobów zdefiniowanych jako plik JSON sformatowany.
Generowanie manifestu
Do wygenerowania manifestu jest wymagany prawidłowy projekt .NET.NET Aspire. Aby rozpocząć, utwórz projekt .NET.NET Aspire przy użyciu szablonu aspire-starter
.NET:
dotnet new aspire-starter --use-redis-cache `
-o AspireApp && `
cd AspireApp
Generowanie manifestu jest osiągane przez uruchomienie dotnet build
ze specjalnym celem:
dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Napiwek
--output-path
obsługuje ścieżki względne. Poprzednie polecenie używa ../aspire-manifest.json
do umieszczania pliku manifestu w katalogu głównym katalogu projektu.
Aby uzyskać więcej informacji, zobacz dotnet run. Poprzednie polecenie generuje następujące dane wyjściowe:
Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: .\AspireApp.AppHost\aspire-manifest.json
Wygenerowany plik jest manifestem .NET.NET Aspire i jest używany przez narzędzia do obsługi wdrażania w docelowych środowiskach w chmurze.
Nuta
Manifest można również wygenerować w ramach profilu uruchamiania. Rozważ następujące launchSettings.json:
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"generate-manifest": {
"commandName": "Project",
"launchBrowser": false,
"dotnetRunMessages": true,
"commandLineArgs": "--publisher manifest --output-path aspire-manifest.json"
}
}
}
Podstawowy format manifestu
Opublikowanie manifestu z domyślnego szablonu początkowego dla .NET Aspire generuje następujące dane wyjściowe JSON:
{
"resources": {
"cache": {
"type": "container.v0",
"connectionString": "{cache.bindings.tcp.host}:{cache.bindings.tcp.port}",
"image": "redis:7.2.4",
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 6379
}
}
},
"apiservice": {
"type": "project.v0",
"path": "../AspireApp.ApiService/AspireApp.ApiService.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http"
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http"
}
}
},
"webfrontend": {
"type": "project.v0",
"path": "../AspireApp.Web/AspireApp.Web.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"ConnectionStrings__cache": "{cache.connectionString}",
"services__apiservice__0": "{apiservice.bindings.http.url}",
"services__apiservice__1": "{apiservice.bindings.https.url}"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http"
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http"
}
}
}
}
}
Format manifestu JSON składa się z pojedynczego obiektu o nazwie resources
, który zawiera właściwość dla każdego zasobu określonego w Program.cs (argument name
dla każdej nazwy jest używany jako właściwość dla każdego obiektu zasobu podrzędnego w JSON).
Odwołania do parametrów połączenia i powiązań
W poprzednim przykładzie istnieją dwa zasoby projektu i jeden Redis zasób pamięci podręcznej.
Ta zależność jest znana, ponieważ zmienne środowiskowe webfrontend zawierają symbole zastępcze odwołujące się do dwóch innych zasobów:
"env": {
// ... other environment variables omitted for clarity
"ConnectionStrings__cache": "{cache.connectionString}",
"services__apiservice__0": "{apiservice.bindings.http.url}",
"services__apiservice__1": "{apiservice.bindings.https.url}"
},
Zasób apiservice
jest przywołyny przez webfrontend
przy użyciu wywołania WithReference(apiservice)
w pliku Program.cs hosta aplikacji i redis
jest przywołyny przy użyciu wywołania WithReference(cache)
:
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
var apiService = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
builder.AddProject<Projects.AspireApp_Web>("webfrontend")
.WithReference(cache)
.WithReference(apiService);
builder.Build().Run();
Odwołania między typami zasobów projektu powodują odnajdywanie usługi zmiennych wstrzykiwanych do projektu odwołującego się. Odwołania do dobrze znanych typów odwołań, takich jak Redis powodują wstrzyknięcie parametrów połączenia.
Aby uzyskać więcej informacji na temat sposobu działania zasobów w modelu aplikacji i odwołań między nimi, zobacz .NET.NET Aspire omówienie aranżacji.
Struktura ciągów zastępczych
Ciągi zastępcze odwołują się do struktury manifestu .NET.NET Aspire:
Ostatni segment ciągu zastępczego (url
w tym przypadku) jest generowany przez narzędzie przetwarzające manifest. Istnieje kilka sufiksów, których można użyć w ciągu zastępczym:
-
connectionString
: w przypadku dobrze znanych typów zasobów, takich jak Redis. Narzędzia wdrażania tłumaczą zasób w najbardziej odpowiedniej infrastrukturze dla docelowego środowiska chmury, a następnie tworzą .NET.NET Aspire zgodne parametry połączenia dla używanej aplikacji. W przypadkucontainer.v0
zasobów poleconnectionString
może być obecne i określone jawnie. Ma to na celu obsługę scenariuszy, w których typ zasobu kontenera jest przywołyyny przy użyciu rozszerzenia WithReference, ale należy go jawnie hostować jako kontener. -
url
: w przypadku odwołań do usługi, w których wymagany jest dobrze sformułowany adres URL. Narzędzie wdrażania tworzyurl
na podstawie schematu, protokołu i transportu zdefiniowanego w manifeście oraz podstawowej topologii obliczeniowej/sieciowej, która została wdrożona. -
host
: segment hosta adresu URL. -
port
: segment portu adresu URL.
Typy zasobów
Każdy zasób ma pole type
. Gdy narzędzie wdrażania odczytuje manifest, powinien odczytać typ, aby sprawdzić, czy może poprawnie przetworzyć manifest. W okresie .NET.NET Aspire wersji zapoznawczej wszystkie typy zasobów mają sufiks v0
wskazujący, że mogą ulec zmianie. W miarę .NET.NET Aspire zbliżania się wydania sufiksu v1
będzie używany do oznaczania, że struktura manifestu dla tego typu zasobu powinna być uważana za stabilną (kolejne aktualizacje odpowiednio zwiększą numer wersji).
Typowe pola zasobów
Pole type
jest jedynym polem, które jest wspólne dla wszystkich typów zasobów, jednak project.v0
, container.v0
i executable.v0
typów zasobów współużytkuje również pola env
i bindings
.
Nuta
Typ zasobu executable.v0
nie jest w pełni zaimplementowany w manifeście ze względu na brak narzędzia w scenariuszach wdrażania. Aby uzyskać więcej informacji na temat konteneryzowania plików wykonywalnych, zobacz Dockerfile typy zasobów.
Typ pola env
to podstawowe mapowanie klucza/wartości, w którym wartości mogą zawierać ciągi zastępcze.
Powiązania są określane w polu bindings
z każdym powiązaniem zawartym we własnym polu w obiekcie bindings
JSON. Pola pominięte przez manifest .NET.NET Aspire w węźle bindings
obejmują:
-
scheme
: Jedną z następujących wartościtcp
,udp
,http
lubhttps
. -
protocol
: Jedną z następujących wartościtcp
lubudp
-
transport
: takie same jakscheme
, ale używane do uściślania międzyhttp
ahttp2
. -
containerPort
: opcjonalnie, jeśli pominięto wartości domyślne portu 80.
Pole inputs
Niektóre zasoby generują pole inputs
. To pole służy do określania parametrów wejściowych zasobu. Pole inputs
jest obiektem JSON, w którym każda właściwość jest parametrem wejściowym używanym w rozpoznawaniu struktury symboli zastępczych. Zasoby, które mają connectionString
, mogą na przykład użyć pola inputs
, aby określić password
parametrów połączenia:
"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"
Symbol zastępczy parametrów połączenia odwołuje się do parametru wejściowego password
z pola inputs
:
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
Powyższy fragment kodu JSON przedstawia pole inputs
dla zasobu, który ma pole connectionString
. Parametr wejściowy password
jest typem ciągu i jest oznaczony jako wpis tajny. Pole default
służy do określania wartości domyślnej parametru wejściowego. W tym przypadku wartość domyślna jest generowana przy użyciu pola generate
z losowym ciągiem o minimalnej długości.
Zasoby wbudowane
Poniższa tabela zawiera listę typów zasobów, które są jawnie generowane przez .NET Aspire i rozszerzenia opracowane przez zespół .NET Aspire:
Niezależne od chmury typy zasobów
Te zasoby są dostępne w 📦Aspire. Hosting pakiet NuGet.
Użycie modelu aplikacji | Typ zasobu manifestu | Łącze nagłówka |
---|---|---|
AddContainer | container.v0 |
typ zasobu kontenera |
PublishAsDockerFile |
dockerfile.v0 |
Dockerfile typów zasobów |
AddDatabase | value.v0 |
MongoDB Server typów zasobów |
AddMongoDB | container.v0 |
MongoDB typów zasobów |
AddDatabase | value.v0 |
MySQL Server typów zasobów |
AddMySql | container.v0 |
MySQL typów zasobów |
AddDatabase | value.v0 |
Postgres typów zasobów |
AddPostgres | container.v0 |
Postgres typów zasobów |
AddProject | project.v0 |
typ zasobu projektu |
AddRabbitMQ | container.v0 |
RabbitMQ typów zasobów |
AddRedis | container.v0 |
Redis typ zasobu |
AddDatabase | value.v0 |
SQL Server typów zasobów |
AddSqlServer | container.v0 |
SQL Server typów zasobów |
Typ zasobu projektu
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
Przykładowy manifest:
"apiservice": {
"type": "project.v0",
"path": "../AspireApp.ApiService/AspireApp.ApiService.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http"
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http"
}
}
}
Typ zasobu kontenera
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("mycontainer", "myimage")
.WithEnvironment("LOG_LEVEL", "WARN")
.WithHttpEndpoint(3000);
Przykładowy manifest:
{
"resources": {
"mycontainer": {
"type": "container.v0",
"image": "myimage:latest",
"env": {
"LOG_LEVEL": "WARN"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 3000
}
}
}
}
}
typy zasobów Dockerfile
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
.WithHttpEndpoint(hostPort: 5031, env: "PORT")
.PublishAsDockerFile();
Napiwek
Wywołanie PublishAsDockerFile
jest wymagane do wygenerowania typu zasobu Dockerfile w manifeście, a ta metoda rozszerzenia jest dostępna tylko w typie ExecutableResource.
Przykładowy manifest:
{
"resources": {
"nodeapp": {
"type": "dockerfile.v0",
"path": "../nodeapp/Dockerfile",
"context": "../nodeapp",
"env": {
"NODE_ENV": "development",
"PORT": "{nodeapp.bindings.http.port}"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 5031
}
}
}
}
}
typy zasobów Postgres
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres1")
.AddDatabase("shipping");
Przykładowy manifest:
{
"resources": {
"postgres1": {
"type": "container.v0",
"connectionString": "Host={postgres1.bindings.tcp.host};Port={postgres1.bindings.tcp.port};Username=postgres;Password={postgres1.inputs.password}",
"image": "postgres:16.2",
"env": {
"POSTGRES_HOST_AUTH_METHOD": "scram-sha-256",
"POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256",
"POSTGRES_PASSWORD": "{postgres1.inputs.password}"
},
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 5432
}
},
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
},
"shipping": {
"type": "value.v0",
"connectionString": "{postgres1.connectionString};Database=shipping"
}
}
}
typy zasobów RabbitMQ
RabbitMQ jest modelowana jako zasób kontenera container.v0
. W poniższym przykładzie pokazano, jak są one dodawane do modelu aplikacji.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRabbitMQ("rabbitmq1");
Poprzedni kod tworzy następujący manifest:
{
"resources": {
"rabbitmq1": {
"type": "container.v0",
"connectionString": "amqp://guest:{rabbitmq1.inputs.password}@{rabbitmq1.bindings.tcp.host}:{rabbitmq1.bindings.tcp.port}",
"image": "rabbitmq:3",
"env": {
"RABBITMQ_DEFAULT_USER": "guest",
"RABBITMQ_DEFAULT_PASS": "{rabbitmq1.inputs.password}"
},
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 5672
}
},
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
}
}
}
typ zasobu Redis
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis1");
Przykładowy manifest:
{
"resources": {
"redis1": {
"type": "container.v0",
"connectionString": "{redis1.bindings.tcp.host}:{redis1.bindings.tcp.port}",
"image": "redis:7.2.4",
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 6379
}
}
}
}
}
typy zasobów SQL Server
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddSqlServer("sql1")
.AddDatabase("shipping");
Przykładowy manifest:
{
"resources": {
"sql1": {
"type": "container.v0",
"connectionString": "Server={sql1.bindings.tcp.host},{sql1.bindings.tcp.port};User ID=sa;Password={sql1.inputs.password};TrustServerCertificate=true",
"image": "mcr.microsoft.com/mssql/server:2022-latest",
"env": {
"ACCEPT_EULA": "Y",
"MSSQL_SA_PASSWORD": "{sql1.inputs.password}"
},
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 1433
}
},
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
},
"shipping": {
"type": "value.v0",
"connectionString": "{sql1.connectionString};Database=shipping"
}
}
}
typy zasobów MongoDB
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMongoDB("mongodb1")
.AddDatabase("shipping");
Przykładowy manifest:
{
"resources": {
"mongodb1": {
"type": "container.v0",
"connectionString": "mongodb://{mongodb1.bindings.tcp.host}:{mongodb1.bindings.tcp.port}",
"image": "mongo:7.0.5",
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 27017
}
}
},
"shipping": {
"type": "value.v0",
"connectionString": "{mongodb1.connectionString}/shipping"
}
}
}
typy zasobów MySQL
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMySql("mysql1")
.AddDatabase("shipping");
Przykładowy manifest:
{
"resources": {
"mysql1": {
"type": "container.v0",
"connectionString": "Server={mysql1.bindings.tcp.host};Port={mysql1.bindings.tcp.port};User ID=root;Password={mysql1.inputs.password}",
"image": "mysql:8.3.0",
"env": {
"MYSQL_ROOT_PASSWORD": "{mysql1.inputs.password}"
},
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"containerPort": 3306
}
},
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
},
"shipping": {
"type": "value.v0",
"connectionString": "{mysql1.connectionString};Database=shipping"
}
}
}
Azure- określone typy zasobów
Następujące zasoby są dostępne w 📦Aspire. Gościnność.Azure pakiet NuGet.
Użycie modelu aplikacji | Typ zasobu manifestu | Łącze nagłówka |
---|---|---|
AddAzureAppConfiguration | azure.bicep.v0 |
typy zasobów usługi Azure App Configuration |
AddAzureKeyVault | azure.bicep.v0 |
Azure Key Vault typ zasobu |
AddAzureRedis |
azure.bicep.v0 |
Azure Redis typów zasobów |
AddAzureServiceBus | azure.bicep.v0 |
Azure Service Bus typ zasobu |
AddAzureSqlServer(...) |
azure.bicep.v0 |
Azure typów zasobów SQL |
AddAzureSqlServer(...).AddDatabase(...) |
value.v0 |
Azure typów zasobów SQL |
AddAzurePostgresFlexibleServer(...) |
azure.bicep.v0 |
Azure Postgres typów zasobów |
AddAzurePostgresFlexibleServer(...).AddDatabase(...) |
value.v0 |
Azure Postgres typów zasobów |
AddAzureStorage | azure.storage.v0 |
typy zasobów usługi Azure Storage |
AddBlobs | value.v0 |
typy zasobów usługi Azure Storage |
AddQueues | value.v0 |
typy zasobów usługi Azure Storage |
AddTables | value.v0 |
typy zasobów usługi Azure Storage |
typ zasobu Azure Key Vault
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureKeyVault("keyvault1");
Przykładowy manifest:
{
"resources": {
"keyvault1": {
"type": "azure.bicep.v0",
"connectionString": "{keyvault1.outputs.vaultUri}",
"path": "aspire.hosting.azure.bicep.keyvault.bicep",
"params": {
"principalId": "",
"principalType": "",
"vaultName": "keyvault1"
}
}
}
}
typ zasobu Azure Service Bus
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureServiceBus("sb1")
.AddTopic("topic1", [])
.AddTopic("topic2", [])
.AddQueue("queue1")
.AddQueue("queue2");
Przykładowy manifest:
{
"resources": {
"sb1": {
"type": "azure.bicep.v0",
"connectionString": "{sb1.outputs.serviceBusEndpoint}",
"path": "aspire.hosting.azure.bicep.servicebus.bicep",
"params": {
"serviceBusNamespaceName": "sb1",
"principalId": "",
"principalType": "",
"queues": [
"queue1",
"queue2"
],
"topics": [
{
"name": "topic1",
"subscriptions": []
},
{
"name": "topic2",
"subscriptions": []
}
]
}
}
}
}
typy zasobów usługi Azure Storage
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("images");
storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");
Przykładowy manifest:
{
"resources": {
"images": {
"type": "azure.bicep.v0",
"path": "aspire.hosting.azure.bicep.storage.bicep",
"params": {
"principalId": "",
"principalType": "",
"storageName": "images"
}
},
"blobs": {
"type": "value.v0",
"connectionString": "{images.outputs.blobEndpoint}"
},
"queues": {
"type": "value.v0",
"connectionString": "{images.outputs.queueEndpoint}"
},
"tables": {
"type": "value.v0",
"connectionString": "{images.outputs.tableEndpoint}"
}
}
}
typ zasobu AzureRedis
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureRedis("azredis1");
Przykładowy manifest:
{
"resources": {
"azredis": {
"type": "azure.bicep.v0",
"connectionString": "{azredis.outputs.connectionString}",
"path": "azredis.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
}
}
}
typ zasobu Azure App Configuration
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppConfiguration("appconfig1");
Przykładowy manifest:
{
"resources": {
"appconfig1": {
"type": "azure.bicep.v0",
"connectionString": "{appconfig1.outputs.appConfigEndpoint}",
"path": "aspire.hosting.azure.bicep.appconfig.bicep",
"params": {
"configName": "appconfig1",
"principalId": "",
"principalType": ""
}
}
}
}
Azure typów zasobów SQL
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureSqlServer("sql")
.AddDatabase("inventory");
Przykładowy manifest:
{
"resources": {
"sql": {
"type": "azure.bicep.v0",
"connectionString": "Server=tcp:{sql.outputs.sqlServerFqdn},1433;Encrypt=True;Authentication=\u0022Active Directory Default\u0022",
"path": "sql.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
},
"inventory": {
"type": "value.v0",
"connectionString": "{sql.connectionString};Database=inventory"
}
}
}
typy zasobów AzurePostgres
Przykładowy kod:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzurePostgresFlexibleServer("postgres")
.AddDatabase("db");
Przykładowy manifest:
{
"resources": {
"postgres": {
"type": "azure.bicep.v0",
"connectionString": "{postgres.outputs.connectionString}",
"path": "postgres.module.bicep",
"params": {
"principalId": "",
"principalType": "",
"principalName": ""
}
},
"db": {
"type": "value.v0",
"connectionString": "{postgres.connectionString};Database=db"
}
}
}
Typy zasobów obsługiwane w Azure Developer CLI
Azure Developer CLI (azd) to narzędzie, które może służyć do wdrażania projektów .NET Aspire w celu Azure Container Apps. W przypadku typu zasobu azure.bicep.v0
typy kontenerów zasobów niezależne od chmury można mapować na Azure-określone zasoby. W poniższej tabeli wymieniono typy zasobów obsługiwane w Azure Developer CLI:
Nazwa | Niezależny od chmury interfejs API | interfejs API Azure |
---|---|---|
Redis | AddRedis | AddAzureRedis |
Postgres | AddPostgres | AddAzurePostgresFlexibleServer |
SQL Server | AddSqlServer | AddAzureSqlServer |
Gdy zasoby skonfigurowane jako zasoby Azure, typ zasobu azure.bicep.v0
jest generowany w manifeście. Aby uzyskać więcej informacji, zobacz Deploy a .NET Aspire project to Azure Container Apps using the Azure Developer CLI (in-depth guide)(Wdrażanie projektu .NET Aspire).
Zobacz też
- .NET .NET Aspire omówienie
- omówienie orkiestracji .NET.NET Aspire
- Omówienie integracji .NET.NET Aspire
- odnajdywanie usługi w usłudze .NET.NET Aspire