.NET .NET Aspire formato de manifesto para construtores de ferramentas de implantação
Neste artigo, você aprenderá sobre o formato de manifesto .NET.NET Aspire. Este artigo serve como um guia de referência para construtores de ferramentas de implantação, auxiliando na criação de ferramentas para implantar projetos .NET.NET Aspire em plataformas de hospedagem específicas, seja no local ou na nuvem.
.NET .NET Aspire simplifica a experiência de desenvolvimento local, ajudando a gerenciar interdependências entre integrações de aplicativos. Para ajudar a simplificar a implantação de aplicativos, .NET Aspire projetos podem gerar um manifesto de todos os recursos definidos como um arquivo formatado JSON.
Gerar um manifesto
Um projeto .NET.NET Aspire válido é necessário para gerar um manifesto. Para começar, crie um projeto .NET.NET Aspire usando o modelo aspire-starter
.NET:
dotnet new aspire-starter --use-redis-cache `
-o AspireApp && `
cd AspireApp
A geração de manifesto é alcançada através da execução de dotnet build
com um objetivo especial:
dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Dica
O --output-path
suporta caminhos relativos. O comando anterior usa ../aspire-manifest.json
para colocar o arquivo de manifesto na raiz do diretório do projeto.
Para obter mais informações, consulte dotnet run. O comando anterior produz a seguinte saída:
Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: .\AspireApp.AppHost\aspire-manifest.json
O arquivo gerado é o manifesto .NET.NET Aspire e é usado por ferramentas para dar suporte à implantação em ambientes de nuvem de destino.
Observação
Você também pode gerar um manifesto como parte do perfil de inicialização. Considere o seguinte 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"
}
}
}
Formato de manifesto básico
A publicação do manifesto a partir do modelo inicial padrão para .NET Aspire produz a seguinte saída 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"
}
}
}
}
}
O formato de manifesto JSON consiste em um único objeto chamado resources
, que contém uma propriedade para cada recurso especificado em Program.cs (o argumento name
para cada nome é usado como a propriedade para cada um dos objetos de recurso filho em JSON).
Cadeia de conexão e referências de vinculação
No exemplo anterior, há dois recursos de projeto e um recurso de cache Redis. O webfrontend depende dos recursos apiservice (projeto) e cache (Redis).
Essa dependência é conhecida porque as variáveis de ambiente para o webfrontend contêm espaços reservados que fazem referência aos outros dois recursos:
"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}"
},
O recurso apiservice
é referenciado por webfrontend
usando o WithReference(apiservice)
de chamada no arquivo de Program.cs do host do aplicativo e redis
é referenciado usando o WithReference(cache)
de chamada:
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();
As referências entre os tipos de recursos do projeto resultam em descoberta de serviço variáveis sendo injetadas no projeto de referência. Referências a tipos de referência bem conhecidos, como Redis resultam na injeção de cadeias de conexão.
Para obter mais informações sobre como os recursos no modelo de aplicativo e as referências entre eles funcionam, consulte .NET.NET Aspire visão geral da orquestração.
Estrutura de cadeia de caracteres de espaço reservado
As cadeias de caracteres de espaço reservado fazem referência à estrutura do manifesto .NET.NET Aspire:
O segmento final da cadeia de caracteres de espaço reservado (url
neste caso) é gerado pela ferramenta que processa o manifesto. Há vários sufixos que podem ser usados na cadeia de caracteres de espaço reservado:
-
connectionString
: Para tipos de recursos bem conhecidos, como Redis. As ferramentas de implantação convertem o recurso na infraestrutura mais apropriada para o ambiente de nuvem de destino e, em seguida, produzem uma cadeia de conexão compatível com .NET.NET Aspire para o aplicativo consumidor usar. Emcontainer.v0
recursos, o campoconnectionString
pode estar presente e especificado explicitamente. Isso é para dar suporte a cenários em que um tipo de recurso de contêiner é referenciado usando a extensão WithReference, mas é desejado para ser hospedado explicitamente como um contêiner. -
url
: Para referências de serviço a serviço em que é necessário um URL bem formado. A ferramenta de implantação produz ourl
com base no esquema, protocolo e transporte definidos no manifesto e na topologia de computação/rede subjacente que foi implantada. -
host
: O segmento de host da URL. -
port
: O segmento de porta do URL.
Tipos de recursos
Cada recurso tem um campo type
. Quando uma ferramenta de implantação lê o manifesto, ela deve ler o tipo para verificar se pode processar corretamente o manifesto. Durante o período de visualização do .NET.NET Aspire, todos os tipos de recursos têm um sufixo v0
para indicar que estão sujeitos a alterações. À medida que .NET.NET Aspire se aproxima da versão, um sufixo v1
será usado para significar que a estrutura do manifesto para esse tipo de recurso deve ser considerada estável (atualizações subsequentes incrementam o número da versão de acordo).
Campos de recursos comuns
O campo type
é o único campo comum em todos os tipos de recursos, no entanto, os tipos de recursos project.v0
, container.v0
e executable.v0
também compartilham os campos env
e bindings
.
Observação
O tipo de recurso executable.v0
não está totalmente implementado no manifesto devido à sua falta de utilidade em cenários de implantação. Para obter mais informações sobre a contentorização de executáveis, consulte Dockerfile tipos de recursos.
O tipo de campo env
é um mapeamento básico de chave/valor onde os valores podem conter cadeias de caracteres de espaço reservado.
As ligações são especificadas no campo bindings
com cada ligação contida em seu próprio campo sob o objeto bindings
JSON. Os campos omitidos pelo manifesto .NET.NET Aspire no nó bindings
incluem:
-
scheme
: Um dos seguintes valorestcp
,udp
,http
ouhttps
. -
protocol
: Um dos seguintes valorestcp
ouudp
-
transport
: O mesmo quescheme
, mas usado para desambiguar entrehttp
ehttp2
. -
containerPort
: Opcional, se omitido padrão para a porta 80.
O campo inputs
Alguns recursos geram um campo inputs
. Este campo é usado para especificar parâmetros de entrada para o recurso. O campo inputs
é um objeto JSON em que cada propriedade é um parâmetro de entrada usado na resolução da estrutura do espaço reservado. Os recursos que têm um connectionString
, por exemplo, podem usar o campo inputs
para especificar uma password
para a cadeia de conexão:
"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"
O espaço reservado da cadeia de conexão faz referência ao parâmetro de entrada password
do campo inputs
:
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
O trecho de JSON anterior mostra o campo inputs
para um recurso que tem um campo connectionString
. O parâmetro de entrada password
é um tipo de cadeia de caracteres e é marcado como um segredo. O campo default
é usado para especificar um valor padrão para o parâmetro de entrada. Nesse caso, o valor padrão é gerado usando o campo generate
, com seqüência aleatória de um comprimento mínimo.
Recursos incorporados
A tabela a seguir é uma lista de tipos de recursos que são explicitamente gerados por .NET Aspire e extensões desenvolvidas pela equipe .NET Aspire:
Tipos de recursos independentes da nuvem
Estes recursos estão disponíveis no 📦Aspire. Hospedagem pacote NuGet.
Utilização do modelo de aplicação | Tipo de recurso de manifesto | Link do título |
---|---|---|
AddContainer | container.v0 |
Tipo de recurso de contêiner |
PublishAsDockerFile |
dockerfile.v0 |
Dockerfile tipos de recursos |
AddDatabase | value.v0 |
MongoDB Server tipos de recursos |
AddMongoDB | container.v0 |
MongoDB tipos de recursos |
AddDatabase | value.v0 |
MySQL Server tipos de recursos |
AddMySql | container.v0 |
MySQL tipos de recursos |
AddDatabase | value.v0 |
Postgres tipos de recursos |
AddPostgres | container.v0 |
Postgres tipos de recursos |
AddProject | project.v0 |
Tipo de recurso do Project |
AddRabbitMQ | container.v0 |
RabbitMQ tipos de recursos |
AddRedis | container.v0 |
Redis tipo de recurso |
AddDatabase | value.v0 |
SQL Server tipos de recursos |
AddSqlServer | container.v0 |
SQL Server tipos de recursos |
Tipo de recurso do projeto
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
Exemplo de manifesto:
"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"
}
}
}
Tipo de recurso de contêiner
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("mycontainer", "myimage")
.WithEnvironment("LOG_LEVEL", "WARN")
.WithHttpEndpoint(3000);
Exemplo de manifesto:
{
"resources": {
"mycontainer": {
"type": "container.v0",
"image": "myimage:latest",
"env": {
"LOG_LEVEL": "WARN"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 3000
}
}
}
}
}
Dockerfile tipos de recursos
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
.WithHttpEndpoint(hostPort: 5031, env: "PORT")
.PublishAsDockerFile();
Dica
A chamada PublishAsDockerFile
é necessária para gerar o tipo de recurso Dockerfile no manifesto, e esse método de extensão só está disponível no tipo ExecutableResource.
Exemplo de manifesto:
{
"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
}
}
}
}
}
Postgres tipos de recursos
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres1")
.AddDatabase("shipping");
Exemplo de manifesto:
{
"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"
}
}
}
RabbitMQ tipos de recursos
RabbitMQ é modelado como um recurso de contêiner container.v0
. O exemplo a seguir mostra como eles são adicionados ao modelo de aplicativo.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRabbitMQ("rabbitmq1");
O código anterior produz o seguinte manifesto:
{
"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
}
}
}
}
}
}
}
Redis tipo de recurso
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis1");
Exemplo de manifesto:
{
"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
}
}
}
}
}
SQL Server tipos de recursos
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddSqlServer("sql1")
.AddDatabase("shipping");
Exemplo de manifesto:
{
"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"
}
}
}
MongoDB tipos de recursos
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMongoDB("mongodb1")
.AddDatabase("shipping");
Exemplo de manifesto:
{
"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"
}
}
}
MySQL tipos de recursos
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMySql("mysql1")
.AddDatabase("shipping");
Exemplo de manifesto:
{
"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"
}
}
}
Azuretipos de recursos específicos
Os seguintes recursos estão disponíveis no 📦Aspire. Hospedagem.Azure pacote NuGet.
Utilização do Modelo de Aplicação | Tipo de recurso de manifesto | Link do título |
---|---|---|
AddAzureAppConfiguration | azure.bicep.v0 |
Azure tipos de recursos de Configuração de Aplicativo |
AddAzureKeyVault | azure.bicep.v0 |
Azure Key Vault tipo de recurso |
AddAzureRedis |
azure.bicep.v0 |
Azure Redis tipos de recursos |
AddAzureServiceBus | azure.bicep.v0 |
Azure Service Bus tipo de recurso |
AddAzureSqlServer(...) |
azure.bicep.v0 |
Azure tipos de recursos SQL |
AddAzureSqlServer(...).AddDatabase(...) |
value.v0 |
Azure tipos de recursos SQL |
AddAzurePostgresFlexibleServer(...) |
azure.bicep.v0 |
Azure Postgres tipos de recursos |
AddAzurePostgresFlexibleServer(...).AddDatabase(...) |
value.v0 |
Azure Postgres tipos de recursos |
AddAzureStorage | azure.storage.v0 |
Azure Tipos de recursos de armazenamento |
AddBlobs | value.v0 |
Azure Tipos de recursos de armazenamento |
AddQueues | value.v0 |
Azure Tipos de recursos de armazenamento |
AddTables | value.v0 |
Azure Tipos de recursos de armazenamento |
Azure Key Vault tipo de recurso
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureKeyVault("keyvault1");
Exemplo de manifesto:
{
"resources": {
"keyvault1": {
"type": "azure.bicep.v0",
"connectionString": "{keyvault1.outputs.vaultUri}",
"path": "aspire.hosting.azure.bicep.keyvault.bicep",
"params": {
"principalId": "",
"principalType": "",
"vaultName": "keyvault1"
}
}
}
}
Azure Service Bus tipo de recurso
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureServiceBus("sb1")
.AddTopic("topic1", [])
.AddTopic("topic2", [])
.AddQueue("queue1")
.AddQueue("queue2");
Exemplo de manifesto:
{
"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": []
}
]
}
}
}
}
Azure Tipos de recursos de armazenamento
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("images");
storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");
Exemplo de manifesto:
{
"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}"
}
}
}
Azure Redis tipo de recurso
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureRedis("azredis1");
Exemplo de manifesto:
{
"resources": {
"azredis": {
"type": "azure.bicep.v0",
"connectionString": "{azredis.outputs.connectionString}",
"path": "azredis.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
}
}
}
Azure tipo de recurso Configuração do Aplicativo
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppConfiguration("appconfig1");
Exemplo de manifesto:
{
"resources": {
"appconfig1": {
"type": "azure.bicep.v0",
"connectionString": "{appconfig1.outputs.appConfigEndpoint}",
"path": "aspire.hosting.azure.bicep.appconfig.bicep",
"params": {
"configName": "appconfig1",
"principalId": "",
"principalType": ""
}
}
}
}
Azure tipos de recursos SQL
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureSqlServer("sql")
.AddDatabase("inventory");
Exemplo de manifesto:
{
"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"
}
}
}
Azure Postgres tipos de recursos
Código de exemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzurePostgresFlexibleServer("postgres")
.AddDatabase("db");
Exemplo de manifesto:
{
"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"
}
}
}
Tipos de recursos suportados no Azure Developer CLI
O Azure Developer CLI (azd) é uma ferramenta que pode ser usada para implantar .NET Aspire projetos para Azure Container Apps. Com o azure.bicep.v0
tipo de recurso, os tipos de contêiner de recursos independentes da nuvem podem ser mapeados para recursos específicos Azure. A tabela a seguir lista os tipos de recursos suportados no Azure Developer CLI:
Designação | API independente da nuvem | Azure API |
---|---|---|
Redis | AddRedis | AddAzureRedis |
Postgres | AddPostgres | AddAzurePostgresFlexibleServer |
SQL Server | AddSqlServer | AddAzureSqlServer |
Quando os recursos configurados como recursos Azure, o tipo de recurso azure.bicep.v0
é gerado no manifesto. Para obter mais informações, consulte Implantar um projeto .NET Aspire para Azure Container Apps usando o Azure Developer CLI (guia detalhado).
Ver também
- .NET .NET Aspire visão geral
- Visão geral da orquestração .NET.NET Aspire
- Visão geral das integrações .NET.NET Aspire
- Descoberta de serviço no .NET.NET Aspire