Dela via


.NET Aspire Azure datatabellintegrering

omfattar:Som värd för integrering och Client integration

Azure Table Storage är en tjänst för lagring av strukturerade NoSQL-data. Med integreringen .NET AspireAzure datatabeller kan du ansluta till befintliga Azure Table Storage instanser eller skapa nya instanser från .NET program.

Värdintegrering

.NET .NET Aspire Azure-lagring modellerar integreringen av de olika lagringsresurserna som följande typer:

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

dotnet add package Aspire.Hosting.Azure.Storage

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

Lägg till Azure Storage-resurs

I ditt appvärdprojekt anropar du AddAzureStorage för att lägga till och returnera 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 till appvärden 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 tillhandahållande: Konfiguration.

Genererad provisionering av Bicep

Om du är ny till Bicepär det ett domänspecifikt språk för att definiera Azure resurser. 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 genereras den genererade Bicep 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 ä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 etablerar det även en blobcontainer.

Följande rolltilldelningar läggs till i lagringskontot för att ge ditt program åtkomst. Mer information finns i inbyggda Azure rollbaserade åtkomstkontrollroller (Azure RBAC):

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

Den genererade Bicep-mallen ä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 anpassning av den genererade Bicep genom att erbjuda ett flytande API för att konfigurera Azure-resurser 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.

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

Obs

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

Lägg till Azure Lagrings-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 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 .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 apptjänsten, som visas i föregående exempel med mcr.microsoft.com/azure-storage/azurite-bilden, kommer containern att skapas och startas när apptjänsten 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 10000 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, 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...

För mer information, se 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å den /data sökvägen i Azurite-containern och när en name parameter inte anges formateras namnet som .azurite/{resource name}. För mer information om datavolymer och varför de föredras framför bind-mounts, se Docker dokumentation: Volymer.

Konfigurera Azurite-container med databindningspunkt

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 förlitar sig på värddatorns filsystem för att bevara Azurite-data mellan omstarter av containrar. 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 datamonteringar 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.

Obs

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:

  1. Kör .NET.NET Aspire apphost.

  2. Öppna Azure Storage Explorer.

  3. Visa fönstret Explorer.

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

  5. Expandera den anslutna noden Emulator &.

  6. Expandera noden Storage Accounts.

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

    Azure Storage Explorer: Azurite-lagringsresurs identifierad.

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 Table Storage resurs

I värdprojektet för app registrerar du Azure Table Storage-integreringen genom att kedja ett anrop till AddTables på den IResourceBuilder<IAzureStorageResource>-instans som returneras av AddAzureStorage. I följande exempel visas hur du lägger till en Azure Table Storage resurs med namnet storage och en tabellresurs med namnet tables:

var builder = DistributedApplication.CreateBuilder(args);

var tables = builder.AddAzureStorage("storage")
                    .AddTables("tables");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(tables)
       .WaitFor(tables);

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

Föregående kod:

  • Lägger till en Azure Storage-resurs med namnet storage.
  • Lägger till en tabelllagringsresurs med namnet tables till lagringsresursen.
  • Lägger till den storage resursen i ExampleProject och väntar på att den ska vara klar innan projektet startas.

Genomför hälsokontroller för integration

Azure Storage-värdintegrering lägger automatiskt till en hälsokontroll för 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

Om du vill komma igång med .NET AspireAzure Data Tables client integration installerar du 📦Aspire.Azure.Data.Tables NuGet-paketet i det client-användande projektet, d.v.s. projektet för programmet som använder Azure Data Tables client. Integreringen Azure datatabeller client registrerar en TableServiceClient instans som du kan använda för att interagera med Azure Table Storage.

dotnet add package Aspire.Azure.Data.Tables

Lägg till Azure Table Storageclient

I den Program.cs-filen för ditt client-förbrukande projekt anropar du metoden för AddAzureTableClient-tillägg på alla IHostApplicationBuilder för att registrera en TableServiceClient för användning via containern för beroendeinjektion. Metoden tar en parameter för anslutningsnamn.

builder.AddAzureTableClient("tables");

Du kan sedan hämta TableServiceClient-instansen med hjälp av beroendeinjektion. Om du till exempel vill hämta client från en tjänst:

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

Konfiguration

.NET Aspire Azure Table Storage-integreringen innehåller flera alternativ för att konfigurera TableServiceClient baserat på kraven och konventionerna i projektet.

Använda konfigurationsprovidrar

.NET Aspire- ochAzure Table Storage-integrationen stöder Microsoft.Extensions.Configuration. Den läser in AzureDataTablesSettings och TableClientOptions från konfigurationen med hjälp av Aspire:Azure:Data:Tables-nyckeln. Följande kodfragment är ett exempel på en appsettings.json fil som konfigurerar några av alternativen:

{
  "Aspire": {
    "Azure": {
      "Data": {
        "Tables": {
          "ServiceUri": "YOUR_URI",
          "DisableHealthChecks": true,
          "DisableTracing": false,
          "ClientOptions": {
            "EnableTenantDiscovery": true
          }
        }
      }
    }
  }
}

Det fullständiga Azure datatabeller clientJSON schema finns i Aspire.Azure. Data.Tables/ConfigurationSchema.json.

Använd inline-delegater

Du kan också ange Action<AzureDataTablesSettings> configureSettings-delegering för att konfigurera vissa eller alla alternativ direkt, till exempel för att konfigurera ServiceUri:

builder.AddAzureTableClient(
    "tables",
    settings => settings.DisableHealthChecks = true);

Du kan också konfigurera TableClientOptions med hjälp av Action<IAzureClientBuilder<TableServiceClient, TableClientOptions>> configureClientBuilder delegat, den andra parametern för metoden AddAzureTableClient. Om du till exempel vill ange TableServiceClient ID för att identifiera client:

builder.AddAzureTableClient(
    "tables",
    configureClientBuilder: clientBuilder =>
        clientBuilder.ConfigureOptions(
            options => options.EnableTenantDiscovery = true));

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.

Integrering av .NET AspireAzure datatabeller:

  • Lägger till en hälsokontroll när AzureDataTablesSettings.DisableHealthChecks är falseoch försöker ansluta till Azure Table Storage.
  • Integrerar med /health HTTP-slutpunkt, som anger att alla registrerade hälsokontroller måste klaras för att applikationen 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

Integreringen .NET AspireAzure datatabeller använder följande loggkategorier:

  • Azure.Core
  • Azure.Identity

Spårning

Integreringen .NET AspireAzure datatabeller genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:

  • Azure.Data.Tables.TableServiceClient

Mått

Integreringen av .NET AspireAzure datatabeller stöder för närvarande inte mått som standard på grund av begränsningar med Azure SDK.

Se även