Delen via


Integratie van AspireAzure gegevenstabellen

Inclusief:Hostingintegratie inbegrepen —&— Client integratie inbegrepenClient integratie

Azure Table Storage is een service voor het opslaan van gestructureerde NoSQL-gegevens. Met de integratie van AspireAzure gegevenstabellen kunt u verbinding maken met bestaande Azure Table Storage exemplaren of nieuwe exemplaren maken vanuit .NET toepassingen.

Hostingintegratie

De AspireAzure opslag-hostingintegratie modelleert de verschillende opslagbronnen als de volgende typen:

Als u toegang wilt krijgen tot deze typen en API's om ze uit te drukken, voegt u de 📦Aspire. Hosting.Azure. Storage NuGet-pakket in het AppHost-project .

dotnet add package Aspire.Hosting.Azure.Storage

Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.

Azure Storage-resource toevoegen

Roep in uw AppHost-project AddAzureStorage aan om een Azure opbouwfunctie voor opslagresources toe te voegen en te retourneren.

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

Wanneer u een app AzureStorageResource toevoegt aan de AppHost, worden er andere nuttige API's weergegeven om blob-, wachtrij- en tableopslagresources toe te voegen Azure . Met andere woorden, u moet een AzureStorageResource toevoegen voordat u een van de andere opslagbronnen toevoegt.

Important

Wanneer u AddAzureStorageaanroept, wordt impliciet AddAzureProvisioningaangeroepen. Hiermee wordt ondersteuning toegevoegd voor het dynamisch genereren van Azure resources tijdens het opstarten van de app. De app moet het juiste abonnement en de juiste locatie configureren. Zie Lokale inrichting: Configuratievoor meer informatie.

Verbinding maken met een bestaand Azure Storage-account

Mogelijk hebt u een bestaand Azure Storage-account waarmee u verbinding wilt maken. U kunt een aanroep aaneenschakelen om aan te geven dat uw AzureStorageResource een bestaande resource is.

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

Wanneer u , RunAsExistingof methoden aanroept PublishAsExistingom te werken met resources die al aanwezig zijn in uw AsExisting abonnement, moet u bepaalde configuratiewaarden toevoegen aan uw AppHost om ervoor te zorgen dat Azure deze kunnen worden Aspire gevonden. De benodigde configuratiewaarden zijn SubscriptionId, AllowResourceGroupCreation, ResourceGroup en Location. Als u ze niet instelt, worden fouten met ontbrekende configuratie weergegeven in het Aspire dashboard. Zie Configuratie voor meer informatie over het instellen ervan.

Zie Azure voor meer informatie om opslagresources Azure als Azure te behandelen.

Note

U kunt ook een verbindingsreeks toevoegen aan de AppHost in plaats van een Azure opslagaccountresource weer te geven. Deze benadering is zwak getypt en werkt niet met roltoewijzingen of infrastructuuraanpassingen. Voor meer informatie, zie Bestaande Azure resources toevoegen met verbindingsreeksen.

Resource voor Azure Storage-emulator toevoegen

Als u een Azure Storage-emulatorresource wilt toevoegen, koppelt u een aanroep op een IResourceBuilder<AzureStorageResource> aan de RunAsEmulator-API:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage")
                     .RunAsEmulator();

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

Wanneer u RunAsEmulatoraanroept, worden uw opslagbronnen geconfigureerd voor lokaal uitvoeren met behulp van een emulator. De emulator in dit geval is Azurite. De opensource-emulator Van Azurite biedt een gratis lokale omgeving voor het testen van uw Azure Blob-, Queue Storage- en Table Storage-apps en het is een perfecte aanvulling op de AspireAzure hostingintegratie. Azurite is niet geïnstalleerd, in plaats daarvan is het toegankelijk voor Aspire als container. Wanneer u een container aan de AppHost toevoegt, zoals wordt weergegeven in het vorige voorbeeld met de mcr.microsoft.com/azure-storage/azurite installatiekopieën, wordt de container gemaakt en gestart wanneer de AppHost wordt gestart. Zie levenscyclus van containerresourcesvoor meer informatie.

Azurite-container configureren

Er zijn verschillende configuraties beschikbaar voor containerresources. U kunt bijvoorbeeld de poorten van de container, omgevingsvariabelen, de levensduuren meer configureren.

Azurite-containerpoorten configureren

