Dela via


Aspire Azure Blob Storage integrering

Inkluderar:Värdintegrering ingår Värdintegrering &–& integrering ingår integration

Azure Blob Storage är en tjänst för lagring av stora mängder ostrukturerade data. Med AspireAzure Blob Storage integrering kan du ansluta till befintliga Azure Blob Storage-instanser eller skapa nya instanser från .NET program.

Integrering av värdtjänster

Lagringshostningsintegration AspireAzure modellerar olika lagringsresurser som följande typer:

Om du vill få åtkomst till dessa typer och API:er lägger du till 📦Aspire.Hosting.Azure.Storage NuGet-paketet i AppHost-projektet.

dotnet add package Aspire.Hosting.Azure.Storage

Mer information finns i dotnet add package eller Hantera paketberoenden i .NET program.

Lägg till Azure Lagringsresurs

I ditt AppHost-projekt anropar du AddAzureStorage för att lägga till och få tillbaka en Azure lagringsresursbyggare.

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 i AppHost exponeras andra användbara API:er för att lägga Azure till 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.

Important

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 etablering: Konfiguration.

Ansluta till ett befintligt Azure Storage-konto

Du kan ha ett befintligt Azure Lagringskonto som du vill ansluta till. Du kan kedja en anropning för att annotera att din AzureStorageResource är en befintlig resurs:

var builder = DistributedApplication.CreateBuilder(args);

var existingStorageName = builder.AddParameter("existingStorageName");
var existingStorageResourceGroup = builder.AddParameter("existingStorageResourceGroup");

var storageaccount = builder.AddAzureStorage("storage")
                    .AsExisting(existingStorageName, existingStorageResourceGroup)
                    .AddBlobs("blobs");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(storageaccount);

// After adding all resources, run the app...

Important

När du anropar RunAsExisting, PublishAsExistingeller AsExisting metoder för att arbeta med resurser som redan finns i din Azure prenumeration, måste du lägga till vissa konfigurationsvärden i AppHost för att säkerställa att Aspire de kan hittas. De nödvändiga konfigurationsvärdena är SubscriptionId, AllowResourceGroupCreation, ResourceGroup och Location. Om du inte anger dem, visas "Konfiguration saknas"-fel på instrumentpanelen Aspire. Mer information om hur du anger dem finns i Konfiguration.

Mer information om hur du behandlar Azure lagringsresurser som befintliga resurser finns i Använda befintliga Azure resurser.

Note

Du kan också lägga till en anslutningssträng i AppHost i stället för att representera en Azure lagringskontoresurs. Den här metoden är svagt skriven och fungerar inte med rolltilldelningar eller infrastrukturanpassningar. För mer information, se Lägg till befintliga Azure resurser med anslutningssträngar.

Lägg till Azure lagringsemulator-resurs

Om du vill lägga till en Azure lagringsemulatorresurs gör du ett kedjeanrop 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 RunAsEmulatorkonfigureras 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 AspireAzure värdintegrering. Azurite är inte installerat, utan tillgängligt för Aspire som en container. När du lägger till en container i AppHost, som du ser i föregående exempel med avbildningen mcr.microsoft.com/azure-storage/azurite , skapas och startas containern när AppHost 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, dess livslängd och mycket mer.

Konfigurera Azurite-containerportar

Som standard exponerar Azurite-containern när den konfigureras av Aspireföljande slutpunkter:

Endpoint Containerhamn Anslutningsport
blob 10000 dynamic
queue 10001 dynamic
table 10002 dynamic

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(27000)
                                .WithQueuePort(27001)
                                .WithTablePort(27002);
                     });

// After adding all resources, run the app...

Föregående kod konfigurerar Azurite-containerns befintliga blob, queueoch table slutpunkter för att lyssna på portar 27000, 27001respektive 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 Livslängd för containerresurser.

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 när en name-parameter inte anges, formateras namnet som .azurite/{resource name}. Mer information om datavolymer och information om varför de föredras framför bindningsmonteringar finns i Docker dokument: 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...

Important

Data bind mounts har begränsade funktioner jämfört med volymer, som erbjuder 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. Databindningsfästet ../Azurite/Data monteras på stigen på värddatorn, relativt till AppHost-katalogen (IDistributedApplicationBuilder.AppHostDirectory) i Azurite-containern. Mer information om databindningsmonteringar finns i Docker dokumentation: bindningsmonteringar.

Ansluta till lagringsresurser

Aspire När AppHost 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.

Note

