.NET .NET Aspire formato manifesto per i generatori di strumenti di distribuzione
In questo articolo vengono fornite informazioni sul formato manifesto .NET.NET Aspire. Questo articolo funge da guida di riferimento per i generatori di strumenti di distribuzione, che facilitano la creazione di strumenti per distribuire .NET.NET Aspire progetti in piattaforme di hosting specifiche, in locale o nel cloud.
.NET .NET Aspire semplifica l'esperienza di sviluppo locale aiutando a gestire le interdipendenze tra le integrazioni delle applicazioni. Per semplificare la distribuzione delle applicazioni, .NET Aspire progetti possono generare un manifesto di tutte le risorse definite come file formattato JSON.
Generare un manifesto
Per generare un manifesto è necessario un progetto di .NET.NET Aspire valido. Per iniziare, creare un progetto di .NET.NET Aspire usando il modello di aspire-starter
.NET:
dotnet new aspire-starter --use-redis-cache `
-o AspireApp && `
cd AspireApp
La generazione del manifesto viene ottenuta eseguendo dotnet build
con una destinazione speciale:
dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Mancia
Il --output-path
supporta i percorsi relativi. Il comando precedente usa ../aspire-manifest.json
per inserire il file manifesto nella radice della directory del progetto.
Per altre informazioni, vedere dotnet run. Il comando precedente produce l'output seguente:
Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: .\AspireApp.AppHost\aspire-manifest.json
Il file generato è il manifesto .NET.NET Aspire e viene usato dagli strumenti per supportare la distribuzione in ambienti cloud di destinazione.
Nota
È anche possibile generare un manifesto come parte del profilo di avvio. Prendere in considerazione i launchSettings seguenti.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 manifesto di base
La pubblicazione del manifesto dal modello di avvio predefinito per .NET Aspire produce l'output JSON seguente:
{
"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"
}
}
}
}
}
Il formato manifesto JSON è costituito da un singolo oggetto denominato resources
, che contiene una proprietà per ogni risorsa specificata in Program.cs (l'argomento name
per ogni nome viene usato come proprietà per ogni oggetto risorsa figlio in JSON).
Riferimenti a stringhe di connessione e binding
Nell'esempio precedente sono presenti due risorse di progetto e una Redis risorsa cache. Il webfrontend
Questa dipendenza è nota perché le variabili di ambiente per il webfrontend contengono segnaposto che fanno riferimento alle due altre risorse:
"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}"
},
La risorsa apiservice
fa riferimento webfrontend
usando il WithReference(apiservice)
di chiamata nel file Program.cs dell'host dell'app e redis
viene fatto riferimento usando la chiamata 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();
I riferimenti tra i tipi di risorse di progetto comportano 'individuazione del servizio variabili inserite nel progetto di riferimento. Riferimenti a tipi di riferimento noti, ad esempio Redis comportano l'iniezione di stringhe di connessione.
Per altre informazioni sul funzionamento delle risorse nel modello di app e sui riferimenti tra di essi, vedere .NET.NET Aspire panoramica dell'orchestrazione.
Struttura di stringhe segnaposto
Le stringhe segnaposto fanno riferimento alla struttura del manifesto .NET.NET Aspire:
Il segmento finale della stringa segnaposto (url
in questo caso) viene generato dallo strumento che elabora il manifesto. Nella stringa segnaposto possono essere usati diversi suffissi:
-
connectionString
: per tipi di risorse noti, ad esempio Redis. Gli strumenti di distribuzione convertono la risorsa nell'infrastruttura più appropriata per l'ambiente cloud di destinazione e quindi producono una stringa di connessione .NET.NET Aspire compatibile per l'applicazione che usa. Nelle risorsecontainer.v0
il campoconnectionString
può essere presente e specificato in modo esplicito. Si tratta di supportare scenari in cui viene fatto riferimento a un tipo di risorsa contenitore usando l'estensione WithReference, ma si vuole essere ospitati in modo esplicito come contenitore. -
url
: per i riferimenti da servizio a servizio in cui è necessario un URL ben formato. Lo strumento di distribuzione produce ilurl
in base allo schema, al protocollo e al trasporto definiti nel manifesto e alla topologia di calcolo/rete sottostante distribuita. -
host
: segmento host dell'URL. -
port
: segmento di porta dell'URL.
Tipi di risorse
Ogni risorsa ha un campo type
. Quando uno strumento di distribuzione legge il manifesto, deve leggere il tipo per verificare se può elaborare correttamente il manifesto. Durante il periodo di anteprima .NET.NET Aspire, tutti i tipi di risorse hanno un suffisso v0
per indicare che sono soggetti a modifiche. Poiché .NET.NET Aspire approcci rilasciano un suffisso v1
verrà usato per indicare che la struttura del manifesto per tale tipo di risorsa deve essere considerata stabile (gli aggiornamenti successivi incrementeranno di conseguenza il numero di versione).
Campi delle risorse comuni
Il campo type
è l'unico campo comune in tutti i tipi di risorse, ma i tipi di risorse project.v0
, container.v0
e executable.v0
condividono anche i campi env
e bindings
.
Nota
Il tipo di risorsa executable.v0
non è completamente implementato nel manifesto a causa della mancanza di utilità negli scenari di distribuzione. Per altre informazioni sulla creazione di contenitori di file eseguibili, vedere Dockerfile tipi di risorse.
Il tipo di campo env
è un mapping chiave/valore di base in cui i valori possono contenere stringhe segnaposto.
Le associazioni vengono specificate nel campo bindings
con ogni associazione contenuta all'interno del proprio campo sotto l'oggetto bindings
JSON. I campi omessi dal manifesto .NET.NET Aspire nel nodo bindings
includono:
-
scheme
: uno dei valori seguentitcp
,udp
,http
ohttps
. -
protocol
: uno dei valori seguentitcp
oudp
-
transport
: uguale ascheme
, ma usato per disambiguare trahttp
ehttp2
. -
containerPort
: facoltativo, se omesso per impostazione predefinita è la porta 80.
Campo inputs
Alcune risorse generano un campo inputs
. Questo campo viene usato per specificare i parametri di input per la risorsa. Il campo inputs
è un oggetto JSON in cui ogni proprietà è un parametro di input utilizzato nella risoluzione della struttura segnaposto. Le risorse con un connectionString
, ad esempio, possono usare il campo inputs
per specificare un password
per la stringa di connessione:
"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"
Il segnaposto della stringa di connessione fa riferimento al parametro di input password
dal campo inputs
:
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
Il frammento di codice JSON precedente mostra il campo inputs
per una risorsa con un campo connectionString
. Il parametro di input password
è un tipo stringa e viene contrassegnato come segreto. Il campo default
viene usato per specificare un valore predefinito per il parametro di input. In questo caso, il valore predefinito viene generato usando il campo generate
, con stringa casuale di lunghezza minima.
Risorse predefinite
La tabella seguente è un elenco di tipi di risorse generati in modo esplicito da .NET Aspire ed estensioni sviluppate dal team .NET Aspire:
Tipi di risorse indipendenti dal cloud
Queste risorse sono disponibili nel 📦Aspire. Hosting pacchetto NuGet.
Utilizzo del modello di app | Tipo di risorsa manifesto | Collegamento intestazione |
---|---|---|
AddContainer | container.v0 |
tipo di risorsa contenitore |
PublishAsDockerFile |
dockerfile.v0 |
Dockerfile tipi di risorse |
AddDatabase | value.v0 |
MongoDB Server tipi di risorse |
AddMongoDB | container.v0 |
MongoDB tipi di risorse |
AddDatabase | value.v0 |
MySQL Server tipi di risorse |
AddMySql | container.v0 |
MySQL tipi di risorse |
AddDatabase | value.v0 |
Postgres tipi di risorse |
AddPostgres | container.v0 |
Postgres tipi di risorse |
AddProject | project.v0 |
tipo di risorsa progetto |
AddRabbitMQ | container.v0 |
RabbitMQ tipi di risorse |
AddRedis | container.v0 |
Redis tipo di risorsa |
AddDatabase | value.v0 |
SQL Server tipi di risorse |
AddSqlServer | container.v0 |
SQL Server tipi di risorse |
Tipo di risorsa progetto
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
Manifesto di esempio:
"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 di risorsa contenitore
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("mycontainer", "myimage")
.WithEnvironment("LOG_LEVEL", "WARN")
.WithHttpEndpoint(3000);
Manifesto di esempio:
{
"resources": {
"mycontainer": {
"type": "container.v0",
"image": "myimage:latest",
"env": {
"LOG_LEVEL": "WARN"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 3000
}
}
}
}
}
Dockerfile tipi di risorse
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
.WithHttpEndpoint(hostPort: 5031, env: "PORT")
.PublishAsDockerFile();
Mancia
La chiamata PublishAsDockerFile
è necessaria per generare il tipo di risorsa Dockerfile nel manifesto e questo metodo di estensione è disponibile solo nel tipo di ExecutableResource.
Manifesto di esempio:
{
"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 tipi di risorse
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres1")
.AddDatabase("shipping");
Manifesto di esempio:
{
"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 tipi di risorse
RabbitMQ viene modellato come risorsa contenitore container.v0
. L'esempio seguente mostra come vengono aggiunti al modello di app.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRabbitMQ("rabbitmq1");
Il codice precedente produce il manifesto seguente:
{
"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 di risorsa
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis1");
Manifesto di esempio:
{
"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 tipi di risorse
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddSqlServer("sql1")
.AddDatabase("shipping");
Manifesto di esempio:
{
"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 tipi di risorse
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMongoDB("mongodb1")
.AddDatabase("shipping");
Manifesto di esempio:
{
"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 tipi di risorse
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMySql("mysql1")
.AddDatabase("shipping");
Manifesto di esempio:
{
"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"
}
}
}
Azuretipi di risorse specifici
Nella 📦Aspiresono disponibili le risorse seguenti. Ospitare.Azure pacchetto NuGet.
Utilizzo del modello di app | Tipo di risorsa manifesto | Collegamento intestazione |
---|---|---|
AddAzureAppConfiguration | azure.bicep.v0 |
Azure tipi di risorse di Configurazione app |
AddAzureKeyVault | azure.bicep.v0 |
Azure Key Vault tipo di risorsa |
AddAzureRedis |
azure.bicep.v0 |
Azure Redis tipi di risorse |
AddAzureServiceBus | azure.bicep.v0 |
Azure Service Bus tipo di risorsa |
AddAzureSqlServer(...) |
azure.bicep.v0 |
Azure tipi di risorse SQL |
AddAzureSqlServer(...).AddDatabase(...) |
value.v0 |
Azure tipi di risorse SQL |
AddAzurePostgresFlexibleServer(...) |
azure.bicep.v0 |
Azure Postgres tipi di risorse |
AddAzurePostgresFlexibleServer(...).AddDatabase(...) |
value.v0 |
Azure Postgres tipi di risorse |
AddAzureStorage | azure.storage.v0 |
Azure tipi di risorse di archiviazione |
AddBlobs | value.v0 |
Azure tipi di risorse di archiviazione |
AddQueues | value.v0 |
Azure tipi di risorse di archiviazione |
AddTables | value.v0 |
Azure tipi di risorse di archiviazione |
Azure Key Vault tipo di risorsa
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureKeyVault("keyvault1");
Manifesto di esempio:
{
"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 di risorsa
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureServiceBus("sb1")
.AddTopic("topic1", [])
.AddTopic("topic2", [])
.AddQueue("queue1")
.AddQueue("queue2");
Manifesto di esempio:
{
"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 tipi di risorse di archiviazione
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("images");
storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");
Manifesto di esempio:
{
"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 di risorsa
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureRedis("azredis1");
Manifesto di esempio:
{
"resources": {
"azredis": {
"type": "azure.bicep.v0",
"connectionString": "{azredis.outputs.connectionString}",
"path": "azredis.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
}
}
}
Azure tipo di risorsa Configurazione app
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppConfiguration("appconfig1");
Manifesto di esempio:
{
"resources": {
"appconfig1": {
"type": "azure.bicep.v0",
"connectionString": "{appconfig1.outputs.appConfigEndpoint}",
"path": "aspire.hosting.azure.bicep.appconfig.bicep",
"params": {
"configName": "appconfig1",
"principalId": "",
"principalType": ""
}
}
}
}
Azure tipi di risorse SQL
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureSqlServer("sql")
.AddDatabase("inventory");
Manifesto di esempio:
{
"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 tipi di risorse
Codice di esempio:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzurePostgresFlexibleServer("postgres")
.AddDatabase("db");
Manifesto di esempio:
{
"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"
}
}
}
Tipi di risorse supportati nella Azure Developer CLI
Il Azure Developer CLI (azd) è uno strumento che può essere usato per distribuire progetti .NET Aspire in Azure Container Apps. Con il tipo di risorsa azure.bicep.v0
, è possibile eseguire il mapping dei tipi di contenitore di risorse indipendenti dal cloud a Azurerisorse specifiche. Nella tabella seguente sono elencati i tipi di risorse supportati nel Azure Developer CLI:
Nome | API indipendente dal cloud | API Azure |
---|---|---|
Redis | AddRedis | AddAzureRedis |
Postgres | AddPostgres | AddAzurePostgresFlexibleServer |
SQL Server | AddSqlServer | AddAzureSqlServer |
Quando le risorse sono configurate come risorse Azure, il tipo di risorsa azure.bicep.v0
viene generato nel manifesto. Per altre informazioni, vedere Distribuire un progetto di .NET Aspire per Azure Container Apps usando Azure Developer CLI (guida dettagliata).
Vedere anche
- panoramica .NET.NET Aspire
- .NET .NET Aspire panoramica dell'orchestrazione
- Panoramica .NET.NET Aspire integrazioni
- individuazione del servizio in .NET.NET Aspire