Standaard stelt de Azurite-container, wanneer geconfigureerd door Aspire, de volgende eindpunten bloot:

Endpoint Containerpoort Host-poort
blob 10000 dynamic
queue 10001 dynamic
table 10002 dynamic

De poort waarop ze luisteren, is standaard dynamisch. Wanneer de container wordt gestart, worden de poorten toegewezen aan een willekeurige poort op de hostcomputer. Als u de eindpuntpoorten wilt configureren, rijg dan aanroepen van de containerresourcebouwer zoals geleverd door de RunAsEmulator-methode aaneen, zoals wordt weergegeven in het volgende voorbeeld:

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

De voorgaande code configureert de bestaande blob, queueen table eindpunten van de Azurite-container om respectievelijk te luisteren op poorten 27000, 27001en 27002. De poorten van de Azurite-container worden toegewezen aan de hostpoorten, zoals wordt weergegeven in de volgende tabel:

Eindpuntnaam Poorttoewijzing (container:host)
blob 10000:27000
queue 10001:27001
table 10002:27002
Azurite-container configureren met een permanente levensduur

Als u de Azurite-container met een permanente levensduur wilt configureren, roept u de methode WithLifetime op de Resource van de Azurite-container aan en geeft u ContainerLifetime.Persistentdoor:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(
                     azurite =>
                     {
                         azurite.WithLifetime(ContainerLifetime.Persistent);
                     });

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

Zie Levensduur van containerresourcesvoor meer informatie.

Azurite-container configureren met gegevensvolume

Als u een gegevensvolume wilt toevoegen aan de resource van de Azure Storage-emulator, roept u de WithDataVolume methode aan op de resource van de Azure Storage-emulator:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(
                     azurite =>
                     {
                         azurite.WithDataVolume();
                     });

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

Het gegevensvolume wordt gebruikt om de Azurite-gegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /data pad in de Azure-container en wanneer er geen name parameter wordt opgegeven, wordt de naam opgemaakt als .azurite/{resource name}. Voor meer informatie over gegevensvolumes en details over waarom ze de voorkeur hebben boven bind mounts, zie Docker docs: Volumes.

Azurite-container configureren met gegevenskoppeling

Als u een koppeling voor gegevensbinding wilt toevoegen aan de resource van de Azure Storage-emulator, roept u de WithDataBindMount methode aan:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(
                     azurite =>
                     {
                         azurite.WithDataBindMount("../Azurite/Data");
                     });

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

Important

Gegevenskoppelingen hebben beperkte functionaliteiten vergeleken metvolumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor productieomgevingen. Bind mounts bieden echter directe toegang tot en wijziging van bestanden op het hostsysteem, wat ideaal is voor ontwikkeling en testen waarbij wijzigingen in real-time nodig zijn.

Gegevenskoppelpunten vertrouwen op het bestandssysteem van de hostmachine om de Azurite-gegevens te behouden bij het opnieuw opstarten van de container. De koppeling van de gegevensbinding wordt gekoppeld aan het ../Azurite/Data pad op de hostcomputer ten opzichte van de AppHost-map (IDistributedApplicationBuilder.AppHostDirectory) in de Azure-container. Zie de Docker docs: Koppelingspunten voor meer informatie over koppelingspunten voor gegevens.

Verbinding maken met opslagbronnen

Wanneer de Aspire AppHost wordt uitgevoerd, kunnen de opslagbronnen worden geopend door externe hulpprogramma's, zoals StorageAzure Explorer. Als uw opslagresource lokaal wordt uitgevoerd met behulp van Azurite, wordt deze automatisch opgehaald door de Azure Storage Explorer.

Note

De Azure Storage Explorer detecteert Opslagbronnen van Azurite, ervan uitgaande dat de standaardpoorten worden gebruikt. Als u de Azurite-container geconfigureerd voor het gebruik van verschillende poorten, moet u de Azure Storage Explorer configureren om verbinding te maken met de juiste poorten.

Voer de volgende stappen uit om vanuit Azure Storage Explorer verbinding te maken met de opslagresource:

  1. Voer de Aspire AppHost uit.

  2. Open de Azure Opslagverkenner.

  3. Bekijk het deelvenster Explorer.

  4. Selecteer de link Alles vernieuwen om de lijst met opslagaccounts te vernieuwen.

  5. Vouw de Emulator & Aangesloten knoop uit.

  6. Vouw het knooppunt Opslagaccounts uit.

  7. U zou een opslagaccount moeten zien met de naam van uw resource als voorvoegsel.

    Azure Storage Explorer: Opslagresource van Azurite gedetecteerd.

