.NET Aspire Azure Blob Storage integracja
obejmuje: integrację,,, integrację hostingu oraz ,,Client,
Azure Blob Storage to usługa do przechowywania dużych ilości danych bez struktury. Integracja .NET AspireAzure Blob Storage umożliwia łączenie się z istniejącymi wystąpieniami Azure Blob Storage lub tworzenie nowych wystąpień z aplikacji .NET.
Integracja hostingu
.NET .NET Aspire Azure modele integracji hostingu modelują różne zasoby pamięci jako następujące typy:
- AzureStorageResource: reprezentuje zasób usługi Azure Storage.
- AzureStorageEmulatorResource: reprezentuje zasób emulatora usługi Azure Storage (Azurite).
- AzureBlobStorageResource: reprezentuje zasób usługi Blob Storage Azure.
- AzureQueueStorageResource: reprezentuje zasób usługi Azure Queue Storage.
- AzureTableStorageResource: reprezentuje zasób usługi Table Storage Azure.
Aby uzyskać dostęp do tych typów i interfejsów API do ich wyrażania, dodaj pakiet NuGet 📦Aspire.Hosting.Azure.Storage w projekcie hosta aplikacji .
dotnet add package Aspire.Hosting.Azure.Storage
Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzaj zależnościami pakietów w .NET aplikacjach.
Dodaj zasób pamięci Azure
W projekcie hosta aplikacji wywołaj AddAzureStorage, aby dodać i zwrócić budowniczego zasobów pamięci Azure.
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...
Po dodaniu AzureStorageResource
do hosta aplikacji uwidacznia inne przydatne interfejsy API do dodawania Azure zasobów obiektów blob, kolejek i usługi Table Storage. Innymi słowy, należy dodać AzureStorageResource
przed dodaniem dowolnego innego zasobu pamięci masowej.
Ważny
Podczas wywoływania AddAzureStorageniejawnie uruchamia się AddAzureProvisioning, które umożliwia dynamiczne generowanie zasobów Azure podczas startu aplikacji. Aplikacja musi skonfigurować odpowiednią subskrypcję i lokalizację. Aby uzyskać więcej informacji, zobacz Lokalne przygotowanie: Konfiguracja.
Wygenerowane udostępnienie Bicep
Jeśli dopiero zaczynasz korzystać z Bicep, to język domenowy służący do definiowania zasobów Azure. W przypadku .NET.NET Aspirenie musisz pisać Bicep ręcznie, ponieważ interfejsy API aprowizacji tworzą Bicep za Ciebie. Podczas publikowania aplikacji wygenerowany Bicep jest wyświetlany wraz z plikiem manifestu. Po dodaniu zasobu Azure Storage generowany jest następujący kod Bicep:
przełącz 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
Powyższy Bicep to moduł, który konfiguruje konto-usługi Azure Storage z następującymi ustawieniami domyślnymi:
-
kind
: rodzaj konta magazynowania. Wartość domyślna toStorageV2
. -
sku
: SKU (jednostka magazynowa) konta magazynu. Wartość domyślna toStandard_GRS
. -
properties
: właściwości konta magazynowego:-
accessTier
: warstwa dostępu konta magazynu. Wartość domyślna toHot
. -
allowSharedKeyAccess
: wartość logiczna wskazująca, czy konto magazynowe zezwala na autoryzację żądań przy użyciu klucza dostępu do konta. Wartość domyślna tofalse
. -
minimumTlsVersion
: minimalna obsługiwana wersja protokołu TLS dla konta magazynowego. Wartość domyślna toTLS1_2
. -
networkAcls
: Sieciowe listy kontroli dostępu (ACL) dla konta magazynowego. Wartość domyślna to{ defaultAction: 'Allow' }
.
-
Oprócz konta magazynowego, tworzy również kontener obiektów blob.
Następujące przypisania uprawnień są dodawane do konta przechowywania, aby zapewnić Twojej aplikacji dostęp. Aby uzyskać więcej informacji, zobacz wbudowane role Azure kontroli dostępu opartej na rolach (Azure RBAC).
Rola/identyfikator | Opis |
---|---|
Współtwórca danych Blob Storageba92f5b4-2d11-453d-a403-e96b0029c9fe |
Odczytywanie, zapisywanie i usuwanie kontenerów i obiektów blob usługi Storage Azure. |
Kontrybutor danych tabeli Storage0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3 |
Odczytywanie, zapisywanie i usuwanie tabel i jednostek usługi Storage Azure. |
Współautor danych kolejki Storage974c5e8b-45b9-4653-ba55-5f855dd0fb88 |
Odczytywanie, zapisywanie i usuwanie kolejek oraz wiadomości w usłudze Storage Azure. |
Wygenerowany Bicep jest punktem wyjścia i można go dostosować, aby zaspokoić określone wymagania.
Dostosowywanie infrastruktury aprowizacji
Wszystkie zasoby .NET AspireAzure to podklasy typu AzureProvisioningResource. Ten typ umożliwia dostosowanie wygenerowanego kodu Bicep poprzez zapewnienie elastycznego interfejsu API do konfigurowania zasobów Azure przy użyciu interfejsu API ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>). Można na przykład skonfigurować kind
, sku
, properties
i inne. W poniższym przykładzie pokazano, jak dostosować zasób Azure Storage:
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");
});
Powyższy kod:
- Łańcuch wywołania interfejsu API ConfigureInfrastructure:
- Parametr
infra
jest wystąpieniem typu AzureResourceInfrastructure. - Zasoby możliwe do aprowizacji są pobierane przez wywołanie metody GetProvisionableResources().
- Pobierana jest pojedyncza StorageAccount.
- StorageAccount.AccessTier jest przypisywana do StorageAccountAccessTier.Cool.
-
StorageAccount.Sku jest przypisany do nowego StorageSku z
Name
PremiumZrs. - Do konta magazynu dodawany jest tag o kluczu
ExampleKey
i wartościExample value
.
- Parametr
Dostępnych jest wiele innych opcji konfiguracji umożliwiających dostosowanie zasobu usługi Azure Storage. Aby uzyskać więcej informacji, zobacz Azure.Provisioning.Storage.
Nawiązywanie połączenia z istniejącym kontem usługi Azure Storage
Być może masz istniejące konto usługi Azure Storage, z którym chcesz nawiązać połączenie. Zamiast reprezentować nowy zasób usługi Azure Storage, możesz dodać ciąg połączenia do hosta aplikacji. Aby dodać połączenie z istniejącym kontem usługi Azure Storage, wywołaj metodę 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...
Notatka
Parametry połączenia służą do reprezentowania szerokiego zakresu informacji o połączeniu, w tym połączeń z bazą danych, brokerów komunikatów, identyfikatorów URI punktów końcowych i innych usług. W .NET.NET Aspire nomenklaturze termin "parametry połączenia" służy do reprezentowania wszelkich informacji o połączeniu.
Parametry połączenia są konfigurowane w konfiguracji hosta aplikacji, zazwyczaj pod Sekrety użytkownika, w sekcji ConnectionStrings
. Host aplikacji wprowadza te parametry połączenia jako zmienną środowiskową do wszystkich zasobów zależnych, na przykład:
{
"ConnectionStrings": {
"blobs": "https://{account_name}.blob.core.windows.net/"
}
}
Zasób zależny może uzyskać dostęp do wstrzykiwanych parametrów połączenia, wywołując metodę GetConnectionString i przekazując nazwę połączenia jako parametr, w tym przypadku "blobs"
. Interfejs API GetConnectionString
jest skrótem dla IConfiguration.GetSection("ConnectionStrings")[name]
.
Dodawanie zasobu emulatora usługi Azure Storage
Aby dodać zasób emulatora usługi Azure Storage, połącz wywołanie IResourceBuilder<AzureStorageResource>
z interfejsem API RunAsEmulator:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage")
.RunAsEmulator();
// After adding all resources, run the app...
Gdy wywołujesz RunAsEmulator
, konfiguruje to zasoby magazynu do lokalnego uruchamiania przy użyciu emulatora. Emulator w tym przypadku jest Azurite. Emulator open-source usługi Azurite udostępnia bezpłatne środowisko lokalne do testowania Azure aplikacji Blob, Queue Storage i Table Storage oraz jest doskonałym towarzyszem integracji .NET AspireAzure hostingu. Azurite nie jest zainstalowana; zamiast tego, jest dostępna dla .NET.NET Aspire jako kontener. Po dodaniu kontenera do hosta aplikacji, jak pokazano w poprzednim przykładzie z obrazem mcr.microsoft.com/azure-storage/azurite
, tworzy i uruchamia kontener po uruchomieniu hosta aplikacji. Aby uzyskać więcej informacji, zobacz Cykl życia zasobów kontenera.
Konfigurowanie kontenera Azurite
Istnieją różne konfiguracje dostępne dla zasobów kontenera, na przykład można skonfigurować porty kontenera, zmienne środowiskowe, czas życiai nie tylko.
Konfiguracja portów kontenera Azurite
Domyślnie kontener Azurite skonfigurowany przez .NET.NET Aspireuwidacznia następujące punkty końcowe:
Punkt końcowy | Port kontenerowy | Port hosta |
---|---|---|
blob |
10 000 | dynamiczny |
queue |
10001 | dynamiczny |
table |
10002 | dynamiczny |
Port, na którym nasłuchują, jest dynamiczny domyślnie. Po uruchomieniu kontenera porty są mapowane na losowy port na maszynie hosta. Aby skonfigurować porty punktu końcowego, łańcuch wywołań konstruktora zasobów kontenera dostarczonych przez metodę RunAsEmulator
, jak pokazano w poniższym przykładzie:
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...
Powyższy kod konfiguruje istniejące punkty końcowe kontenera Azurite o identyfikatorach blob
, queue
i table
do nasłuchiwania na portach 27000
, 27001
i 27002
odpowiednio. Porty kontenera Azurite są mapowane na porty hosta, jak pokazano w poniższej tabeli:
Nazwa punktu końcowego | Mapowanie portów (container:host ) |
---|---|
blob |
10000:27000 |
queue |
10001:27001 |
table |
10002:27002 |
Konfigurowanie kontenera Azurite z trwałym okresem istnienia
Aby skonfigurować kontener Azurite z trwałym okresem istnienia, wywołaj metodę WithLifetime w zasobie kontenera Azurite i przekaż 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...
Aby uzyskać więcej informacji, zobacz okres istnienia zasobu kontenera.
Konfigurowanie kontenera Azurite za pomocą woluminu danych
Aby dodać wolumin danych do zasobu emulatora usługi Azure Storage, wywołaj metodę WithDataVolume w zasobie emulatora usługi Azure Storage:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithDataVolume();
});
// After adding all resources, run the app...
Wolumen danych jest używany do przechowywania danych Azurite poza cyklem życia kontenera. Wolumin danych jest instalowany w ścieżce /data
w kontenerze Azurite, a gdy nie podano parametru name
, nazwa jest sformatowana jako .azurite/{resource name}
. Aby uzyskać więcej informacji na temat woluminów danych i szczegółów na temat tego, dlaczego są preferowane względem wiązań montowania , zobacz Docker dokumentacji: Woluminy.
Konfigurowanie kontenera Azurite z powiązanym montowaniem danych
Aby dodać instalację powiązania danych do zasobu emulatora usługi Azure Storage, wywołaj metodę WithDataBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithDataBindMount("../Azurite/Data");
});
// After adding all resources, run the app...
Ważny
Instalacje powiązane danych mają ograniczoną funkcjonalność w porównaniu z woluminami , co zapewnia lepszą wydajność, przenośność i bezpieczeństwo, co czyni je bardziej odpowiednimi dla środowisk produkcyjnych. Jednak montowania wiążące umożliwiają bezpośredni dostęp i modyfikację plików w systemie hosta, co jest idealnym rozwiązaniem dla rozwoju i testowania, gdzie konieczne są zmiany w czasie rzeczywistym.
Powiązania danych bazują na systemie plików maszyny hosta, aby zachować dane Azurite pomiędzy ponownymi uruchomieniami kontenera. Powiązanie danych jest zamontowane w ścieżce ../Azurite/Data
na maszynie hosta względem katalogu hosta aplikacji (IDistributedApplicationBuilder.AppHostDirectory) w kontenerze Azurite. Aby uzyskać więcej informacji na temat instalacji powiązań danych, zobacz Docker docs: Bind mounts.
Łączenie z zasobami pamięci masowej
Po uruchomieniu hosta aplikacji .NET.NET Aspire zasoby magazynu mogą być uzyskiwane za pomocą narzędzi zewnętrznych, takich jak Azure Storage Explorer. Jeśli zasób magazynu jest uruchomiony lokalnie przy użyciu Azurite, zostanie on automatycznie wykryty przez Azure Storage Explorer.
Notatka
Eksplorator Azure Storage odnajduje zasoby magazynu Azurite, zakładając użycie portów domyślnych. Jeśli skonfigurowano kontener Azurite do używania różnych portów, należy skonfigurować eksploratora usługi Azure Storage, aby nawiązać połączenie z odpowiednimi portami.
Aby nawiązać połączenie z zasobem magazynu z poziomu eksploratora usługi Azure Storage, wykonaj następujące kroki:
Uruchom hosta aplikacji .NET.NET Aspire.
Otwórz Eksploratora usługi Azure Storage.
Wyświetl okienko Eksploratora
. Wybierz link Odśwież wszystkie, aby odświeżyć listę kont magazynowych.
Rozwiń węzeł Emulator & Dołączony.
Rozwiń węzeł Konta przechowywania.
Powinieneś zobaczyć konto przechowywania z nazwą zasobu jako prefiks:
Możesz swobodnie eksplorować konto magazynu i jego zawartość, używając programu Eksplorator usługi Azure Storage. Aby uzyskać więcej informacji na temat korzystania z Eksploratora usługi Azure Storage, zobacz Wprowadzenie do Eksploratora usługi Storage.
Dodawanie zasobu Azure Blob Storage
W projekcie hosta Twojej aplikacji zarejestruj integrację Azure Blob Storage, łącząc wywołanie AddBlobs z wystąpieniem IResourceBuilder<IAzureStorageResource>
zwróconym przez AddAzureStorage. W poniższym przykładzie pokazano, jak dodać zasób Azure Blob Storage o nazwie storage
i kontener obiektów BLOB o nazwie 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...
Powyższy kod:
- Dodaje zasób przechowywania Azure o nazwie
storage
. - Łączy wywołanie RunAsEmulator, aby skonfigurować zasób pamięci masowej do działania lokalnie przy użyciu emulatora. Emulator w tym przypadku jest Azurite.
- Dodaje kontener blobów o nazwie
blobs
do zasobu pamięci masowej. - Dodaje zasób
blobs
doExampleProject
i czeka, aż będzie gotowy przed rozpoczęciem projektu.
Kontrola stanu integracji
Integracja hostingu usługi Azure Storage automatycznie dodaje kontrolę kondycji zasobu magazynu. Jest on dodawany tylko w przypadku uruchamiania jako emulator i sprawdza, czy kontener Azurite jest uruchomiony i że można nawiązać z nim połączenie. Integracja hostingu opiera się na 📦 AspNetCore.HealthChecks.Azure.Storage.Blobs pakiet NuGet.
Client integracja
Aby rozpocząć pracę z integracją .NET AspireAzure Blob Storageclient, zainstaluj pakiet NuGet 📦Aspire.Azure.Storage.Blobs w projekcie wykorzystującym client, czyli projekcie dla aplikacji używającej Azure Blob Storageclient. Integracja Azure Blob Storageclient rejestruje wystąpienie BlobServiceClient, którego można użyć do interakcji z Azure Blob Storage.
dotnet add package Aspire.Azure.Storage.Blobs
Dodaj Azure Blob Storageclient
W pliku Program.cs twojego projektu korzystającego z client, wywołaj metodę rozszerzenia AddAzureBlobClient na dowolnym IHostApplicationBuilder, aby zarejestrować BlobServiceClient
do użycia za pośrednictwem kontenera do wstrzykiwania zależności. Metoda przyjmuje parametr nazwy połączenia.
builder.AddAzureBlobClient("blobs");
Następnie można pobrać wystąpienie BlobServiceClient
za pomocą wstrzykiwania zależności. Przykładowo, aby pobrać client z usługi:
public class ExampleService(BlobServiceClient client)
{
// Use client...
}
Konfiguracja
Integracja .NET AspireAzure Blob Storage oferuje wiele opcji konfigurowania BlobServiceClient
na podstawie wymagań i konwencji projektu.
Używanie parametrów połączenia
W przypadku używania parametrów połączenia z sekcji konfiguracji ConnectionStrings
można podać nazwę parametrów połączenia podczas wywoływania AddAzureBlobClient:
builder.AddAzureBlobClient("blobs");
Następnie parametry połączenia są pobierane z sekcji konfiguracji ConnectionStrings
, a obsługiwane są dwa formaty połączenia:
Identyfikator URI usługi
Zalecaną metodą jest użycie ServiceUri
, która współpracuje z właściwością AzureStorageBlobsSettings.Credential w celu nawiązania połączenia. Jeśli nie skonfigurowano poświadczeń, zostanie użyta Azure.Identity.DefaultAzureCredential.
{
"ConnectionStrings": {
"blobs": "https://{account_name}.blob.core.windows.net/"
}
}
Ciąg połączenia
Alternatywnie można użyć ciągu połączenia Storage Azure.
{
"ConnectionStrings": {
"blobs": "AccountName=myaccount;AccountKey=myaccountkey"
}
}
Aby uzyskać więcej informacji, zobacz Configure Azure Storage connection strings.
Korzystanie z dostawców konfiguracji
Integracja .NET AspireAzure Blob Storage obsługuje Microsoft.Extensions.Configuration. Ładuje AzureStorageBlobsSettings i BlobClientOptions z konfiguracji przy użyciu klucza Aspire:Azure:Storage:Blobs
. Poniższy fragment kodu to przykład pliku appsettings.json, który konfiguruje niektóre opcje:
{
"Aspire": {
"Azure": {
"Storage": {
"Blobs": {
"DisableHealthChecks": true,
"DisableTracing": false,
"ClientOptions": {
"Diagnostics": {
"ApplicationId": "myapp"
}
}
}
}
}
}
}
Aby uzyskać pełny schemat integracji Azure Blob StorageclientJSON, zobacz Aspire.Azure. Storage.Blobs/ConfigurationSchema.json.
Używanie delegatów wbudowanych
Możesz również przekazać delegata Action<AzureStorageBlobsSettings> configureSettings
, aby skonfigurować niektóre lub wszystkie opcje wbudowane, na przykład w celu skonfigurowania kontroli kondycji:
builder.AddAzureBlobClient(
"blobs",
settings => settings.DisableHealthChecks = true);
Można również skonfigurować BlobClientOptions przy użyciu delegata Action<IAzureClientBuilder<BlobServiceClient, BlobClientOptions>> configureClientBuilder
, drugiego parametru metody AddAzureBlobClient
. Na przykład, aby ustawić pierwszą część nagłówków user-agent dla wszystkich żądań wysyłanych przez ten client:
builder.AddAzureBlobClient(
"blobs",
configureClientBuilder: clientBuilder =>
clientBuilder.ConfigureOptions(
options => options.Diagnostics.ApplicationId = "myapp"));
Client kontrola stanu integracji
Domyślnie .NET.NET Aspire integracje włączają testy zdrowia dla wszystkich usług. Aby uzyskać więcej informacji, zobacz omówienie integracji .NET.NET Aspire.
Integracja .NET AspireAzure Blob Storage:
- Dodaje sprawdzanie kondycji, gdy AzureStorageBlobsSettings.DisableHealthChecks jest
false
, co próbuje nawiązać połączenie z Azure Blob Storage. - Integruje się z punktem końcowym HTTP
/health
, który wymaga, aby wszystkie zarejestrowane kontrole sprawności były pomyślnie przeprowadzone, aby aplikacja została uznana za gotową do akceptowania ruchu.
Obserwowanie i telemetria
.NET
.NET Aspire integracje automatycznie konfigurują logowanie, śledzenie i metryki, które są czasami nazywane filarami obserwowalności. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz omówienie integracji .NET.NET Aspire. W zależności od usługi pomocniczej niektóre integracje mogą obsługiwać tylko niektóre z tych funkcji. Na przykład niektóre integracje obsługują rejestrowanie i śledzenie, ale nie metryki. Funkcje telemetrii można również wyłączyć przy użyciu technik przedstawionych w sekcji konfiguracji
Logowanie
Integracja .NET AspireAzure Blob Storage używa następujących kategorii dzienników:
Azure.Core
Azure.Identity
Śledzenie
Integracja .NET AspireAzure Blob Storage emituje następujące działania śledzenia przy użyciu OpenTelemetry:
Azure.Storage.Blobs.BlobContainerClient
Metryki
Integracja .NET AspireAzure Blob Storage obecnie nie obsługuje domyślnie metryk z powodu ograniczeń SDK zestawu Azure.