.NET .NET Aspire formato de manifiesto para los generadores de herramientas de implementación
En este artículo, obtendrá información sobre el formato de manifiesto de .NET.NET Aspire. Este artículo sirve como guía de referencia para los generadores de herramientas de implementación, lo que ayuda a crear herramientas para implementar proyectos de .NET.NET Aspire en plataformas de hospedaje específicas, ya sea en el entorno local o en la nube.
.NET .NET Aspire simplifica la experiencia de desarrollo local ayudando a administrar las interdependencias entre integraciones de aplicaciones. Para ayudar a simplificar la implementación de aplicaciones, .NET Aspire proyectos pueden generar un manifiesto de todos los recursos definidos como un archivo con formato de JSON.
Generación de un manifiesto
Se requiere un proyecto de .NET.NET Aspire válido para generar un manifiesto. Para empezar, cree un proyecto de .NET.NET Aspire mediante la plantilla de aspire-starter
.NET:
dotnet new aspire-starter --use-redis-cache `
-o AspireApp && `
cd AspireApp
La generación de manifiestos se logra mediante la ejecución de dotnet build
con un destino especial:
dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Propina
El --output-path
admite rutas de acceso relativas. El comando anterior usa ../aspire-manifest.json
para colocar el archivo de manifiesto en la raíz del directorio del proyecto.
Para obtener más información, consulte dotnet run. El comando anterior genera la siguiente salida:
Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: .\AspireApp.AppHost\aspire-manifest.json
El archivo generado es el manifiesto de .NET.NET Aspire y lo usan las herramientas para admitir la implementación en entornos de nube de destino.
Nota
También puede generar un manifiesto como parte del perfil de inicio. Tenga en cuenta los siguientes 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 manifiesto básico
La publicación del manifiesto desde la plantilla de inicio predeterminada para .NET Aspire genera la siguiente salida 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"
}
}
}
}
}
El formato de manifiesto JSON consta de un único objeto denominado resources
, que contiene una propiedad para cada recurso especificado en Program.cs (el argumento name
para cada nombre se usa como propiedad para cada uno de los objetos de recursos secundarios en JSON).
Referencias de enlace y cadena de conexión
En el ejemplo anterior, hay dos recursos de proyecto y uno Redis recurso de caché. El webfrontend de
Esta dependencia se conoce porque las variables de entorno del webfrontend contienen marcadores de posición que hacen referencia a los otros dos 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}"
},
Se hace referencia al recurso apiservice
mediante webfrontend
mediante el WithReference(apiservice)
de llamada en el archivo Program.cs del host de la aplicación y se hace referencia a redis
mediante la llamada 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();
Las referencias entre los tipos de recursos del proyecto dan lugar a detección de servicios variables que se insertan en el proyecto de referencia. Las referencias a tipos de referencia conocidos, como Redis dan lugar a la inserción de cadenas de conexión.
Para obtener más información sobre cómo funcionan los recursos del modelo de aplicación y las referencias entre ellos, consulte .NET.NET Aspire información general de orquestación.
Estructura de cadena de marcador de posición
Las cadenas de marcador de posición hacen referencia a la estructura del manifiesto de .NET.NET Aspire:
El segmento final de la cadena de marcador de posición (url
en este caso) lo genera la herramienta que procesa el manifiesto. Hay varios sufijos que se pueden usar en la cadena de marcador de posición:
-
connectionString
: para los tipos de recursos conocidos, como Redis. Las herramientas de implementación traducen el recurso en la infraestructura más adecuada para el entorno en la nube de destino y, a continuación, generan una cadena de conexión compatible .NET.NET Aspire para que la aplicación de consumo la use. Encontainer.v0
recursos, el campoconnectionString
puede estar presente y especificarse explícitamente. Esto es para admitir escenarios en los que se hace referencia a un tipo de recurso de contenedor mediante la extensión WithReference, pero se desea hospedar explícitamente como contenedor. -
url
: para las referencias de servicio a servicio en las que se requiere una dirección URL con formato correcto. La herramienta de implementación genera elurl
en función del esquema, el protocolo y el transporte definidos en el manifiesto y la topología de proceso o red subyacente que se implementó. -
host
: segmento host de la dirección URL. -
port
: segmento de puerto de la dirección URL.
Tipos de recursos
Cada recurso tiene un campo type
. Cuando una herramienta de implementación lee el manifiesto, debe leer el tipo para comprobar si puede procesar correctamente el manifiesto. Durante el período de .NET.NET Aspire versión preliminar, todos los tipos de recursos tienen un sufijo v0
para indicar que están sujetos a cambios. A medida que .NET.NET Aspire enfoques liberan un sufijo v1
se usará para indicar que la estructura del manifiesto para ese tipo de recurso debe considerarse estable (las actualizaciones posteriores incrementan el número de versión en consecuencia).
Campos de recursos comunes
El campo type
es el único campo que es común en todos los tipos de recursos; sin embargo, los tipos de recursos project.v0
, container.v0
y executable.v0
también comparten los campos env
y bindings
.
Nota
El tipo de recurso executable.v0
no se implementa completamente en el manifiesto debido a su falta de utilidad en escenarios de implementación. Para obtener más información sobre cómo incluir archivos ejecutables en contenedores, consulte Dockerfile tipos de recursos.
El tipo de campo env
es una asignación básica de clave y valor donde los valores pueden contener cadenas de marcador de posición .
Los enlaces se especifican en el campo bindings
con cada enlace incluido en su propio campo bajo el objeto bindings
JSON. Los campos omitidos por el manifiesto de .NET.NET Aspire en el nodo bindings
incluyen:
-
scheme
: uno de los siguientes valorestcp
,udp
,http
ohttps
. -
protocol
: uno de los siguientes valorestcp
oudp
-
transport
: igual quescheme
, pero se usa para desambiguar entrehttp
yhttp2
. -
containerPort
: opcional, si se omiten los valores predeterminados del puerto 80.
Campo inputs
Algunos recursos generan un campo inputs
. Este campo se usa para especificar parámetros de entrada para el recurso. El campo inputs
es un objeto JSON donde cada propiedad es un parámetro de entrada que se usa en la resolución de la estructura del marcador de posición. Los recursos que tienen un connectionString
, por ejemplo, pueden usar el campo inputs
para especificar un password
para la cadena de conexión:
"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"
El marcador de posición de la cadena de conexión hace referencia al parámetro de entrada password
del campo inputs
:
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
El fragmento de código de JSON anterior muestra el campo inputs
de un recurso que tiene un campo connectionString
. El parámetro de entrada password
es un tipo de cadena y se marca como secreto. El campo default
se usa para especificar un valor predeterminado para el parámetro de entrada. En este caso, el valor predeterminado se genera mediante el campo generate
, con una cadena aleatoria de una longitud mínima.
Recursos integrados
En la tabla siguiente se muestra una lista de tipos de recursos generados explícitamente por .NET Aspire y extensiones desarrolladas por el equipo de .NET Aspire:
Tipos de recursos independientes de la nube
Estos recursos están disponibles en el 📦Aspire. Hospedaje paquete NuGet.
Uso del modelo de aplicación | Tipo de recurso de manifiesto | Vínculo de encabezado |
---|---|---|
AddContainer | container.v0 |
tipo de recurso contenedor de |
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 |
AddRabbitMQ | container.v0 |
RabbitMQ tipos de recursos |
AddRedis | container.v0 |
de tipo de recurso |
AddDatabase | value.v0 |
SQL Server tipos de recursos |
AddSqlServer | container.v0 |
SQL Server tipos de recursos |
Tipo de recurso de proyecto
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
Manifiesto de ejemplo:
"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 contenedor
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("mycontainer", "myimage")
.WithEnvironment("LOG_LEVEL", "WARN")
.WithHttpEndpoint(3000);
Manifiesto de ejemplo:
{
"resources": {
"mycontainer": {
"type": "container.v0",
"image": "myimage:latest",
"env": {
"LOG_LEVEL": "WARN"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 3000
}
}
}
}
}
tipos de recursos de Dockerfile
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
.WithHttpEndpoint(hostPort: 5031, env: "PORT")
.PublishAsDockerFile();
Propina
La llamada PublishAsDockerFile
es necesaria para generar el tipo de recurso Dockerfile en el manifiesto y este método de extensión solo está disponible en el tipo ExecutableResource.
Manifiesto de ejemplo:
{
"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
}
}
}
}
}
tipos de recursos de Postgres
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres1")
.AddDatabase("shipping");
Manifiesto de ejemplo:
{
"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"
}
}
}
tipos de recursos de RabbitMQ
RabbitMQ se modela como un recurso de contenedor container.v0
. En el ejemplo siguiente se muestra cómo se agregan al modelo de aplicación.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRabbitMQ("rabbitmq1");
El código anterior genera el siguiente manifiesto:
{
"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
}
}
}
}
}
}
}
tipo de recurso Redis
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis1");
Manifiesto de ejemplo:
{
"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
}
}
}
}
}
tipos de recursos de SQL Server
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddSqlServer("sql1")
.AddDatabase("shipping");
Manifiesto de ejemplo:
{
"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"
}
}
}
tipos de recursos de MongoDB
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMongoDB("mongodb1")
.AddDatabase("shipping");
Manifiesto de ejemplo:
{
"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"
}
}
}
tipos de recursos de MySQL
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMySql("mysql1")
.AddDatabase("shipping");
Manifiesto de ejemplo:
{
"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
Los siguientes recursos están disponibles en el 📦Aspire. Hospitalidad.Azure paquete NuGet.
Uso del modelo de aplicación | Tipo de recurso de manifiesto | Vínculo de encabezado |
---|---|---|
AddAzureAppConfiguration | azure.bicep.v0 |
Azure tipos de recursos de App Configuration |
AddAzureKeyVault | azure.bicep.v0 |
de tipo de recurso |
AddAzureRedis |
azure.bicep.v0 |
Azure Redis tipos de recursos |
AddAzureServiceBus | azure.bicep.v0 |
de tipo de recurso |
AddAzureSqlServer(...) |
azure.bicep.v0 |
tipos de recursos de SQL de |
AddAzureSqlServer(...).AddDatabase(...) |
value.v0 |
tipos de recursos de SQL de |
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 Storage |
AddBlobs | value.v0 |
Azure tipos de recursos de Storage |
AddQueues | value.v0 |
Azure tipos de recursos de Storage |
AddTables | value.v0 |
Azure tipos de recursos de Storage |
tipo de recurso Azure Key Vault
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureKeyVault("keyvault1");
Manifiesto de ejemplo:
{
"resources": {
"keyvault1": {
"type": "azure.bicep.v0",
"connectionString": "{keyvault1.outputs.vaultUri}",
"path": "aspire.hosting.azure.bicep.keyvault.bicep",
"params": {
"principalId": "",
"principalType": "",
"vaultName": "keyvault1"
}
}
}
}
tipo de recurso Azure Service Bus
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureServiceBus("sb1")
.AddTopic("topic1", [])
.AddTopic("topic2", [])
.AddQueue("queue1")
.AddQueue("queue2");
Manifiesto de ejemplo:
{
"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": []
}
]
}
}
}
}
tipos de recursos de almacenamiento de Azure
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("images");
storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");
Manifiesto de ejemplo:
{
"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}"
}
}
}
tipo de recurso AzureRedis
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureRedis("azredis1");
Manifiesto de ejemplo:
{
"resources": {
"azredis": {
"type": "azure.bicep.v0",
"connectionString": "{azredis.outputs.connectionString}",
"path": "azredis.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
}
}
}
Tipo de recurso Azure App Configuration
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppConfiguration("appconfig1");
Manifiesto de ejemplo:
{
"resources": {
"appconfig1": {
"type": "azure.bicep.v0",
"connectionString": "{appconfig1.outputs.appConfigEndpoint}",
"path": "aspire.hosting.azure.bicep.appconfig.bicep",
"params": {
"configName": "appconfig1",
"principalId": "",
"principalType": ""
}
}
}
}
tipos de recursos de Azure SQL
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureSqlServer("sql")
.AddDatabase("inventory");
Manifiesto de ejemplo:
{
"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"
}
}
}
tipos de recursos de AzurePostgres
Código de ejemplo:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzurePostgresFlexibleServer("postgres")
.AddDatabase("db");
Manifiesto de ejemplo:
{
"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 admitidos en el Azure Developer CLI
El Azure Developer CLI (azd) es una herramienta que se puede usar para implementar proyectos de .NET Aspire en Azure Container Apps. Con el tipo de recurso azure.bicep.v0
, los tipos de contenedor de recursos independientes de la nube se pueden asignar a Azurerecursos específicos. En la tabla siguiente se enumeran los tipos de recursos que se admiten en el Azure Developer CLI:
Nombre | API independiente de la nube | API de Azure |
---|---|---|
Redis | AddRedis | AddAzureRedis |
Postgres | AddPostgres | AddAzurePostgresFlexibleServer |
SQL Server | AddSqlServer | AddAzureSqlServer |
Cuando los recursos se configuran como Azure recursos, el tipo de recurso azure.bicep.v0
se genera en el manifiesto. Para obtener más información, consulte Implementación de un proyecto de .NET Aspire en Azure Container Apps mediante la Azure Developer CLI (guía detallada).
Consulte también
- .NET .NET Aspire información general
- .NET .NET Aspire introducción a la orquestación
- introducción a las integraciones de .NET.NET Aspire
- detección del servicio en .NET.NET Aspire