U kunt het opslagaccount en de inhoud ervan verkennen met behulp van de Azure Storage Explorer. Zie Azurevoor meer informatie over het gebruik van de Storage Explorer.

Azure Table Storage-resource toevoegen

Registreer de Azure Table Storage integratie in uw AppHost-project door een aanroep te koppelen aan AddTables het IResourceBuilder<IAzureStorageResource> exemplaar dat wordt geretourneerd door AddAzureStorage. In het volgende voorbeeld ziet u hoe u een Azure Table Storage resource met de naam storage en een tabelresource met de naam tablestoevoegt:

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

De voorgaande code:

  • Hiermee wordt een Azure Storage-resource met de naam storagetoegevoegd.
  • Hiermee voegt u een tabelopslagresource met de naam tables toe aan de opslagresource.
  • Voegt de storage resource toe aan de ExampleProject en wacht tot deze gereed is voordat het project wordt gestart.

Provisioning-gegenereerde Bicep

Als u nieuw bent met Bicep, het is een domeinspecifieke taal voor het definiëren van Azure-bronnen. Met Aspire hoeft u Bicep niet handmatig te schrijven, omdat de voorzienings-API's Bicep voor u genereren. Wanneer u uw app publiceert, wordt de gegenereerde Bicep samen met het manifestbestand geleverd. Wanneer u een Azure Storage-resource toevoegt, wordt de volgende Bicep gegenereerd:

@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

De voorgaande Bicep is een module die een Azure Storage-account in richt met de volgende standaardwaarden:

  • kind: het type opslagaccount. De standaardwaarde is StorageV2.
  • sku: de SKU van het opslagaccount. De standaardwaarde is Standard_GRS.
  • properties: de eigenschappen van het opslagaccount:
    • accessTier: de toegangslaag van het opslagaccount. De standaardwaarde is Hot.
    • allowSharedKeyAccess: een Booleaanse waarde die aangeeft of het opslagaccount toestaat dat aanvragen worden geautoriseerd met de toegangssleutel voor het account. De standaardwaarde is false.
    • minimumTlsVersion: de minimaal ondersteunde TLS-versie voor het opslagaccount. De standaardwaarde is TLS1_2.
    • networkAcls: de netwerk-ACL's voor het opslagaccount. De standaardwaarde is { defaultAction: 'Allow' }.

Naast het opslagaccount wordt ook een blobcontainer ingericht.

De volgende roltoewijzingen worden toegevoegd aan het opslagaccount om uw toepassing toegang te verlenen. Zie de Azure voor meer informatie.

Rol/id Description
Bijdrager aan opslagblobgegevens
ba92f5b4-2d11-453d-a403-e96b0029c9fe
Lees-, schrijf- en verwijder Azure Storage-containers en -blobs.
Inzender voor opslagtabelgegevens
0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3
Lees-, schrijf- en verwijder Azure Storage-tabellen en -entiteiten.
Inzender voor opslagwachtrijgegevens
974c5e8b-45b9-4653-ba55-5f855dd0fb88
Lees-, schrijf- en verwijder Azure Storage-wachtrijen en wachtrijberichten.

Daarnaast worden roltoewijzingen gemaakt voor de Azure resource in een afzonderlijke module:

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

De gegenereerde Bicep is een beginpunt en wordt beïnvloed door wijzigingen aan de voorzieningsinfrastructuur in C#. Aanpassingen aan het Bicep-bestand zullen direct overschreven worden, dus breng wijzigingen aan via de C#-inrichtings-API's zodat ze weerspiegeld worden in de gegenereerde bestanden.

Voorzieningeninfrastructuur aanpassen

Alle AspireAzure resources zijn subklassen van het AzureProvisioningResource type. Met dit type kunt u de gegenereerde Bicep aanpassen doordat het een vloeiende API biedt om de Azure resources te configureren, door gebruik te maken van de ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) API. U kunt bijvoorbeeld de kind, sku, propertiesen meer configureren. In het volgende voorbeeld ziet u hoe u de Azure Storage-resource aanpast:

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");
    });

De voorgaande code:

Er zijn nog veel meer configuratieopties beschikbaar om de Azure Storage-resource aan te passen. Zie Azure.Provisioning.Storagevoor meer informatie.

