Delen via


.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.

een diagram waarin wordt weergegeven welke resources bijdragen aan de bijbehorende tijdelijke aanduidingen voor tekenreeksen.

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:

Een diagram waarin wordt getoond hoe het manifest JSON structuur wordt toegewezen aan tekenreeksen met tijdelijke aanduidingen.

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. In container.v0 resources kan het connectionString 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 de url 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.v0en 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 bindingsJSON-object. De velden die worden weggelaten door het .NET.NET Aspire manifest in het knooppunt bindings zijn onder andere:

  • scheme: een van de volgende waarden tcp, udp, httpof https.
  • protocol: een van de volgende waarden tcp of udp
  • transport: Zelfde als scheme, maar gebruikte om onderscheid te maken tussen http en http2.
  • 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 connectionStringkunnen 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