Azure Storage Explorer identifierar Azurite-lagringsresurser förutsatt att standardportarna används. Om du har konfigurerat Azurite-containern för att använda olika portar må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:

  1. Aspire Kör den AppHost.

  2. Öppna Azure Storage Explorer.

  3. Visa fönstret Utforskaren .

  4. Välj länken Uppdatera alla för att uppdatera listan över lagringskonton.

  5. Utvidga Emulator & Ansluten noden.

  6. Expandera noden Lagringskonton.

  7. Du bör se ett lagringskonto med resursens namn som prefix:

    Azure Lagringsutforskaren: Azurite-lagringsresursen har identifierats.

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 AppHost-projekt 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 i ExampleProject och väntar på att den ska vara klar innan projektet startas.

Konfigurationsgenererad Bicep

Om du inte har använt Bicep tidigare är det ett domänspecifikt språk för att Azure definiera resurser. Med 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 är den genererade Bicep tillgänglig tillsammans med manifestfilen. När du lägger till en Azure lagringsresurs genereras följande Bicep:

@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location

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'
  }
}

output blobEndpoint string = storage.properties.primaryEndpoints.blob

output queueEndpoint string = storage.properties.primaryEndpoints.queue

output tableEndpoint string = storage.properties.primaryEndpoints.table

output name string = storage.name

Föregående Bicep är en modul som etablerar ett Azure Storage-konto med följande standardvärden:

  • kind: Typen av lagringskonto. Standardvärdet är StorageV2.
  • sku: SKU:n för lagringskontot. Standardvärdet är Standard_GRS.
  • properties: Egenskaperna för lagringskontot:
    • accessTier: Åtkomstnivån för lagringskontot. Standardvärdet är Hot.
    • allowSharedKeyAccess: Ett booleskt värde som anger om lagringskontot tillåter att begäranden auktoriseras med kontoåtkomstnyckeln. Standardvärdet är false.
    • minimumTlsVersion: Den lägsta TLS-version som stöds för lagringskontot. Standardvärdet är TLS1_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 de inbyggda rollerna för Azure rollbaserad åtkomstkontroll (Azure RBAC):

Roll/ID Description
Storage Blob Data-deltagare
ba92f5b4-2d11-453d-a403-e96b0029c9fe
Läsa, skriva och ta bort Azure Lagringscontainrar och blobar.
Lagringsborddatadeltagare
0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3
Läsa, skriva och ta bort Azure Lagringstabeller och entiteter.
Lagringsködatabidragare
974c5e8b-45b9-4653-ba55-5f855dd0fb88
Läsa, skriva och ta bort Azure Lagringsköer och kömeddelanden.

Dessutom skapas rolltilldelningar för resursen Azure i en separat modul:

@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location

param storage_outputs_name string

param principalType string

param principalId string

resource storage 'Microsoft.Storage/storageAccounts@2024-01-01' existing = {
  name: storage_outputs_name
}

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
}

Den genererade Bicep är en startpunkt och påverkas av ändringar i tillhandahållandeinfrastrukturen i C#. Anpassningar till Bicep-filen skrivs över direkt, så gör ändringar via C#-etablerings-API:erna för att säkerställa att de återspeglas i de genererade filerna.

Anpassa försörjningsinfrastruktur

Alla 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, propertiesoch 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:

Det finns många fler konfigurationsalternativ för att anpassa Azure Storage-resursen. Mer information finns i Azure.Provisioning.Storage.

Lägg till Azure lagringsemulator-resurs

Om du vill lägga till en Azure lagringsemulatorresurs gör du ett kedjeanrop 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 RunAsEmulatorkonfigureras 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 AspireAzure värdintegrering. Azurite är inte installerat. I stället är den tillgänglig som Aspire en container. När du lägger till en container i AppHost, som du ser i föregående exempel med avbildningen mcr.microsoft.com/azure-storage/azurite , skapas och startas containern när AppHost 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, livslängd med mera.

Konfigurera Azurite-containerportar

Som standard exponerar Azurite-containern, när den konfigureras av Aspire, följande slutpunkter:

Endpoint Containerhamn Anslutningsport
blob 10000 dynamic
queue 10001 dynamic
table 10002 dynamic

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(27000)
                                .WithQueuePort(27001)
                                .WithTablePort(27002);
                     });

// After adding all resources, run the app...

Föregående kod konfigurerar Azurite-containerns befintliga blob, queueoch table slutpunkter för att lyssna på portar 27000, 27001respektive 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 Livslängd för containerresurser.

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 när en name-parameter inte anges, formateras namnet som .azurite/{resource name}. Mer information om datavolymer och information om varför de föredras framför bindningsmonteringar finns i Docker dokument: 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...

Important

Data bind mounts har begränsade funktioner jämfört med volymer, som erbjuder 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. Databindningsfästet ../Azurite/Data monteras på stigen på värddatorn, relativt till AppHost-katalogen (IDistributedApplicationBuilder.AppHostDirectory) i Azurite-containern. Mer information om databindningsmonteringar finns i Docker dokumentation: bindningsmonteringar.

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 Lagringsresurs kan du lägga till en anslutningssträng i AppHost. 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...