Resource voor Azure Storage-emulator toevoegen

Als u een Azure Storage-emulatorresource wilt toevoegen, koppelt u een aanroep op een IResourceBuilder<AzureStorageResource> aan de RunAsEmulator-API:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage")
                     .RunAsEmulator();

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

Wanneer u RunAsEmulatoraanroept, worden uw opslagbronnen geconfigureerd voor lokaal uitvoeren met behulp van een emulator. De emulator in dit geval is Azurite. De opensource-emulator Van Azurite biedt een gratis lokale omgeving voor het testen van uw Azure Blob-, Queue Storage- en Table Storage-apps en het is een perfecte aanvulling op de AspireAzure hostingintegratie. Azurite is niet geïnstalleerd; In plaats daarvan is het toegankelijk voor Aspire als een container. Wanneer u een container aan de AppHost toevoegt, zoals wordt weergegeven in het vorige voorbeeld met de mcr.microsoft.com/azure-storage/azurite installatiekopieën, wordt de container gemaakt en gestart wanneer de AppHost wordt gestart. Zie levenscyclus van containerresourcesvoor meer informatie.

Azurite-container configureren

Er zijn verschillende configuraties beschikbaar voor containerresources, bijvoorbeeld: u kunt de poorten van de container, omgevingsvariabelen, levensduur en meer configureren.

Azurite-containerpoorten configureren

Standaard worden in de Azure-container, wanneer deze is geconfigureerd door Aspire, de volgende eindpunten weergegeven:

Endpoint Containerpoort Host-poort
blob 10000 dynamic
queue 10001 dynamic
table 10002 dynamic

De poort waarop ze luisteren, is standaard dynamisch. Wanneer de container wordt gestart, worden de poorten toegewezen aan een willekeurige poort op de hostcomputer. Als u de eindpuntpoorten wilt configureren, rijg dan aanroepen van de containerresourcebouwer zoals geleverd door de RunAsEmulator-methode aaneen, zoals wordt weergegeven in het volgende voorbeeld:

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

De voorgaande code configureert de bestaande blob, queueen table eindpunten van de Azurite-container om respectievelijk te luisteren op poorten 27000, 27001en 27002. De poorten van de Azurite-container worden toegewezen aan de hostpoorten, zoals wordt weergegeven in de volgende tabel:

Eindpuntnaam Poorttoewijzing (container:host)
blob 10000:27000
queue 10001:27001
table 10002:27002
Azurite-container configureren met een permanente levensduur

Als u de Azurite-container met een permanente levensduur wilt configureren, roept u de methode WithLifetime op de Resource van de Azurite-container aan en geeft u ContainerLifetime.Persistentdoor:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(
                     azurite =>
                     {
                         azurite.WithLifetime(ContainerLifetime.Persistent);
                     });

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

Zie Levensduur van containerresourcesvoor meer informatie.

Azurite-container configureren met gegevensvolume

Als u een gegevensvolume wilt toevoegen aan de resource van de Azure Storage-emulator, roept u de WithDataVolume methode aan op de resource van de Azure Storage-emulator:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(
                     azurite =>
                     {
                         azurite.WithDataVolume();
                     });

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

Het gegevensvolume wordt gebruikt om de Azurite-gegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /data pad in de Azure-container en wanneer er geen name parameter wordt opgegeven, wordt de naam opgemaakt als .azurite/{resource name}. Voor meer informatie over gegevensvolumes en details over waarom ze de voorkeur hebben boven bind mounts, zie Docker docs: Volumes.

Azurite-container configureren met gegevenskoppeling

Als u een koppeling voor gegevensbinding wilt toevoegen aan de resource van de Azure Storage-emulator, roept u de WithDataBindMount methode aan:

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(
                     azurite =>
                     {
                         azurite.WithDataBindMount("../Azurite/Data");
                     });

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

Important

Gegevenskoppelingen hebben beperkte functionaliteiten vergeleken metvolumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor productieomgevingen. Bind mounts bieden echter directe toegang tot en wijziging van bestanden op het hostsysteem, wat ideaal is voor ontwikkeling en testen waarbij wijzigingen in real-time nodig zijn.

Gegevenskoppelpunten vertrouwen op het bestandssysteem van de hostmachine om de Azurite-gegevens te behouden bij het opnieuw opstarten van de container. De koppeling van de gegevensbinding wordt gekoppeld aan het ../Azurite/Data pad op de hostcomputer ten opzichte van de AppHost-map (IDistributedApplicationBuilder.AppHostDirectory) in de Azure-container. Zie de Docker docs: Koppelingspunten voor meer informatie over koppelingspunten voor gegevens.

