.NET .NET Aspire manifestindeling voor opbouwfuncties voor implementatieprogramma's
In dit artikel leert u meer over de .NET.NET Aspire manifestindeling. Dit artikel fungeert als referentiehandleiding voor opbouwfuncties voor implementatieprogramma's, die helpen bij het maken van hulpprogramma's voor het implementeren van .NET.NET Aspire projecten op specifieke hostingplatforms, zowel on-premises als in de cloud.
.NET .NET Aspire vereenvoudigt de lokale ontwikkelervaring door interafhankelijkheden tussen toepassingsintegraties te beheren. Om de implementatie van toepassingen te vereenvoudigen, kunnen .NET Aspire projecten een manifest genereren van alle resources die zijn gedefinieerd als een JSON opgemaakt bestand.
Een manifest genereren
Er is een geldig .NET.NET Aspire project vereist om een manifest te genereren. Maak een .NET.NET Aspire project met behulp van de aspire-starter
.NET-sjabloon om aan de slag te gaan:
dotnet new aspire-starter --use-redis-cache `
-o AspireApp && `
cd AspireApp
Het genereren van manifesten wordt bereikt door dotnet build
uit te voeren met een speciaal doel:
dotnet run --project AspireApp.AppHost\AspireApp.AppHost.csproj `
--publisher manifest `
--output-path ../aspire-manifest.json
Fooi
De --output-path
ondersteunt relatieve paden. In de vorige opdracht wordt ../aspire-manifest.json
gebruikt om het manifestbestand in de hoofdmap van de projectmap te plaatsen.
Zie dotnet-uitvoeringvoor meer informatie. De vorige opdracht produceert de volgende uitvoer:
Building...
info: Aspire.Hosting.Publishing.ManifestPublisher[0]
Published manifest to: .\AspireApp.AppHost\aspire-manifest.json
Het gegenereerde bestand is het .NET.NET Aspire manifest en wordt gebruikt door hulpprogramma's ter ondersteuning van implementatie in doelcloudomgevingen.
Notitie
U kunt ook een manifest genereren als onderdeel van het startprofiel. Houd rekening met de volgende 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"
}
}
}
Basismanifestindeling
Als u het manifest publiceert op basis van de standaardstartsjabloon voor .NET Aspire, wordt de volgende JSON uitvoer geproduceerd:
{
"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"
}
}
}
}
}
De manifestindeling JSON bestaat uit één object met de naam resources
, dat een eigenschap bevat voor elke resource die is opgegeven in Program.cs (het argument name
voor elke naam wordt gebruikt als de eigenschap voor elk van de onderliggende resourceobjecten in JSON).
Verbindingsreeks en bindingverwijzingen
In het vorige voorbeeld zijn er twee projectresources en één Redis cacheresource. De webfrontend- is afhankelijk van zowel de apiservice- (project) als cache- (Redis) resources.
Deze afhankelijkheid is bekend omdat de omgevingsvariabelen voor de webfrontend- tijdelijke aanduidingen bevatten die verwijzen naar de twee andere resources:
"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}"
},
Naar de apiservice
resource wordt verwezen door webfrontend
met behulp van de aanroep WithReference(apiservice)
in het Program.cs-bestand van de app-host en redis
wordt verwezen met behulp van de aanroep 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();
Verwijzingen tussen projectresourcetypen resulteren in servicedetectie variabelen worden geïnjecteerd in het verwijzende project. Verwijzingen naar bekende referentietypen, zoals Redis resulteren in het injecteren van verbindingsreeksen.
Zie .NET.NET Aspire indelingsoverzichtvoor meer informatie over hoe resources in het app-model en de verwijzingen ertussen werken.
Tijdelijke aanduiding voor tekenreeksstructuur
Tijdelijke aanduidingen verwijzen naar de structuur van het .NET.NET Aspire manifest:
Het laatste segment van de tijdelijke aanduidingstekenreeks (url
in dit geval) wordt gegenereerd door het hulpprogramma dat het manifest verwerkt. Er zijn verschillende achtervoegsels die kunnen worden gebruikt voor de tijdelijke tekenreeks:
-
connectionString
: voor bekende resourcetypen zoals Redis. Implementatiehulpprogramma's vertalen de resource in de meest geschikte infrastructuur voor de doelcloudomgeving en produceren vervolgens een .NET.NET Aspire compatibele verbindingsreeks voor de verbruikende toepassing die moet worden gebruikt. Incontainer.v0
resources kan hetconnectionString
veld aanwezig zijn en expliciet worden opgegeven. Dit is ter ondersteuning van scenario's waarin naar een containerresourcetype wordt verwezen met behulp van de extensie WithReference, maar expliciet als een container moet worden gehost. -
url
: voor service-naar-serviceverwijzingen waarbij een goed gevormde URL is vereist. Het implementatieprogramma produceert deurl
op basis van het schema, protocol en transport dat is gedefinieerd in het manifest en de onderliggende compute-/netwerktopologie die is geïmplementeerd. -
host
: het hostsegment van de URL. -
port
: het poortsegment van de URL.
Resourcetypen
Elke resource heeft een type
veld. Wanneer een implementatieprogramma het manifest leest, moet het het type lezen om te controleren of het manifest correct kan worden verwerkt. Tijdens de .NET.NET Aspire preview-periode hebben alle resourcetypen een v0
achtervoegsel om aan te geven dat ze moeten worden gewijzigd. Wanneer .NET.NET Aspire benaderingen een v1
achtervoegsel vrijgeven, wordt gebruikt om aan te geven dat de structuur van het manifest voor dat resourcetype als stabiel moet worden beschouwd (latere updates verhogen het versienummer dienovereenkomstig).
Algemene resourcevelden
Het type
veld is het enige veld dat gebruikelijk is voor alle resourcetypen, maar de project.v0
, container.v0
en executable.v0
resourcetypen delen ook de velden env
en bindings
.
Notitie
Het executable.v0
resourcetype is niet volledig geïmplementeerd in het manifest vanwege het gebrek aan hulpprogramma's in implementatiescenario's. Zie Dockerfile resourcetypenvoor meer informatie over het in containers opslaan van uitvoerbare bestanden.
Het env
veldtype is een eenvoudige sleutel/waardetoewijzing waarin de waarden mogelijk tijdelijke aanduidingen voor tekenreeksenbevatten.
Bindingen worden opgegeven in het bindings
veld met elke binding in een eigen veld onder het bindings
JSON-object. De velden die worden weggelaten door het .NET.NET Aspire manifest in het knooppunt bindings
zijn onder andere:
-
scheme
: een van de volgende waardentcp
,udp
,http
ofhttps
. -
protocol
: een van de volgende waardentcp
ofudp
-
transport
: Zelfde alsscheme
, maar gebruikte om onderscheid te maken tussenhttp
enhttp2
. -
containerPort
: Optioneel, indien weggelaten, wordt standaard ingesteld op poort 80.
Het veld inputs
Sommige resources genereren een inputs
veld. Dit veld wordt gebruikt om invoerparameters voor de resource op te geven. Het inputs
veld is een JSON object waarbij elke eigenschap een invoerparameter is die wordt gebruikt in de resolutie van de tijdelijke aanduiding voor structuur. Resources met een connectionString
kunnen bijvoorbeeld het veld inputs
gebruiken om een password
op te geven voor de verbindingsreeks:
"connectionString": "Host={<resourceName>.bindings.tcp.host};Port={<resourceName>.bindings.tcp.port};Username=admin;Password={<resourceName>.inputs.password};"
De tijdelijke aanduiding voor de verbindingsreeks verwijst naar de password
invoerparameter uit het veld inputs
:
"inputs": {
"password": {
"type": "string",
"secret": true,
"default": {
"generate": {
"minLength": 10
}
}
}
}
In het voorgaande JSON fragment ziet u het inputs
veld voor een resource met een connectionString
veld. De password
invoerparameter is een tekenreekstype en is gemarkeerd als een geheim. Het veld default
wordt gebruikt om een standaardwaarde op te geven voor de invoerparameter. In dit geval wordt de standaardwaarde gegenereerd met behulp van het veld generate
, met een willekeurige tekenreeks van een minimale lengte.
Ingebouwde resources
De volgende tabel is een lijst met resourcetypen die expliciet worden gegenereerd door .NET Aspire en extensies die zijn ontwikkeld door het .NET Aspire team:
Cloudagnostische resourcetypen
Deze resources zijn beschikbaar in de 📦Aspire. Hosting NuGet-pakket.
App-modelgebruik | Resourcetype manifest | Kopkoppeling |
---|---|---|
AddContainer | container.v0 |
containerresourcetype |
PublishAsDockerFile |
dockerfile.v0 |
Dockerfile resourcetypen |
AddDatabase | value.v0 |
MongoDB Server resourcetypen |
AddMongoDB | container.v0 |
MongoDB resourcetypen |
AddDatabase | value.v0 |
MySQL Server resourcetypen |
AddMySql | container.v0 |
MySQL resourcetypen |
AddDatabase | value.v0 |
Postgres resourcetypen |
AddPostgres | container.v0 |
Postgres resourcetypen |
AddProject | project.v0 |
projectresourcetype |
AddRabbitMQ | container.v0 |
RabbitMQ resourcetypen |
AddRedis | container.v0 |
Redis resourcetype |
AddDatabase | value.v0 |
SQL Server resourcetypen |
AddSqlServer | container.v0 |
SQL Server resourcetypen |
Projectresourcetype
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
var apiservice = builder.AddProject<Projects.AspireApp_ApiService>("apiservice");
Voorbeeldmanifest:
"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"
}
}
}
Type containerresource
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("mycontainer", "myimage")
.WithEnvironment("LOG_LEVEL", "WARN")
.WithHttpEndpoint(3000);
Voorbeeldmanifest:
{
"resources": {
"mycontainer": {
"type": "container.v0",
"image": "myimage:latest",
"env": {
"LOG_LEVEL": "WARN"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"containerPort": 3000
}
}
}
}
}
resourcetypen Dockerfile
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("nodeapp", "../nodeapp/app.js")
.WithHttpEndpoint(hostPort: 5031, env: "PORT")
.PublishAsDockerFile();
Fooi
De PublishAsDockerFile
aanroep is vereist voor het genereren van het Dockerfile resourcetype in het manifest en deze extensiemethode is alleen beschikbaar voor het ExecutableResource type.
Voorbeeldmanifest:
{
"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
}
}
}
}
}
resourcetypen Postgres
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPostgres("postgres1")
.AddDatabase("shipping");
Voorbeeldmanifest:
{
"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"
}
}
}
resourcetypen RabbitMQ
RabbitMQ wordt gemodelleerd als een containerresource container.v0
. In het volgende voorbeeld ziet u hoe deze worden toegevoegd aan het app-model.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRabbitMQ("rabbitmq1");
De vorige code produceert het volgende 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
}
}
}
}
}
}
}
Redis resourcetype
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis1");
Voorbeeldmanifest:
{
"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
}
}
}
}
}
resourcetypen SQL Server
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddSqlServer("sql1")
.AddDatabase("shipping");
Voorbeeldmanifest:
{
"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"
}
}
}
resourcetypen MongoDB
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMongoDB("mongodb1")
.AddDatabase("shipping");
Voorbeeldmanifest:
{
"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"
}
}
}
resourcetypen MySQL
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMySql("mysql1")
.AddDatabase("shipping");
Voorbeeldmanifest:
{
"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-specifieke resourcetypen
De volgende resources zijn beschikbaar in de 📦Aspire. Gastvrijheid.Azure NuGet-pakket.
App-modelgebruik | Resourcetype manifest | Kopkoppeling |
---|---|---|
AddAzureAppConfiguration | azure.bicep.v0 |
resourcetypen Azure App Configuration |
AddAzureKeyVault | azure.bicep.v0 |
Azure Key Vault resourcetype |
AddAzureRedis |
azure.bicep.v0 |
Azure Redis resourcetypen |
AddAzureServiceBus | azure.bicep.v0 |
Azure Service Bus resourcetype |
AddAzureSqlServer(...) |
azure.bicep.v0 |
Azure SQL-resourcetypen |
AddAzureSqlServer(...).AddDatabase(...) |
value.v0 |
Azure SQL-resourcetypen |
AddAzurePostgresFlexibleServer(...) |
azure.bicep.v0 |
Azure Postgres resourcetypen |
AddAzurePostgresFlexibleServer(...).AddDatabase(...) |
value.v0 |
Azure Postgres resourcetypen |
AddAzureStorage | azure.storage.v0 |
Azure opslagresourcetypen |
AddBlobs | value.v0 |
Azure opslagresourcetypen |
AddQueues | value.v0 |
Azure opslagresourcetypen |
AddTables | value.v0 |
Azure opslagresourcetypen |
Azure Key Vault resourcetype
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureKeyVault("keyvault1");
Voorbeeldmanifest:
{
"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 resourcetype
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureServiceBus("sb1")
.AddTopic("topic1", [])
.AddTopic("topic2", [])
.AddQueue("queue1")
.AddQueue("queue2");
Voorbeeldmanifest:
{
"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 Storage-resourcetypen
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("images");
storage.AddBlobs("blobs");
storage.AddQueues("queues");
storage.AddTables("tables");
Voorbeeldmanifest:
{
"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 resourcetype
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureRedis("azredis1");
Voorbeeldmanifest:
{
"resources": {
"azredis": {
"type": "azure.bicep.v0",
"connectionString": "{azredis.outputs.connectionString}",
"path": "azredis.module.bicep",
"params": {
"principalId": "",
"principalName": ""
}
}
}
}
resourcetype Azure App Configuration
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureAppConfiguration("appconfig1");
Voorbeeldmanifest:
{
"resources": {
"appconfig1": {
"type": "azure.bicep.v0",
"connectionString": "{appconfig1.outputs.appConfigEndpoint}",
"path": "aspire.hosting.azure.bicep.appconfig.bicep",
"params": {
"configName": "appconfig1",
"principalId": "",
"principalType": ""
}
}
}
}
Azure SQL-resourcetypen
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureSqlServer("sql")
.AddDatabase("inventory");
Voorbeeldmanifest:
{
"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"
}
}
}
resourcetypen AzurePostgres
Voorbeeldcode:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzurePostgresFlexibleServer("postgres")
.AddDatabase("db");
Voorbeeldmanifest:
{
"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"
}
}
}
Resourcetypen die worden ondersteund in de Azure Developer CLI
De Azure Developer CLI (azd) is een hulpprogramma dat kan worden gebruikt om .NET Aspire projecten in Azure Container Appste implementeren. Met het azure.bicep.v0
resourcetype kunnen cloudagnostische resourcecontainertypen worden toegewezen aan Azure-specifieke resources. De volgende tabel bevat de resourcetypen die worden ondersteund in de Azure Developer CLI:
Naam | Cloudagnostische API | Azure-API |
---|---|---|
Redis | AddRedis | AddAzureRedis |
Postgres | AddPostgres | AddAzurePostgresFlexibleServer |
SQL Server | AddSqlServer | AddAzureSqlServer |
Wanneer resources zoals geconfigureerd als Azure resources, wordt het azure.bicep.v0
resourcetype gegenereerd in het manifest. Zie Een .NET Aspire-project implementeren voor Azure Container Apps met behulp van de Azure Developer CLI (uitgebreide handleiding)voor meer informatie.
Zie ook
- overzicht van .NET.NET Aspire
- Overzicht van .NET.NET Aspire indeling
- overzicht van .NET.NET Aspire integraties
- Servicedetectie in .NET.NET Aspire