Note

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 Aspire nomenklaturen används termen "anslutningssträng" för att representera alla typer av anslutningsinformation.

Anslutningssträngen konfigureras i AppHost-konfigurationen, vanligtvis under Användarhemligheter, under avsnittet ConnectionStrings . AppHost matar in den här anslutningssträngen som en miljövariabel i alla beroende resurser, 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].

Ansluta till lagringsresurser

Aspire När AppHost 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.

Note

Azure Storage Explorer identifierar Azurite-lagringsresurser förutsatt att standardportarna används. Om du har konfigurerat Azurite-containern för att använda olika portar må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:

  1. Aspire Kör AppHost.

  2. Öppna Azure Storage Explorer.

  3. Visa fönstret Utforskaren .

  4. Välj länken Uppdatera alla för att uppdatera listan över lagringskonton.

  5. Utvidga Emulator & Ansluten noden.

  6. Expandera noden Lagringskonton.

  7. Du bör se ett lagringskonto med resursens namn som prefix:

    Azure Lagringsutforskaren: Azurite-lagringsresursen har identifierats.

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.

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ärdintegrationen är beroende av 📦 AspNetCore.HealthChecks.Azure.Storage.Blobs NuGet-paketet.

Client integrering

Kom igång med klientintegrering AspireAzure Blob Storage genom att 📦Aspireinstallera .Azure. Storage.Blobs NuGet-paketet i det klientkrävande projektet, dvs. projektet för det program som använder Azure Blob Storage klienten. Azure Blob Storage-klientintegrering 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 Storage klient

I den Program.cs filen för ditt klientanvändande projekt kan du anropa AddAzureBlobClient-tilläggsmetoden på valfri IHostApplicationBuilder för att registrera en BlobServiceClient för användning via containern för beroendeinjektion. Metoden tar en parameter för anslutningsnamn.

builder.AddAzureBlobClient("blobs");

Du kan sedan hämta BlobServiceClient-instansen genom beroendeinjektion. Om du till exempel vill hämta klienten från en tjänst:

public class ExampleService(BlobServiceClient client)
{
    // Use client...
}

Configuration

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 lagringsanslutningssträng .

{
  "ConnectionStrings": {
    "blobs": "AccountName=myaccount;AccountKey=myaccountkey"
  }
}

Mer information finns i Konfigurera Azure anslutningssträngar för lagring.

Använda konfigurationsprovidrar

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 Storage klientintegreringsschemat JSON finns i Aspire.Azure. Storage.Blobs/ConfigurationSchema.json.

Använda namngiven konfiguration

Integreringen AspireAzure Blob Storage stöder namngiven konfiguration, vilket gör att du kan konfigurera flera instanser av samma resurstyp med olika inställningar. Den namngivna konfigurationen använder anslutningsnamnet som en nyckel under huvudkonfigurationsavsnittet.

{
  "Aspire": {
    "Azure": {
      "Storage": {
        "Blobs": {
          "blob1": {
            "DisableHealthChecks": true,
            "ClientOptions": {
              "Diagnostics": {
                "ApplicationId": "myapp1"
              }
            }
          },
          "blob2": {
            "DisableTracing": true,
            "ClientOptions": {
              "Diagnostics": {
                "ApplicationId": "myapp2"
              }
            }
          }
        }
      }
    }
  }
}

I det här exemplet kan anslutningsnamnen blob1 och blob2 användas när du anropar AddAzureBlobClient:

builder.AddAzureBlobClient("blob1");
builder.AddAzureBlobClient("blob2");

Den namngivna konfigurationen har företräde framför konfigurationen på den översta nivån. Om båda anges åsidosätter inställningarna från den namngivna konfigurationen inställningarna på den översta nivån.

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 delegering, som är den andra parametern i metoden AddAzureBlobClient. Om du till exempel vill ställa in den första delen av användaragenthuvudena för alla begäranden som görs av den här klienten:

builder.AddAzureBlobClient(
    "blobs",
    configureClientBuilder: clientBuilder =>
        clientBuilder.ConfigureOptions(
            options => options.Diagnostics.ApplicationId = "myapp"));

Client hälsokontroller för integrering

Integreringar aktiverar som standard Aspirehälsokontroller för alla tjänster. Mer information finns i Aspire översikten över integreringar.

Integreringen av 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 klaras för att appen ska anses vara redo att acceptera trafik.

Observerbarhet och telemetri

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 Aspire översikten över 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 Konfiguration .

Logging

Aspire Azure Blob Storage-integreringen använder följande loggkategorier:

  • Azure.Core
  • Azure.Identity

Tracing

Aspire Azure Blob Storage-integreringen genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:

  • Azure.Storage.Blobs.BlobContainerClient

Metrics

Den 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