Přehled integrace .NET AspireAzure
Azure je nejoblíbenější cloudovou platformou pro sestavování a nasazování aplikací .NET. Sada Azure SDK pro .NET umožňuje snadnou správu a používání služeb Azure. .NET Aspire poskytuje sadu integrací se službami Azure, kde můžete zdarma přidávat nové prostředky nebo se připojovat k existujícím. Tento článek podrobně popisuje některé běžné aspekty všech integrací Azure v .NET Aspire a má vám pomoct pochopit, jak je používat.
Přidat připojení k existujícím prostředkům Azure
.NET .NET Aspire umožňuje připojit se ke stávajícím prostředkům, včetně prostředků Azure. Vyjádření připojovacích řetězců je užitečné, když máte existující zdroje Azure, které chcete použít ve své aplikaci .NET Aspire. Rozhraní API AddConnectionString se používá s kontextem spouštění hostitele aplikace k podmíněnému přidání připojovacího řetězce do modelu aplikace.
Poznámka
Připojovací řetězce se používají k reprezentaci široké škály informací o připojení, včetně databázových připojení, zprostředkovatelů zpráv, identifikátorů URI koncových bodů a dalších služeb. V .NET.NET Aspire terminologii se výraz "připojovací řetězec" používá k reprezentaci jakéhokoli druhu informací o připojení.
Podívejte se na následující příklad, kdy v režimu publikování přidáte prostředek úložiště Azure, zatímco v režimu spuštění přidáte připojovací řetězec do existujícího úložiště Azure.
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.ExecutionContext.IsPublishMode
? builder.AddAzureStorage("storage")
: builder.AddConnectionString("storage");
builder.AddProject<Projects.Api>("api")
.WithReference(storage);
// After adding all resources, run the app...
Předchozí kód:
- Vytvoří novou instanci
builder
. - Přidá Azure prostředek úložiště s názvem
storage
v režimu publikování. - Přidá připojovací řetězec do existujícího Azure Storage s názvem
storage
v režimu spuštění. - Přidá do sestavovatele projekt s názvem
api
. - Projekt
api
odkazuje nastorage
zdroj bez ohledu na režim.
Projekt rozhraní API využívá informace o připojovacím řetězci bez znalostí o tom, jak ho hostitel aplikace nakonfiguroval. V publikačním režimu kód přidá nový prostředek Úložiště Azure, který se odpovídajícím způsobem projeví v manifestu nasazení . Pokud je v režimu spuštění, připojovací řetězec odpovídá konfigurační hodnotě viditelné pro hostitele aplikace. Předpokládá se, že všechna přiřazení rolí pro cílový prostředek jsou nakonfigurována. To znamená, že byste pravděpodobně nakonfigurovali proměnnou prostředí nebo tajný klíč uživatele pro uložení připojovacího řetězce. Konfigurace se vyřeší z konfiguračního klíče ConnectionStrings__storage
(nebo ConnectionStrings:storage
). Tyto konfigurační hodnoty se dají zobrazit při spuštění aplikace. Další informace najdete v tématu Podrobnosti o prostředku.
Přidejte prostředky Azure
Všechny integrace hostování .NET AspireAzure zpřístupňují Azure prostředky a podle konvence se přidávají pomocí rozhraní API AddAzure*
. Když přidáte tyto prostředky do hostitele aplikace .NET Aspire, budou představovat službu Azure. Rozhraní API AddAzure*
vrátí IResourceBuilder<T>, kde T
je typ prostředku Azure. Tato rozhraní IResourceBuilder<T>
(tvůrce) poskytují plynulé API, které umožňuje konfigurovat základní prostředek Azure v rámci modelu aplikace .
Typické prostředí pro vývojáře
Když hostitel aplikace
cílem .NET.NET Aspire je minimalizovat náklady tím, že se ve výchozím režimu použijí Základní nebo Standardnískladové jednotky (SKU) pro jejich integrace Azure. I když jsou k dispozici tyto rozumné výchozí hodnoty, můžete přizpůsobit Azure prostředky tak, aby vyhovovaly vašim potřebám. Kromě toho některé integrace podporují emulátory nebo kontejnery, které jsou užitečné pro místní vývoj, testování a ladění. Když aplikaci spustíte místně, prostředky Azure ve výchozím nastavení používají skutečnou službu Azure. Můžete je ale nakonfigurovat tak, aby používaly místní emulátory nebo kontejnery, a vyhnout se tak nákladům spojeným se skutečnými Azure službami během místního vývoje.
Místní emulátory
Některé Azure služby je možné spouštět místně v emulátorech. V současné době .NET Aspire podporuje následující emulátory Azure:
Integrace hostování | Popis |
---|---|
Azure Cosmos DB | Voláním AzureCosmosExtensions.RunAsEmulator na IResourceBuilder<AzureCosmosDBResource> nakonfigurujte prostředek Cosmos DB tak, aby se emuloval pomocírozhraní API NoSQL. |
Azure Event Hubs | Zavolejte AzureEventHubsExtensions.RunAsEmulator na IResourceBuilder<AzureEventHubsResource> , abyste nakonfigurovali prostředek Event Hubs tak, aby se emuloval. |
Azure Úložiště | Voláním AzureStorageExtensions.RunAsEmulator na IResourceBuilder<AzureStorageResource> nakonfigurujte prostředek úložiště, aby byl emulován jako pomocí Azurite. |
Pokud chcete, aby vaše Azure prostředky používaly místní emulátory, propojte volání metody RunAsEmulator
v sestavovateli prostředků Azure. Tato metoda nakonfiguruje prostředek Azure tak, aby místo skutečné služby Azure používal místní emulátor.
Důležitý
Volání některého z dostupných rozhraní API RunAsEmulator
prostřednictvím nástroje pro tvorbu prostředků Azure nemá vliv na publikační manifest . Při publikování aplikace vygenerovaný soubor Bicep odráží skutečnou službu Azure, nikoli místní emulátor.
Místní kontejnery
Některé Azure služby je možné spouštět místně v kontejnerech. Pokud chcete místně spustit službu Azure v kontejneru, zřetězte volání metody RunAsContainer
na builderu zdrojů Azure. Tato metoda nakonfiguruje prostředek Azure tak, aby se spouštěl místně v kontejneru místo skutečné služby Azure.
V současné době .NET Aspire podporuje jako kontejnery následující služby Azure:
Integrace hostování | Podrobnosti |
---|---|
Azure Cache for Redis | Voláním AzureRedisExtensions.RunAsContainer na IResourceBuilder<AzureRedisCacheResource> ji nakonfigurujte tak, aby se spouštěla místně v kontejneru na základě image docker.io/library/redis . |
flexibilní AzurePostgreSQLServer | Voláním AzurePostgresExtensions.RunAsContainer na IResourceBuilder<AzurePostgresFlexibleServerResource> ji nakonfigurujte tak, aby se spouštěla místně v kontejneru na základě image docker.io/library/postgres . |
Azure SQL Server | Voláním AzureSqlExtensions.RunAsContainer na IResourceBuilder<AzureSqlServerResource> ji nakonfigurujte tak, aby se spouštěla místně v kontejneru na základě image mcr.microsoft.com/mssql/server . |
Poznámka
Podobně jako emulátory nemá volání RunAsContainer
v tvůrci prostředků Azure vliv na manifestu publikování. Když publikujete svou aplikaci, soubor Bicep vygenerovaný odráží skutečnou službu Azure, nikoli místní kontejner.
Pochopit rozhraní API pro integraci Azure
.NET .NET Aspiresíla spočívá v jeho schopnosti poskytovat úžasný vývojový cyklus pro vývojáře. Integrace Azure se nijak neliší. Poskytují sadu běžných rozhraní API a vzorů, které se sdílejí napříč všemi prostředky Azure. Tato rozhraní API a vzory jsou navržená tak, aby usnadnila práci s Azure prostředky konzistentním způsobem.
V předchozí části o kontejnerech jste viděli, jak místně spustit služby Azure v kontejnerech. Pokud znáte .NET.NET Aspire, možná vás zajímá, čím se liší volání AddAzureRedis("redis").RunAsContainer()
k získání místního kontejneru docker.io/library/redis
od AddRedis("redis")
– protože obojí vede ke stejnému místnímu kontejneru.
Odpověď je, že při místním spuštění není žádný rozdíl. Když ale publikujete, získáte různé prostředky:
API | Režim spuštění | Režim publikování |
---|---|---|
AddAzureRedis("redis").RunAsContainer() | Místní kontejner Redis | Azure Cache for Redis |
|
Místní kontejner Redis | Azure Container App s obrazem Redis |
Totéž platí pro služby SQL a PostgreSQL:
API | Režim spuštění | Režim publikování |
---|---|---|
AddAzurePostgresFlexibleServer("postgres"). RunAsContainer() | Místní kontejner PostgreSQL | flexibilní AzurePostgreSQLServer |
AddPostgres("postgres") | Místní kontejner PostgreSQL | Azure Container App s obrazem PostgreSQL |
AddAzureSqlServer("sql").RunAsContainer() | Místní kontejner SQL Server | Azure SQL Server |
AddSqlServer("sql") | Místní kontejner SQL Server | Azure Container App s obrazem SQL Server |
Další informace o rozdílu mezi režimy spuštění a publikování najdete v tématu .NET.NET Aspire hostitel aplikace: Kontext spuštění.
Infrastruktura jako kód
Sada Azure SDK pro .NET poskytuje 📦Azure. Balíček NuGet pro zřizování a sada balíčků pro zřizování služeb specifických pro Azure. Tyto zřizovací knihovny Azure usnadňují deklarativní specifikování Azure infrastruktury přímo v .NET. Jejich rozhraní API umožňují psát objektově orientovanou infrastrukturu v jazyce C#, a tak vzniká Bicep. Bicep je jazyk specifický pro doménu (DSL) pro deklarativní Azure nasazení prostředků.
I když je možné prostředky Azure zřizovat ručně, .NET Aspire proces zjednodušuje tím, že poskytuje sadu rozhraní API pro vyjádření Azure prostředků. Tato rozhraní API jsou k dispozici jako rozšiřující metody v .NET AspireAzure hostitelských knihovnách, které rozšiřují rozhraní IDistributedApplicationBuilder. Když přidáte Azure prostředky do aplikačního hostitele, příslušné funkce zřizování se implicitně přidají. Jinými slovy, nemusíte volat žádné provisioning API přímo.
Vzhledem k tomu, že .NET Aspire modeluje Azure zdroje v rámci integrace hostingu Azure, je sada nástrojů Azure SDK používána k zajištění těchto zdrojů. Generují se soubory Bicep, které definují potřebné Azure prostředky. Vytvořené soubory Bicep jsou vyhotoveny spolu se soubory manifestu, když publikujete svou aplikaci.
Vygenerované soubory Bicep můžete ovlivnit několika způsoby:
-
Azure. Přizpůsobení nasazení:
- Nakonfigurujte infrastrukturu: Přizpůsobte infrastrukturu zdrojů Azure.
- Přidat infrastrukturu Azure: Do hostitele aplikace ručně přidejte infrastrukturu Azure.
-
Použití vlastních šablon Bicep:
- Referenční soubory Bicep: Přidat odkaz na soubor Bicep na disku.
- Odkaz na Bicep v řádku: Přidejte vloženou šablonu Bicep.
Místní zřizování a Azure.Provisioning
Aby se zabránilo zaměňování pojmů a pomohlo při rozlišení pojmů "zřizování", je důležité pochopit rozdíl mezi místním zřizováním a Azure zřizováním:
Místní zřizování:
Ve výchozím nastavení se při volání některého z Azure hostování rozhraní API integrace pro přidání Azure prostředků volá rozhraní API AddAzureProvisioning(IDistributedApplicationBuilder) implicitně. Toto rozhraní API registruje služby v kontejneru zavádění závislostí (DI), který se používá k poskytnutí Azure prostředků při spuštění aplikace. Tento koncept se označuje jako místní zřizování. Další informace naleznete v místním Azure zřizování.
Azure.Provisioning
:Azure.Provisioning
odkazuje na balíček NuGet a je sada knihoven, která umožňuje vygenerovat Bicep pomocí jazyka C#. Azure hostování integrací v .NET Aspire tyto knihovny používat v rámci krytů ke generování souborů Bicep, které definují potřebné Azure prostředky. Další informace naleznete v tématuAzure.Provisioning
přizpůsobení.
přizpůsobení Azure.Provisioning
Všechny integrace hostingu .NET AspireAzure zpřístupňují různé prostředky Azure a všechny jsou podtřídami typu AzureProvisioningResource, který sám dědí z AzureBicepResource. Tímto se umožňují rozšíření, která jsou obecně omezena na tento typ, což umožňuje plynulé API k přizpůsobení infrastruktury podle vašich představ. I když .NET.NET Aspire poskytuje výchozí hodnoty, máte volnost ovlivnit generovaný Bicep pomocí těchto rozhraní API.
Konfigurace infrastruktury
Bez ohledu na prostředek Azure, se kterým pracujete, abyste nakonfigurovali jeho podkladovou infrastrukturu, zřetězíte volání metody rozšíření ConfigureInfrastructure. Tato metoda umožňuje přizpůsobit infrastrukturu prostředku Azure pomocí delegáta configure
typu Action<AzureResourceInfrastructure>
. Typ AzureResourceInfrastructure je podtřídou Azure.Provisioning.Infrastructure. Tento typ zveřejňuje rozsáhlou plochu rozhraní API pro konfiguraci základní infrastruktury prostředku Azure.
Podívejte se na následující příklad:
var sku = builder.AddParameter("storage-sku");
var storage = builder.AddAzureStorage("storage")
.ConfigureInfrastructure(infra =>
{
var resources = infra.GetProvisionableResources();
var storageAccount = resources.OfType<StorageAccount>().Single();
storageAccount.Sku = new StorageSku
{
Name = sku.AsProvisioningParameter(infra)
};
});
Předchozí kód:
- Přidá parametr s názvem
storage-sku
. - Přidává Azure Storage pomocí rozhraní API AddAzureStorage nazvaného
storage
. - Zřetězí volání
ConfigureInfrastructure
a přizpůsobí infrastrukturu Azure Storage:- Získá zřizovatelné prostředky.
- Filtruje na jediný StorageAccount.
- Přiřadí parametr
storage-sku
vlastnosti StorageAccount.Sku:- Nová instance StorageSku má přiřazenou vlastnost
Name
z výsledku rozhraní API AsProvisioningParameter.
- Nová instance StorageSku má přiřazenou vlastnost
Tento příklad znázorňuje tok externího parametru do infrastruktury Azure Storage, což vede k vygenerovanému souboru Bicep odrážejícího požadovanou konfiguraci.
Přidat infrastrukturu Azure
Ne všechny Azure služby jsou dostupné jako integrace .NET Aspire. I když mohou být dostupné později, můžete stále zřizovat služby, které jsou k dispozici v Azure.Provisioning.*
knihovnách. Představte si scénář, ve kterém máte pracovní službu, která zodpovídá za správu služby Azure Container Registry. Teď si představte, že hostitelský projekt aplikace využívá závislost na 📦Azure.Provisioning.ContainerRegistry balíčku NuGet.
Pomocí rozhraní AddAzureInfrastructure
API můžete do hostitele aplikace přidat infrastrukturu služby Azure Container Registry:
var acr = builder.AddAzureInfrastructure("acr", infra =>
{
var registry = new ContainerRegistryService("acr")
{
Sku = new()
{
Name = ContainerRegistrySkuName.Standard
},
};
infra.Add(registry);
var output = new ProvisioningOutput("registryName", typeof(string))
{
Value = registry.Name
};
infra.Add(output);
});
builder.AddProject<Projects.WorkerService>("worker")
.WithEnvironment(
"ACR_REGISTRY_NAME",
new BicepOutputReference("registryName", acr.Resource));
Předchozí kód:
- Volá AddAzureInfrastructure s názvem
acr
. - Poskytuje
configureInfrastructure
delegáta pro přizpůsobení infrastruktury služby Azure Container Registry:- Vytvoří instanci ContainerRegistryService s názvem
acr
a standardním SKU. - Přidá službu Azure Container Registry do proměnné
infra
. - Vytvoří instanci ProvisioningOutput s názvem
registryName
, typemstring
a hodnotou, která odpovídá názvu Azure Container Registry. - Přidá výstup do proměnné
infra
.
- Vytvoří instanci ContainerRegistryService s názvem
- Přidá do sestavovatele projekt s názvem
worker
. - Zavolá funkci WithEnvironment a zřetězí ji tak, aby nastavila proměnnou prostředí
ACR_REGISTRY_NAME
v projektu na hodnotu, kterou vrací výstupregistryName
.
Funkce předvádí, jak do hostitelského projektu aplikace přidat Azure infrastrukturu, a to i v případě, že služba Azure není přímo zpřístupněná jako integrace .NET Aspire. Dále ukazuje, jak plynout výstup služby Azure Container Registry do prostředí závislého projektu.
Podívejte se na výsledný soubor Bicep:
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
resource acr 'Microsoft.ContainerRegistry/registries@2023-07-01' = {
name: take('acr${uniqueString(resourceGroup().id)}', 50)
location: location
sku: {
name: 'Standard'
}
}
output registryName string = acr.name
Soubor Bicep odráží požadovanou konfiguraci služby Azure Container Registry, jak je definováno rozhraním API AddAzureInfrastructure
.
Použijte vlastní šablony Bicep
Když cílíte na Azure jako požadovaný poskytovatel cloudu, můžete pomocí Bicep definovat infrastrukturu jako kód. Cílem je výrazně zjednodušit vytváření obsahu s čistější syntaxí a lepší podporou modularity a opětovného použití kódu.
I když .NET.NET Aspire poskytuje sadu předem připravených šablon Bicep, může se stát, že budete chtít šablony přizpůsobit nebo vytvořit vlastní. Tato část vysvětluje koncepty a odpovídající rozhraní API, která můžete použít k přizpůsobení šablon Bicep.
Důležitý
Tato část není určená k výuce Bicep, ale spíše k poskytování pokynů k vytváření vlastních šablon Bicep pro použití s .NET.NET Aspire.
V rámci scénáře nasazení Azure pro .NET Aspireposkytuje Azure Developer CLI (azd
) porozumění projektu .NET Aspire a možnost ho nasadit do Azure. Rozhraní příkazového řádku azd
využívá šablony Bicep k nasazení aplikace na Azure.
Instalace balíčku Aspire.Hosting.Azure
Pokud chcete odkazovat na soubory Bicep, je možné, že nepoužíváte žádnou z Azure hostování integrací. V tomto případě můžete nadále odkazovat na soubory Bicep tím, že nainstalujete balíček Aspire.Hosting.Azure
. Tento balíček poskytuje potřebná rozhraní API pro práci se soubory Bicep a přizpůsobení prostředků Azure.
Spropitné
Pokud používáte některou z Azure hostování integrací, nemusíte instalovat balíček Aspire.Hosting.Azure
, protože se jedná o tranzitivní závislost.
Pokud chcete použít některou z těchto funkcí, musí být nainstalován balíček NuGet: 📦Aspire.Hosting.Azure
dotnet add package Aspire.Hosting.Azure
Další informace najdete v tématu dotnet add package nebo Manage package dependencies in .NET applications.
Co očekávat od příkladů
Všechny příklady v této části předpokládají, že používáte obor názvů Aspire.Hosting.Azure. Kromě toho příklady předpokládají, že máte instanci IDistributedApplicationBuilder:
using Aspire.Hosting.Azure;
var builder = DistributedApplication.CreateBuilder(args);
// Examples go here...
builder.Build().Run();
Ve výchozím nastavení se při volání některého z rozhraní API souvisejících s Bicep provede také volání AddAzureProvisioning, které přidává podporu generování Azure prostředků dynamicky během spouštění aplikace. Další informace najdete v tématu Místní zřizování a Azure.Provisioning
.
Referenční soubory Bicep
Představte si, že máte šablonu Bicep v souboru s názvem storage.bicep
, která zřizuje účet pro ukládání Azure:
param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Chcete-li přidat odkaz na soubor Bicep na disku, zavolejte metodu AddBicepTemplate. Podívejte se na následující příklad:
builder.AddBicepTemplate(
name: "storage",
bicepFile: "../infra/storage.bicep");
Předchozí kód přidá odkaz na soubor Bicep umístěný v ../infra/storage.bicep
. Cesty k souborům by měly být relativní k hostiteli aplikace a projektu. Tento odkaz má za následek přidání AzureBicepResource do kolekce prostředků aplikace s názvem "storage"
a rozhraní API vrátí instanci IResourceBuilder<AzureBicepResource>
, kterou lze použít k dalšímu přizpůsobení prostředku.
Odkaz na vložený bicep
I když mít soubor Bicep na disku je nejběžnějším scénářem, můžete také přidávat šablony Bicep přímo. Vložené šablony můžou být užitečné, když chcete definovat šablonu v kódu nebo když chcete šablonu vygenerovat dynamicky. Pokud chcete přidat vloženou šablonu Bicep, zavolejte metodu AddBicepTemplateString se šablonou Bicep jako string
. Podívejte se na následující příklad:
builder.AddBicepTemplateString(
name: "ai",
bicepContent: """
@description('That name is the name of our application.')
param cognitiveServiceName string = 'CognitiveService-${uniqueString(resourceGroup().id)}'
@description('Location for all resources.')
param location string = resourceGroup().location
@allowed([
'S0'
])
param sku string = 'S0'
resource cognitiveService 'Microsoft.CognitiveServices/accounts@2021-10-01' = {
name: cognitiveServiceName
location: location
sku: {
name: sku
}
kind: 'CognitiveServices'
properties: {
apiProperties: {
statisticsEnabled: false
}
}
}
"""
);
V tomto příkladu je šablona Bicep definována jako vložená string
a přidána do kolekce prostředků aplikace s názvem "ai"
. Tento příklad nastaví prostředek Azure AI.
Předání parametrů do šablon Bicep
Bicep podporuje přijímání parametrů, které lze použít k přizpůsobení chování šablony. Pokud chcete předat parametry do šablony Bicep z .NET.NET Aspire, zřetězte volání metody WithParameter tak, jak je ukázáno v následujícím příkladu:
var region = builder.AddParameter("region");
builder.AddBicepTemplate("storage", "../infra/storage.bicep")
.WithParameter("region", region)
.WithParameter("storageName", "app-storage")
.WithParameter("tags", ["latest","dev"]);
Předchozí kód:
- Přidá parametr s názvem
"region"
do instancebuilder
. - Přidá odkaz k souboru Bicep umístěnému v
../infra/storage.bicep
. - Předá parametr
"region"
šabloně Bicep, který je vyřešen pomocí standardního rozlišení parametrů. - Předá parametr
"storageName"
šabloně Bicep s pevně zakódovanou hodnotou . - Předá parametr
"tags"
šabloně Bicep s polem řetězců.
Další informace naleznete v tématu Externí parametry.
Známé parametry
.NET .NET Aspire poskytuje sadu známých parametrů, které lze předat šabloně Bicep. Tyto parametry slouží k poskytování informací o aplikaci a prostředí šablonám Bicep. K dispozici jsou následující dobře známé parametry:
Pole | Popis | Hodnota |
---|---|---|
AzureBicepResource.KnownParameters.KeyVaultName | Název prostředku trezoru klíčů sloužícího k ukládání výstupů tajných kódů. | "keyVaultName" |
AzureBicepResource.KnownParameters.Location | Umístění prostředku. To se vyžaduje pro všechny zdroje. | "location" |
AzureBicepResource.KnownParameters.LogAnalyticsWorkspaceId | ID prostředku pracovního prostoru služby Log Analytics. | "logAnalyticsWorkspaceId" |
AzureBicepResource.KnownParameters.PrincipalId | Hlavní ID aktuálního uživatele nebo spravované identity. | "principalId" |
AzureBicepResource.KnownParameters.PrincipalName | Hlavní název aktuálního uživatele nebo spravované identity. | "principalName" |
AzureBicepResource.KnownParameters.PrincipalType | Hlavní typ aktuálního uživatele nebo spravované identity. Buď User , nebo ServicePrincipal . |
"principalType" |
Chcete-li použít dobře známý parametr, předejte název parametru metodě WithParameter, například WithParameter(AzureBicepResource.KnownParameters.KeyVaultName)
. Nepředáváte hodnoty pro dobře známé parametry, protože .NET.NET Aspire je vyřeší vaším jménem.
Představte si příklad, ve kterém chcete nastavit webhook služby Event Grid Azure. Šablonu Bicep můžete definovat takto:
param topicName string
param webHookEndpoint string
param principalId string
param principalType string
param location string = resourceGroup().location
// The topic name must be unique because it's represented by a DNS entry.
// must be between 3-50 characters and contain only values a-z, A-Z, 0-9, and "-".
resource topic 'Microsoft.EventGrid/topics@2023-12-15-preview' = {
name: toLower(take('${topicName}${uniqueString(resourceGroup().id)}', 50))
location: location
resource eventSubscription 'eventSubscriptions' = {
name: 'customSub'
properties: {
destination: {
endpointType: 'WebHook'
properties: {
endpointUrl: webHookEndpoint
}
}
}
}
}
resource EventGridRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(topic.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'd5a91429-5739-47e2-a06b-3470a27159e7'))
scope: topic
properties: {
principalId: principalId
principalType: principalType
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'd5a91429-5739-47e2-a06b-3470a27159e7')
}
}
output endpoint string = topic.properties.endpoint
Tato šablona Bicep definuje několik parametrů, včetně topicName
, webHookEndpoint
, principalId
, principalType
a volitelného location
. Pokud chcete šabloně Bicep předat tyto parametry, můžete použít následující fragment kódu:
var webHookApi = builder.AddProject<Projects.WebHook_Api>("webhook-api");
var webHookEndpointExpression = ReferenceExpression.Create(
$"{webHookApi.GetEndpoint("https")}/hook");
builder.AddBicepTemplate("event-grid-webhook", "../infra/event-grid-webhook.bicep")
.WithParameter("topicName", "events")
.WithParameter(AzureBicepResource.KnownParameters.PrincipalId)
.WithParameter(AzureBicepResource.KnownParameters.PrincipalType)
.WithParameter("webHookEndpoint", () => webHookEndpointExpression);
- Projekt
webHookApi
se přidá jako odkaz nabuilder
. - Parametru
topicName
se předává pevně zakódovaná hodnota jména. - Parametr
webHookEndpoint
se předává jako výraz, který se překládá na adresu URL z "https" koncového bodu referencí projektuapi
s trasou/hook
. - Parametry
principalId
aprincipalType
se předávají jako dobře známé parametry.
Známé parametry jsou založené na konvencích a neměly by být doprovázeny odpovídající hodnotou při předání pomocí rozhraní WithParameter
API. Známé parametry zjednodušují některé běžné funkce, například přiřazení rolí, při přidání do šablon Bicep, jak je znázorněno v předchozím příkladu. K odesílání událostí do zadaného koncového bodu se vyžadují přiřazení rolí pro webhook služby Event Grid. Další informace najdete v tématu přiřazení role odesílatele dat event gridu.
Získání výstupů z odkazů Bicep
Kromě předávání parametrů do šablon Bicep můžete také získat výstupy ze šablon Bicep. Představte si následující šablonu Bicep, protože definuje output
s názvem endpoint
:
param storageName string
param location string = resourceGroup().location
resource myStorageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: storageName
location: location
kind: 'StorageV2'
sku:{
name:'Standard_LRS'
tier: 'Standard'
}
properties: {
accessTier: 'Hot'
}
}
output endpoint string = myStorageAccount.properties.primaryEndpoints.blob
Bicep definuje výstup pojmenovaný jako endpoint
. Pokud chcete získat výstup ze šablony Bicep, zavolejte metodu GetOutput v instanci IResourceBuilder<AzureBicepResource>
, jak je znázorněno v následujícím fragmentu kódu jazyka C#:
var storage = builder.AddBicepTemplate(
name: "storage",
bicepFile: "../infra/storage.bicep"
);
var endpoint = storage.GetOutput("endpoint");
V tomto příkladu se načte a uloží výstup ze šablony Bicep do proměnné endpoint
. Obvykle byste tento výstup předali jako proměnnou prostředí jinému prostředku, který na něj spoléhá. Pokud jste například měli ASP.NET Core minimální projekt rozhraní API, který závisí na tomto koncovém bodu, můžete výstup předat do projektu jako proměnnou prostředí pomocí následujícího fragmentu kódu:
var storage = builder.AddBicepTemplate(
name: "storage",
bicepFile: "../infra/storage.bicep"
);
var endpoint = storage.GetOutput("endpoint");
var apiService = builder.AddProject<Projects.AspireSample_ApiService>(
name: "apiservice"
)
.WithEnvironment("STORAGE_ENDPOINT", endpoint);
Pro více informací se podívejte do výstupů Bicep.
Získání tajných výstupů z referencí Bicep
Při práci s Bicep je důležité vyhnout se výstupům tajných kódů. Pokud je výstup považován za tajný, což znamená, že by neměl být vystaven v protokolech nebo na jiných místech, můžete s ním zacházet jako s takovým. Toho lze dosáhnout uložením tajného kódu do Azure Key Vault a odkazováním na něj v šabloně Bicep.
.NET Aspireintegrace Azure poskytuje vzor pro bezpečné ukládání výstupů ze šablony Bicep tím, že umožňuje prostředkům používat parametr keyVaultName
k ukládání tajných kódů do Azure Key Vault.
Představte si následující šablonu Bicep jako příklad, která vám pomůže předvést tento koncept zabezpečení výstupů tajných kódů:
param databaseAccountName string
param keyVaultName string
param databases array = []
@description('Tags that will be applied to all resources')
param tags object = {}
param location string = resourceGroup().location
var resourceToken = uniqueString(resourceGroup().id)
resource cosmosDb 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' = {
name: replace('${databaseAccountName}-${resourceToken}', '-', '')
location: location
kind: 'GlobalDocumentDB'
tags: tags
properties: {
consistencyPolicy: { defaultConsistencyLevel: 'Session' }
locations: [
{
locationName: location
failoverPriority: 0
}
]
databaseAccountOfferType: 'Standard'
}
resource db 'sqlDatabases@2023-04-15' = [for name in databases: {
name: '${name}'
location: location
tags: tags
properties: {
resource: {
id: '${name}'
}
}
}]
}
var primaryMasterKey = cosmosDb.listKeys(cosmosDb.apiVersion).primaryMasterKey
resource vault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
name: keyVaultName
resource secret 'secrets@2023-07-01' = {
name: 'connectionString'
properties: {
value: 'AccountEndpoint=${cosmosDb.properties.documentEndpoint};AccountKey=${primaryMasterKey}'
}
}
}
Předchozí šablona Bicep očekává kromě několika dalších parametrů parametr keyVaultName
. Pak definuje prostředek Azure Cosmos DB a uloží tajný kód do Azure Key Vaultpod názvem connectionString
, který představuje plně kvalifikovaný připojovací řetězec k instanci Cosmos DB. Pro přístup k této hodnotě připojovacího řetězce tajného kódu můžete použít následující fragment kódu:
var cosmos = builder.AddBicepTemplate("cosmos", "../infra/cosmosdb.bicep")
.WithParameter("databaseAccountName", "fallout-db")
.WithParameter(AzureBicepResource.KnownParameters.KeyVaultName)
.WithParameter("databases", ["vault-33", "vault-111"]);
var connectionString =
cosmos.GetSecretOutput("connectionString");
builder.AddProject<Projects.WebHook_Api>("api")
.WithEnvironment(
"ConnectionStrings__cosmos",
connectionString);
V předchozím fragmentu kódu se šablona cosmos
Bicep přidá jako odkaz na builder
. Výstup tajného kódu connectionString
se načte ze šablony Bicep a uloží se do proměnné. Výstup tajného kódu se pak předá do projektu ConnectionStrings__cosmos
jako proměnná prostředí (api
). Tato proměnná prostředí slouží k připojení k instanci Cosmos DB.
Po nasazení tohoto prostředku se základní mechanismus nasazení automaticky referenční tajné kódy z Azure Key Vault. Pokud chcete zaručit izolaci tajných kódů, .NET.NET Aspire vytvoří službu Key Vault pro každý zdroj.
Poznámka
V místním režimu zřizování se tajný kód extrahuje ze služby Key Vault a nastaví ho v proměnné prostředí. Další informace naleznete v místním Azure zřizování.
Publikování
Při publikování aplikace se Azure zřizování vygenerované bicep používá Azure Developer CLI k vytvoření Azure prostředků ve vašem Azure předplatném. .NET .NET Aspire vytváří manifest publikování , který je také důležitou součástí procesu publikování. Azure Developer CLI je nástroj příkazového řádku, který poskytuje sadu příkazů pro správu Azure prostředků.
Další informace o publikování a nasazení najdete v tématu Nasazení projektu .NET Aspire pro Azure Container Apps pomocí Azure Developer CLI (podrobný průvodce).