Verbinding maken met een bestaand Azure Storage-account

Mogelijk hebt u een bestaand Azure Storage-account waarmee u verbinding wilt maken. In plaats van een nieuwe Azure opslagresource weer te geven, kunt u een verbindingsreeks toevoegen aan de AppHost. Als u een verbinding wilt toevoegen aan een bestaand Azure Storage-account, roept u de methode AddConnectionString aan:

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

Verbindingsreeksen worden gebruikt om een breed scala aan verbindingsgegevens weer te geven, waaronder databaseverbindingen, berichtbrokers, eindpunt-URI's en andere services. In Aspire de nomenclatuur wordt de term 'verbindingsreeks' gebruikt om alle soorten verbindingsgegevens weer te geven.

De verbindingsreeks wordt geconfigureerd in de configuratie van AppHost, meestal onder Gebruikersgeheimen, onder de ConnectionStrings sectie. De AppHost injecteert deze verbindingsreeks als een omgevingsvariabele in alle afhankelijke resources, bijvoorbeeld:

{
    "ConnectionStrings": {
        "blobs": "https://{account_name}.blob.core.windows.net/"
    }
}

De afhankelijke resource heeft toegang tot de geïnjecteerde verbindingsreeks door de methode GetConnectionString aan te roepen en de verbindingsnaam door te geven als de parameter, in dit geval "blobs". De GetConnectionString-API is een afkorting voor IConfiguration.GetSection("ConnectionStrings")[name].

Verbinding maken met opslagbronnen

Wanneer de Aspire AppHost wordt uitgevoerd, kunnen de opslagbronnen worden geopend door externe hulpprogramma's, zoals StorageAzure Explorer. Als uw opslagresource lokaal wordt uitgevoerd met behulp van Azurite, wordt deze automatisch opgehaald door de Azure Storage Explorer.

Note

De Azure Storage Explorer detecteert Opslagbronnen van Azurite, ervan uitgaande dat de standaardpoorten worden gebruikt. Als u de Azurite-container geconfigureerd voor het gebruik van verschillende poorten, moet u de Azure Storage Explorer configureren om verbinding te maken met de juiste poorten.

Voer de volgende stappen uit om vanuit Azure Storage Explorer verbinding te maken met de opslagresource:

  1. Voer de Aspire AppHost uit.

  2. Open de Azure Opslagverkenner.

  3. Bekijk het deelvenster Explorer.

  4. Selecteer de link Alles vernieuwen om de lijst met opslagaccounts te vernieuwen.

  5. Vouw de Emulator & Aangesloten knoop uit.

  6. Vouw het knooppunt Opslagaccounts uit.

  7. U zou een opslagaccount moeten zien met de naam van uw resource als voorvoegsel.

    Azure Storage Explorer: Opslagresource van Azurite gedetecteerd.

U kunt het opslagaccount en de inhoud ervan verkennen met behulp van de Azure Storage Explorer. Zie Azurevoor meer informatie over het gebruik van de Storage Explorer.

Gezondheidscontroles voor hostingintegratie

De integratie van Azure Storage-hosting voegt automatisch een statuscontrole toe voor de opslagresource. Deze wordt alleen toegevoegd wanneer het als een emulator draait en controleert of de Azurite-container draait en of er een verbinding tot stand kan worden gebracht. De hostingintegratie is afhankelijk van de 📦 AspNetCore.HealthChecks.Azure. Storage.Blobs NuGet-pakket.

Client integratie

Installeer het Aspire NuGet-pakket in het project voor de toepassing die de Azure Data Tables-client gebruikt, om aan de slag te gaan met de 📦Aspire Data Tables clientintegratie. De Azure Data Tables-clientintegratie registreert een TableServiceClient exemplaar dat u kunt gebruiken om met Azure Table Storagete communiceren.

dotnet add package Aspire.Azure.Data.Tables

Azure Table Storage-client toevoegen

Roep in het Program.cs bestand van het clientgebruikte project de AddAzureTableClient-extensiemethode aan op een IHostApplicationBuilder om een TableServiceClient te registreren voor gebruik via de container voor afhankelijkheidsinjectie. De methode gebruikt een verbindingsnaamparameter.

