.NET Aspire Azure Blob Storage integrering
omfattar:Som värd för integrering och Client integration
Azure Blob Storage är en tjänst för lagring av stora mängder ostrukturerade data. Med .NET AspireAzure Blob Storage integrering kan du ansluta till befintliga Azure Blob Storage-instanser eller skapa nya instanser från .NET program.
Värdintegrering
.NET .NET Aspire Azure Storage värd för integrationsmodellen som beskriver de olika lagringsresurserna utifrån följande typer:
- AzureStorageResource: Representerar en Azure lagringsresurs.
- AzureStorageEmulatorResource: Representerar en Azure lagringsemulatorresurs (Azurite).
- AzureBlobStorageResource: Representerar en Azure Blob Storage-resurs.
- AzureQueueStorageResource: Representerar en Azure kölagringsresurs.
- AzureTableStorageResource: Representerar en Azure Table Storage-resurs.
Om du vill komma åt dessa typer och API:er för att uttrycka dem lägger du till 📦Aspire.Hosting.Azure.Storage NuGet-paketet i appvärd-projektet.
dotnet add package Aspire.Hosting.Azure.Storage
Mer information finns i dotnet add package eller Hantera paketberoenden i .NET applikationer.
Lägg till Azure Lagringsresurs
I appvärdprojektet anropar du AddAzureStorage för att lägga till och returnera en Azure Storage-resursbyggare.
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage");
// An Azure Storage resource is required to add any of the following:
//
// - Azure Blob storage resource.
// - Azure Queue storage resource.
// - Azure Table storage resource.
// After adding all resources, run the app...
När du lägger till en AzureStorageResource
till appens värd exponeras andra användbara API:er för att lägga till Azure blob-, kö- och tabelllagringsresurser. Med andra ord måste du lägga till en AzureStorageResource
innan du lägger till någon av de andra lagringsresurserna.
Viktig
När du anropar AddAzureStorageanropas implicit AddAzureProvisioning– vilket ger stöd för att generera Azure resurser dynamiskt under appstarten. Appen måste konfigurera lämplig prenumeration och plats. Mer information finns i Lokal provisionering: Konfiguration.
Genererad Bicep-konfiguration
Om du är ny till Bicepär det ett domänspecifikt språk för att definiera resurser för Azure. Med .NET.NET Aspirebehöver du inte skriva Bicep för hand, i stället genererar etablerings-API:erna Bicep åt dig. När du publicerar din app matas den genererade Bicep ut tillsammans med manifestfilen. När du lägger till en Azure Storage-resurs genereras följande Bicep:
Växla Azure Storage Bicep.
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param principalId string
param principalType string
resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: take('storage${uniqueString(resourceGroup().id)}', 24)
kind: 'StorageV2'
location: location
sku: {
name: 'Standard_GRS'
}
properties: {
accessTier: 'Hot'
allowSharedKeyAccess: false
minimumTlsVersion: 'TLS1_2'
networkAcls: {
defaultAction: 'Allow'
}
}
tags: {
'aspire-resource-name': 'storage'
}
}
resource blobs 'Microsoft.Storage/storageAccounts/blobServices@2024-01-01' = {
name: 'default'
parent: storage
}
resource storage_StorageBlobDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')
principalType: principalType
}
scope: storage
}
resource storage_StorageTableDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3')
principalType: principalType
}
scope: storage
}
resource storage_StorageQueueDataContributor 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(storage.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '974c5e8b-45b9-4653-ba55-5f855dd0fb88'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '974c5e8b-45b9-4653-ba55-5f855dd0fb88')
principalType: principalType
}
scope: storage
}
output blobEndpoint string = storage.properties.primaryEndpoints.blob
output queueEndpoint string = storage.properties.primaryEndpoints.queue
output tableEndpoint string = storage.properties.primaryEndpoints.table
Föregående Bicep är en modul som etablerar ett Azure Storage-konto med följande standardvärden:
-
kind
: Typen av lagringskonto. Standardvärdet ärStorageV2
. -
sku
: SKU:n för lagringskontot. Standardvärdet ärStandard_GRS
. -
properties
: Egenskaperna för lagringskontot:-
accessTier
: Åtkomstnivån för lagringskontot. Standardvärdet ärHot
. -
allowSharedKeyAccess
: Ett booleskt värde som anger om lagringskontot tillåter att begäranden auktoriseras med kontoåtkomstnyckeln. Standardvärdet ärfalse
. -
minimumTlsVersion
: Den lägsta TLS-version som stöds för lagringskontot. Standardvärdet ärTLS1_2
. -
networkAcls
: Nätverks-ACL:er för lagringskontot. Standardvärdet är{ defaultAction: 'Allow' }
.
-
Förutom lagringskontot tillhandahåller den också en blobcontainer.
Följande rolltilldelningar läggs till i lagringskontot för att ge ditt program åtkomst. Mer information finns i inbyggda rollbaserade Azure rollbaserade åtkomstkontrollroller (Azure RBAC):
Roll/ID | Beskrivning |
---|---|
Storage Blob Data-deltagareba92f5b4-2d11-453d-a403-e96b0029c9fe |
Läsa, skriva och ta bort Azure Lagringscontainrar och blobar. |
Storage Table Data-deltagare0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3 |
Läsa, skriva och ta bort Azure Lagringstabeller och entiteter. |
Lagringsködatadeltagare974c5e8b-45b9-4653-ba55-5f855dd0fb88 |
Läsa, skriva och ta bort Azure Lagringsköer och kömeddelanden. |
Den genererade Bicep-filen är en utgångspunkt och kan anpassas för att möta dina specifika behov.
Anpassa försörjningsinfrastruktur
Alla .NET AspireAzure resurser är underklasser av den AzureProvisioningResource typen. Den här typen möjliggör att den genererade Bicep kan anpassas genom att tillhandahålla ett tydligt API för att konfigurera Azure-resurserna med hjälp av ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>)-API:et. Du kan till exempel konfigurera kind
, sku
, properties
och mycket mer. I följande exempel visas hur du anpassar Azure Storage-resursen:
builder.AddAzureStorage("storage")
.ConfigureInfrastructure(infra =>
{
var storageAccount = infra.GetProvisionableResources()
.OfType<StorageAccount>()
.Single();
storageAccount.AccessTier = StorageAccountAccessTier.Cool;
storageAccount.Sku = new StorageSku { Name = StorageSkuName.PremiumZrs };
storageAccount.Tags.Add("ExampleKey", "Example value");
});
Föregående kod:
- Kedjar ett anrop till ConfigureInfrastructure-API:et:
- Parametern
infra
är en instans av den AzureResourceInfrastructure typen. - De tillgängliga resurserna hämtas genom att anropa GetProvisionableResources()-metoden.
- Den enstaka StorageAccount hämtas.
- StorageAccount.AccessTier tilldelas till StorageAccountAccessTier.Cool.
-
StorageAccount.Sku tilldelas till en ny StorageSku med en
Name
av PremiumZrs. - En tagg läggs till i lagringskontot med nyckeln
ExampleKey
och värdetExample value
.
- Parametern
Det finns många fler konfigurationsalternativ för att anpassa Azure Storage-resursen. Mer information finns i Azure.Provisioning.Storage.
Ansluta till ett befintligt Azure Storage-konto
Du kan ha ett befintligt Azure Lagringskonto som du vill ansluta till. I stället för att representera en ny Azure Storage-resurs kan du lägga till en anslutningssträng till appvärden. Om du vill lägga till en anslutning till ett befintligt Azure Storage-konto anropar du metoden AddConnectionString:
var builder = DistributedApplication.CreateBuilder(args);
var blobs = builder.AddConnectionString("blobs");
builder.AddProject<Projects.WebApplication>("web")
.WithReference(blobs);
// After adding all resources, run the app...
Not
Anslutningssträngar används för att representera ett brett spektrum av anslutningsinformation, inklusive databasanslutningar, meddelandeköer, slutpunkts-URI:er och andra tjänster. I .NET.NET Aspire nomenklatur används termen "anslutningssträng" för att representera alla typer av anslutningsinformation.
Anslutningssträngen konfigureras i appvärdens konfiguration, vanligtvis under Användarhemligheter, under avsnittet ConnectionStrings
. Appvärden injekterar den här anslutningssträngen som en miljövariabel i alla resurser som är beroende, till exempel:
{
"ConnectionStrings": {
"blobs": "https://{account_name}.blob.core.windows.net/"
}
}
Den beroende resursen kan komma åt den inmatade anslutningssträngen genom att anropa metoden GetConnectionString och skicka anslutningsnamnet som parameter, i det här fallet "blobs"
. API:et GetConnectionString
är en förkortning för IConfiguration.GetSection("ConnectionStrings")[name]
.
Lägg till Azure Storage-emulatorresurs
Om du vill lägga till en Azure Storage-emulatorresurs kedjar du ett anrop på en IResourceBuilder<AzureStorageResource>
till RunAsEmulator-API:et:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage")
.RunAsEmulator();
// After adding all resources, run the app...
När du anropar RunAsEmulator
konfigureras dina lagringsresurser att köras lokalt med hjälp av en emulator. Emulatorn i det här fallet är Azurite. Azurite-emulatorn med öppen källkod ger en kostnadsfri lokal miljö för att testa dina Azure Blob-, Queue Storage- och Table Storage-appar och det är en perfekt följeslagare till .NET AspireAzure värdintegrering. Azurite är inte installerat, i stället är det tillgängligt för .NET.NET Aspire som en container. När du lägger till en container i appvärden, som du ser i föregående exempel med mcr.microsoft.com/azure-storage/azurite
avbildningen, skapas och startas containern när appvärden startar. Mer information finns i Livscykel för containerresurser.
Konfigurera Azurite-container
Det finns olika konfigurationer tillgängliga för containerresurser, till exempel kan du konfigurera containerns portar, miljövariabler, det är livslängdmed mera.
Konfigurera Azurite-containerportar
Som standard exponerar Azurite-containern när den konfigureras av .NET.NET Aspireföljande slutpunkter:
Slutpunkt | Containerhamn | Värdport |
---|---|---|
blob |
10 000 | dynamisk |
queue |
10001 | dynamisk |
table |
10002 | dynamisk |
Porten som de lyssnar på är dynamisk som standard. När containern startar mappas portarna till en slumpmässig port på värddatorn. För att konfigurera slutpunktsportarna kedjar du anrop på containerresursverktyget som tillhandahålls av metoden RunAsEmulator
enligt följande exempel:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithBlobPort("blob", 27000)
.WithQueuePort("queue", 27001)
.WithTablePort("table", 27002);
});
// After adding all resources, run the app...
Föregående kod konfigurerar Azurite-containerns befintliga blob
, queue
och table
slutpunkter för att lyssna på portar 27000
, 27001
respektive 27002
. Azurite-containerns portar mappas till värdportarna enligt följande tabell:
Slutpunktsnamn | Portmappning (container:host ) |
---|---|
blob |
10000:27000 |
queue |
10001:27001 |
table |
10002:27002 |
Konfigurera Azurite-container med beständig livslängd
Om du vill konfigurera Azurite-containern med en beständig livslängd anropar du metoden WithLifetime på Azurite-containerresursen och skickar ContainerLifetime.Persistent:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithLifetime(ContainerLifetime.Persistent);
});
// After adding all resources, run the app...
Mer information finns i containerresursens livslängd.
Konfigurera Azurite-container med datavolym
Om du vill lägga till en datavolym i Azure Storage-emulatorresursen anropar du metoden WithDataVolume på Azure Storage-emulatorresursen:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithDataVolume();
});
// After adding all resources, run the app...
Datavolymen används för att bevara Azurite-data utanför containerns livscykel. Datavolymen monteras på /data
-sökvägen i Azurite-containern och om name
inte anges, formateras namnet som .azurite/{resource name}
. Mer information om datavolymer och varför de föredras framför bind mountsfinns i Docker dokumentationen: Volymer.
Konfigurera Azurite-container med bindningspunkt för data
Om du vill lägga till en databindningsmontering till Azure Storage-emulatorresursen anropar du metoden WithDataBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithDataBindMount("../Azurite/Data");
});
// After adding all resources, run the app...
Viktig
Data bindningsmonteringar har begränsade funktioner jämfört med volymer, vilket ger bättre prestanda, portabilitet och säkerhet, vilket gör dem mer lämpliga för produktionsmiljöer. Bindningsmonteringar tillåter dock direkt åtkomst och ändring av filer i värdsystemet, perfekt för utveckling och testning där realtidsändringar behövs.
Databindningsmonteringar använder värddatorns filsystem för att bevara Azurite-data under containeromstarter. Databindningsmonteringen monteras på den ../Azurite/Data
sökvägen på värddatorn i förhållande till appvärdkatalogen (IDistributedApplicationBuilder.AppHostDirectory) i Azurite-containern. Mer information om databindningar finns i Docker dokumentation: bindmonteringar.
Ansluta till lagringsresurser
När .NET.NET Aspire appvärd körs kan lagringsresurserna nås av externa verktyg, till exempel Azure Storage Explorer. Om lagringsresursen körs lokalt med Azurite hämtas den automatiskt av Azure Storage Explorer.
Not
Azure Storage Explorer identifierar Azurite-lagringsresurser förutsatt att standardportarna används. Om du har konfigurerat Azurite-containern för att använda olika portarmåste du konfigurera Azure Storage Explorer för att ansluta till rätt portar.
Följ dessa steg för att ansluta till lagringsresursen från Azure Storage Explorer:
Kör .NET.NET Aspire värdprogrammet.
Öppna Azure Storage Explorer.
Visa fönstret Explorer.
Välj länken Uppdatera alla för att uppdatera listan över lagringskonton.
Expandera noden Emulator & Ansluten.
Expandera noden lagringskonton.
Du bör se ett lagringskonto med resursens namn som prefix:
Du kan utforska lagringskontot och dess innehåll med hjälp av Azure Storage Explorer. Mer information om hur du använder Azure Storage Explorer finns i Komma igång med Storage Explorer.
Lägga till Azure Blob Storage resurs
I ditt appvärdprojekt registrerar du Azure Blob Storage-integreringen genom att kedja ett anrop till AddBlobs på den IResourceBuilder<IAzureStorageResource>
-instans som returneras av AddAzureStorage. I följande exempel visas hur du lägger till en Azure Blob Storage resurs med namnet storage
och en blobcontainer med namnet blobs
:
var builder = DistributedApplication.CreateBuilder(args);
var blobs = builder.AddAzureStorage("storage")
.RunAsEmulator();
.AddBlobs("blobs");
builder.AddProject<Projects.ExampleProject>()
.WithReference(blobs)
.WaitFor(blobs);
// After adding all resources, run the app...
Föregående kod:
- Lägger till en Azure Storage-resurs med namnet
storage
. - Kedjar ett anrop till RunAsEmulator för att konfigurera lagringsresursen så att den körs lokalt med hjälp av en emulator. Emulatorn i det här fallet är Azurite.
- Lägger till en blobcontainer med namnet
blobs
till lagringsresursen. - Lägger till den
blobs
resursen iExampleProject
och väntar på att den ska vara klar innan projektet startas.
Genomföra hälsokontroller för systemintegration
Azure lagringsvärdintegrering lägger automatiskt till en hälsokontroll av lagringsresursen. Den läggs bara till när den körs som en emulator och verifierar att Azurite-containern körs och att en anslutning kan upprättas till den. Värdintegrering förlitar sig på 📦 AspNetCore.HealthChecks.Azure.Storage.Blobs NuGet-paket.
Client integrering
Kom igång med .NET AspireAzure Blob Storageclient-integreringen genom att installera 📦Aspire.Azure.Storage.Blobs NuGet-paket i det projektet som använder client, det vill säga projektet för den applikation som använder Azure Blob Storageclient. Azure Blob Storage client-integreringen registrerar en BlobServiceClient instans som du kan använda för att interagera med Azure Blob Storage.
dotnet add package Aspire.Azure.Storage.Blobs
Lägg till Azure Blob Storageclient
I Program.cs-filen för ditt client-förbrukande projekt ska du anropa AddAzureBlobClient-tilläggsmetoden på varje IHostApplicationBuilder för att registrera en BlobServiceClient
för användning via beroendeinjektionscontainern. Metoden tar en parameter för anslutningsnamn.
builder.AddAzureBlobClient("blobs");
Du kan sedan hämta BlobServiceClient
-instansen med hjälp av beroendeinjektion. Om du till exempel vill hämta client från en tjänst:
public class ExampleService(BlobServiceClient client)
{
// Use client...
}
Konfiguration
.NET Aspire
Azure Blob Storage-integreringen innehåller flera alternativ för att konfigurera BlobServiceClient
baserat på kraven och konventionerna i projektet.
Använda en anslutningssträng
När du använder en anslutningssträng från ConnectionStrings
konfigurationsavsnittet kan du ange namnet på anslutningssträngen när du anropar AddAzureBlobClient:
builder.AddAzureBlobClient("blobs");
Sedan hämtas anslutningssträngen från avsnittet ConnectionStrings
konfiguration och två anslutningsformat stöds:
Tjänst-URI
Den rekommenderade metoden är att använda en ServiceUri
, som fungerar med egenskapen AzureStorageBlobsSettings.Credential för att upprätta en anslutning. Om inga autentiseringsuppgifter har konfigurerats används Azure.Identity.DefaultAzureCredential.
{
"ConnectionStrings": {
"blobs": "https://{account_name}.blob.core.windows.net/"
}
}
Anslutningssträng
Du kan också använda en Azure Storage-anslutningssträng.
{
"ConnectionStrings": {
"blobs": "AccountName=myaccount;AccountKey=myaccountkey"
}
}
Mer information finns i Konfigurera Azure Storage-anslutningssträngar.
Använda konfigurationsprovidrar
.NET Aspire
Azure Blob Storage-integreringen stöder Microsoft.Extensions.Configuration. Den läser in AzureStorageBlobsSettings och BlobClientOptions från konfigurationen med hjälp av Aspire:Azure:Storage:Blobs
-nyckeln. Följande kodfragment är ett exempel på en appsettings.json fil som konfigurerar några av alternativen:
{
"Aspire": {
"Azure": {
"Storage": {
"Blobs": {
"DisableHealthChecks": true,
"DisableTracing": false,
"ClientOptions": {
"Diagnostics": {
"ApplicationId": "myapp"
}
}
}
}
}
}
}
Det fullständiga Azure Blob Storageclient integrationsschemat JSON finns i Aspire.Azure. Storage.Blobs/ConfigurationSchema.json.
Använd inline-delegater
Du kan också överföra Action<AzureStorageBlobsSettings> configureSettings
delegat för att ställa in vissa eller alla alternativ direkt, till exempel för att konfigurera hälsokontroller.
builder.AddAzureBlobClient(
"blobs",
settings => settings.DisableHealthChecks = true);
Du kan också konfigurera BlobClientOptions med Action<IAzureClientBuilder<BlobServiceClient, BlobClientOptions>> configureClientBuilder
delegerare, den andra parametern för metoden AddAzureBlobClient
. Om du till exempel vill ställa in den första delen av användaragenthuvuden för alla begäran som skickas av den här client:
builder.AddAzureBlobClient(
"blobs",
configureClientBuilder: clientBuilder =>
clientBuilder.ConfigureOptions(
options => options.Diagnostics.ApplicationId = "myapp"));
Client hälsokontroller för integrering
Som standard aktiverar .NET.NET Aspire integreringar hälsokontroller för alla tjänster. Mer information finns i översikten över .NET.NET Aspire integreringar.
Integreringen av .NET AspireAzure Blob Storage:
- Lägger till hälsokontrollen när AzureStorageBlobsSettings.DisableHealthChecks är
false
, vilket försöker ansluta till Azure Blob Storage. - Integrerar med
/health
HTTP-slutpunkt, som anger att alla registrerade hälsokontroller måste godkännas för att appen ska anses vara redo att acceptera trafik.
Observerbarhet och telemetri
.NET .NET Aspire integreringar konfigurerar automatiskt konfigurationer för loggning, spårning och mått, som ibland kallas grundpelarna för observerbarhet. Mer information om integreringsobservabilitet och telemetri finns i översikten över .NET.NET Aspire integreringar. Beroende på säkerhetskopieringstjänsten kanske vissa integreringar bara stöder vissa av dessa funktioner. Vissa integreringar stöder till exempel loggning och spårning, men inte mått. Telemetrifunktioner kan också inaktiveras med hjälp av de tekniker som visas i avsnittet Configuration.
Skogsavverkning
.NET Aspire Azure Blob Storage-integreringen använder följande loggkategorier:
Azure.Core
Azure.Identity
Spårning
.NET Aspire Azure Blob Storage-integreringen genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:
Azure.Storage.Blobs.BlobContainerClient
Metrik
Den .NET AspireAzure Blob Storage integreringen stöder för närvarande inte mått som standard på grund av begränsningar med Azure SDK.
Se även
.NET Aspire