builder.AddAzureTableClient("tables");

Vervolgens kunt u het TableServiceClient exemplaar ophalen met behulp van afhankelijkheidsinjectie. Bijvoorbeeld om de client op te halen uit een service:

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

Configuration

De AspireAzure Table Storage-integratie biedt meerdere opties voor het configureren van de TableServiceClient op basis van de vereisten en conventies van uw project.

Configuratieproviders gebruiken

De AspireAzure Table Storage-integratie ondersteunt Microsoft.Extensions.Configuration. Hiermee worden de AzureDataTablesSettings en TableClientOptions vanuit de configuratie geladen met behulp van de Aspire:Azure:Data:Tables-sleutel. Het volgende codefragment is een voorbeeld van een appsettings.json-bestand waarmee een aantal van de opties wordt geconfigureerd:

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

Zie Azurevoor de volledige clientintegratie van gegevenstabellen JSONAspire schema.Azure. Data.Tables/ConfigurationSchema.json.

Benoemde configuratie gebruiken

De AspireAzure Table Storage integratie ondersteunt benoemde configuratie, waarmee u meerdere exemplaren van hetzelfde resourcetype met verschillende instellingen kunt configureren. De benoemde configuratie maakt gebruik van de verbindingsnaam als een sleutel in het hoofdgedeelte van de configuratie.

{
  "Aspire": {
    "Azure": {
      "Data": {
        "Tables": {
          "tables1": {
            "ServiceUri": "https://myaccount1.table.core.windows.net/",
            "DisableHealthChecks": true,
            "ClientOptions": {
              "EnableTenantDiscovery": true
            }
          },
          "tables2": {
            "ServiceUri": "https://myaccount2.table.core.windows.net/",
            "DisableTracing": true,
            "ClientOptions": {
              "EnableTenantDiscovery": false
            }
          }
        }
      }
    }
  }
}

In dit voorbeeld kunnen de tables1 en tables2 verbindingsnamen worden gebruikt wanneer AddAzureTableClient wordt aangeroepen:

builder.AddAzureTableClient("tables1");
builder.AddAzureTableClient("tables2");

Benoemde configuratie heeft voorrang op de configuratie op het hoogste niveau. Als beide zijn opgegeven, overschrijven de instellingen van de benoemde configuratie de instellingen op het hoogste niveau.

Gebruik inline-delegates

U kunt de Action<AzureDataTablesSettings> configureSettings delegate ook doorgeven om sommige of alle opties inline in te stellen, bijvoorbeeld om de ServiceUri te configureren:

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

U kunt de TableClientOptions ook instellen met de Action<IAzureClientBuilder<TableServiceClient, TableClientOptions>> configureClientBuilder delegate, de tweede parameter van de AddAzureTableClient-methode. Als u bijvoorbeeld de TableServiceClient-id wilt instellen om de client te identificeren:

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

gezondheidscontroles voor Client-integratie

Aspire Standaard schakelen integraties statuscontroles in voor alle services. Zie Aspire het overzicht van integraties voor meer informatie.

De integratie van AspireAzure gegevenstabellen:

  • Hiermee wordt de gezondheidscontrole toegevoegd wanneer AzureDataTablesSettings.DisableHealthChecksfalseis, waarmee geprobeerd wordt verbinding te maken met de Azure Table Storage.
  • Kan worden geïntegreerd met het /health HTTP-eindpunt, waarin is gespecificeerd dat alle geregistreerde gezondheidscontroles moeten slagen voordat de app als gereed wordt beschouwd om verkeer te accepteren.

Waarneembaarheid en telemetrie

Aspire Integraties stellen automatisch configuraties voor logboekregistratie, tracering en metrische gegevens in, die ook wel de pijlers van waarneembaarheid worden genoemd. Zie het overzicht van integratieobserveerbaarheid en telemetrie voor meer informatie over integratieobserveerbaarheid en telemetrieAspire. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.

Logging

De integratie van AspireAzure gegevenstabellen maakt gebruik van de volgende logboekcategorieën:

  • Azure.Core
  • Azure.Identity

Tracing

De integratie van AspireAzure gegevenstabellen verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:

  • Azure.Data.Tables.TableServiceClient

Metrics

De integratie van AspireAzure gegevenstabellen biedt momenteel geen ondersteuning voor metriek vanwege beperkingen met de Azure SDK.

Zie ook