包含: -
Client 集成
Azure Table Storage 是用于存储结构化 NoSQL 数据的服务。 通过 AspireAzure 数据表集成,可以连接到现有 Azure Table Storage 实例,或从 .NET 应用程序创建新实例。
托管集成
存储AspireAzure托管集成将各种存储资源建模为以下类型:
- AzureStorageResource:表示 Azure 存储资源。
- AzureStorageEmulatorResource:表示 Azure 存储模拟器资源(Azurite)。
- AzureBlobStorageResource:表示 Azure Blob 存储资源。
- AzureQueueStorageResource:表示 Azure 队列存储资源。
- AzureTableStorageResource: 表示 Azure 表存储资源。
若要访问这些类型和 API 来表达它们,请添加 .📦AspireHosting.Azure.AppHost 项目中的存储 NuGet 包。
dotnet add package Aspire.Hosting.Azure.Storage
有关详细信息,请参阅 dotnet add package 或 管理 .NET 应用程序中的包依赖项。
添加 Azure 存储资源
在 AppHost 项目中,调用 AddAzureStorage 添加并返回 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...
向 AppHost 添加 a AzureStorageResource 时,它会公开其他有用的 API 来添加 Azure Blob、队列和表存储资源。 换句话说,在添加任何其他存储资源之前,必须添加 AzureStorageResource。
Important
调用 AddAzureStorage时,它会隐式调用 AddAzureProvisioning,这增加了在应用启动期间动态生成 Azure 资源的支持。 应用必须配置相应的订阅和位置。 有关详细信息,请参阅 本地预配:配置。
连接到现有 Azure 存储帐户
您可能已有一个现有的 Azure 存储帐户,希望连接到它。 可以链式调用以标注 AzureStorageResource 是现有资源。
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
调用RunAsExisting或PublishAsExistingAsExisting处理订阅中Azure已存在的资源的方法时,必须将某些配置值添加到 AppHost,以确保Aspire找到它们。 必要的配置值包括 SubscriptionId、 AllowResourceGroupCreation、 ResourceGroup 和 Location。 如果您不设置它们,仪表板中就会出现“缺少配置”错误 Aspire。 有关如何设置它们的详细信息,请参阅 “配置”。
有关将 Azure 存储资源视为现有资源的详细信息,请参阅 “使用现有 Azure 资源”。
Note
或者,可以向 AppHost 添加连接字符串,而不是表示 Azure 存储帐户资源。 此方法属于弱类型,不适用于角色分配或基础结构自定义。 有关详细信息,请参阅 添加包含连接字符串的现有 Azure 资源。
添加 Azure 存储模拟器资源
若要添加 Azure 存储模拟器资源,请将对 IResourceBuilder<AzureStorageResource> 的调用链接到 RunAsEmulator API:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage")
.RunAsEmulator();
// After adding all resources, run the app...
调用 RunAsEmulator时,它将存储资源配置为使用模拟器在本地运行。 在本例中,模拟器 Azurite。 Azurite 开源模拟器提供了一个免费的本地环境,用于测试 Azure Blob、队列存储和表存储应用,并且它是 AspireAzure 托管集成的理想搭档。 Azurite 未安装,而是可作为 Aspire 容器访问。 将容器添加到 AppHost 时,如前面的示例 mcr.microsoft.com/azure-storage/azurite 所示,该映像会在 AppHost 启动时创建并启动容器。 有关详细信息,请参阅 容器资源生命周期。
配置 Azurite 容器
容器资源可以使用各种配置,例如,可以配置容器的端口、环境变量、生存期等。
配置 Azurite 容器端口
默认情况下,Azurite 容器在配置 Aspire时公开以下终结点:
| Endpoint | 集装箱码头 | 主机端口 |
|---|---|---|
blob |
10000 | dynamic |
queue |
10001 | dynamic |
table |
10002 | dynamic |
默认情况下,他们正在侦听的端口是动态的。 容器启动时,端口被映射到主机上的随机端口。 若要配置终结点端口,请对 RunAsEmulator 方法提供的容器资源生成器进行链式调用,如以下示例所示:
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...
前面的代码将 Azurite 容器的现有 blob、queue和 table 终结点分别配置为侦听端口 27000、27001和 27002。 Azurite 容器的端口映射到主机端口,如下表所示:
| 终结点名称 | 端口映射(container:host) |
|---|---|
blob |
10000:27000 |
queue |
10001:27001 |
table |
10002:27002 |
配置持久生存期的 Azurite 容器
若要使用持久性生存期配置 Azurite 容器,请在 Azurite 容器资源上调用 WithLifetime 方法,并传递 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...
有关详细信息,请参阅 容器资源生存期。
使用数据卷配置 Azurite 容器
若要将数据卷添加到 Azure 存储模拟器资源,请在 WithDataVolume 存储模拟器资源上调用 Azure 方法:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithDataVolume();
});
// After adding all resources, run the app...
数据卷用于在其容器生命周期之外保留 Azurite 数据。 数据卷挂载在 Azurite 容器中的 /data 路径中,如果没有提供 name 参数,则名称的格式为 .azurite/{resource name}。 有关数据卷的更多信息,以及为什么它们优于绑定挂载,请参阅Docker 文档:卷。
通过数据绑定挂载来配置 Azurite 容器
要在 Azure 存储模拟器资源上添加数据绑定装载,请调用 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
与卷相比,绑定挂载的数据功能有限,而卷提供更好的性能、可移植性和安全性,因此它们更适合用于生产环境。 但是,绑定装载允许直接访问和修改主机系统上的文件,非常适合在需要实时更改的情况下进行开发和测试。
数据绑定挂载依赖于主机机器的文件系统,以在容器重启时保留 Azurite 数据。 数据绑定装载安装在 ../Azurite/Data 主机上相对于 Azurite 容器中的 AppHost 目录 (IDistributedApplicationBuilder.AppHostDirectory) 的路径上。 有关数据绑定装载的详细信息,请参阅 Docker 文档:绑定装载。
连接至存储资源
Aspire运行 AppHost 时,外部工具(如Azure存储资源管理器)可以访问存储资源。 如果存储资源在本地使用 Azurite 运行,Azure 存储资源管理器会自动检测到它。
Note
Azure Storage Explorer 会检测到使用默认端口的 Azurite 存储资源。 如果已 将 Azurite 容器配置为使用不同的端口,则需要配置 Azure 存储资源管理器以连接到正确的端口。
若要从 Azure 存储资源管理器连接到存储资源,请执行以下步骤:
运行Aspire应用程序主机。
打开 Azure 存储资源管理器。
查看 资源管理器 窗格。
选择 刷新所有 链接以刷新存储帐户列表。
展开 模拟器和连接 节点。
展开 存储帐户 节点。
您应该会看到一个以您的资源名称作为前缀的存储帐户。
可以使用 Azure 存储资源管理器免费浏览存储帐户及其内容。 有关使用 Azure 存储资源管理器的详细信息,请参阅 存储资源管理器入门。
添加 Azure Table Storage 资源
在 AppHost 项目中,通过链接对Azure Table Storage返回AddTables的实例的IResourceBuilder<IAzureStorageResource>调用来注册AddAzureStorage集成。 以下示例演示如何添加名为 Azure Table Storage 的 storage 资源,以及名为 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...
前面的代码:
- 添加名为 Azure的
storage存储资源。 - 将名为
tables的表存储资源添加到存储资源。 - 将
storage资源添加到ExampleProject,并在启动项目之前等待它准备就绪。
由预配生成的 Bicep
如果你是 Bicep的新手,它是一种领域特定语言,用于定义 Azure 资源。 使用 Aspire时,无需手动编写 Bicep,而是预配 API 会为你生成 Bicep。 发布应用时,生成的 Bicep 文件将与清单文件一起输出。 在添加 Azure 存储资源时,会生成以下 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
前面的 Bicep 是一个模块,它预配了具有以下默认值的 Azure 存储帐户:
-
kind:存储帐户的类型。 默认值为StorageV2。 -
sku:存储帐户的 SKU。 默认值为Standard_GRS。 -
properties:存储帐户的属性:-
accessTier:存储帐户的访问层。 默认值为Hot。 -
allowSharedKeyAccess:一个布尔值,该值指示存储帐户是否允许使用帐户访问密钥授权请求。 默认值为false。 -
minimumTlsVersion:存储帐户支持的最低 TLS 版本。 默认值为TLS1_2。 -
networkAcls:存储账户的网络 ACL。 默认值为{ defaultAction: 'Allow' }。
-
除了存储帐户之外,还会创建一个 Blob 容器。
以下角色分配将添加到存储帐户,以授予应用程序访问权限。 要了解更多信息,请查看 内置的 Azure 基于角色的访问控制(Azure RBAC)角色:
| 角色/ID | Description |
|---|---|
存储 Blob 数据贡献者ba92f5b4-2d11-453d-a403-e96b0029c9fe |
读取、写入和删除 Azure 存储容器和 Blob 存储对象。 |
存储表数据贡献者0a9a7e1f-b9d0-4cc4-a60d-0319b160aaa3 |
读取、写入和删除 Azure 存储表和实体。 |
存储队列数据贡献者974c5e8b-45b9-4653-ba55-5f855dd0fb88 |
读取、写入和删除 Azure 存储队列和队列消息。 |
此外,在单独的模块中为 Azure 资源创建角色分配:
@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
}
生成的 Bicep 作为起点,受 C# 中资源配置基础设施更改的影响。 直接对 Bicep 文件的自定义项所做的更改将被覆盖,因此请通过 C# 预配 API 进行更改,以确保它们反映在生成的文件中。
自定义预配基础结构
所有 AspireAzure 资源都是 AzureProvisioningResource 类型的子类。 此类型通过提供一个流畅的 API,利用 Azure API 来配置 ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) 资源,以实现对生成的 Bicep 的自定义。 例如,可以配置 kind、sku、properties等。 以下示例演示如何自定义 Azure 存储资源:
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");
});
前面的代码:
- 将调用顺序链接到 ConfigureInfrastructure API:
-
infra参数是 AzureResourceInfrastructure 类型的实例。 - 通过调用 GetProvisionableResources() 方法检索可预配资源。
- 单个 StorageAccount 已被检索。
- StorageAccount.AccessTier 被分配给 StorageAccountAccessTier.Cool。
-
StorageAccount.Sku 被分配给一个具有 StorageSku 的新
NamePremiumZrs。 - 标记将添加到存储帐户中,其密钥为
ExampleKey,值为Example value。
-
还有更多配置选项可用于自定义 Azure 存储资源。 有关详细信息,请参阅 Azure.Provisioning.Storage。
添加 Azure 存储模拟器资源
若要添加 Azure 存储模拟器资源,请将对 IResourceBuilder<AzureStorageResource> 的调用链接到 RunAsEmulator API:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage")
.RunAsEmulator();
// After adding all resources, run the app...
调用 RunAsEmulator时,它将存储资源配置为使用模拟器在本地运行。 在本例中,模拟器 Azurite。 Azurite 开源模拟器提供了一个免费的本地环境,用于测试 Azure Blob、队列存储和表存储应用,并且它是 AspireAzure 托管集成的理想搭档。 未安装 Azurite;可以将其作为容器进行访问 Aspire 。 将容器添加到 AppHost 时,如前面的示例 mcr.microsoft.com/azure-storage/azurite 所示,该映像会在 AppHost 启动时创建并启动容器。 有关详细信息,请参阅 容器资源生命周期。
配置 Azurite 容器
容器资源可以使用各种配置,例如,可以配置容器的端口、环境变量、 生存期等。
配置 Azurite 容器端口
默认情况下,当通过 Aspire 配置时,Azurite 容器会暴露以下终结点:
| Endpoint | 集装箱码头 | 主机端口 |
|---|---|---|
blob |
10000 | dynamic |
queue |
10001 | dynamic |
table |
10002 | dynamic |
默认情况下,他们正在侦听的端口是动态的。 容器启动时,端口被映射到主机上的随机端口。 若要配置终结点端口,请对 RunAsEmulator 方法提供的容器资源生成器进行链式调用,如以下示例所示:
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...
前面的代码将 Azurite 容器的现有 blob、queue和 table 终结点分别配置为侦听端口 27000、27001和 27002。 Azurite 容器的端口映射到主机端口,如下表所示:
| 终结点名称 | 端口映射(container:host) |
|---|---|
blob |
10000:27000 |
queue |
10001:27001 |
table |
10002:27002 |
配置持久生存期的 Azurite 容器
若要使用持久性生存期配置 Azurite 容器,请在 Azurite 容器资源上调用 WithLifetime 方法,并传递 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...
有关详细信息,请参阅 容器资源生存期。
使用数据卷配置 Azurite 容器
若要将数据卷添加到 Azure 存储模拟器资源,请在 WithDataVolume 存储模拟器资源上调用 Azure 方法:
var builder = DistributedApplication.CreateBuilder(args);
var storage = builder.AddAzureStorage("storage").RunAsEmulator(
azurite =>
{
azurite.WithDataVolume();
});
// After adding all resources, run the app...
数据卷用于在其容器生命周期之外保留 Azurite 数据。 数据卷挂载在 Azurite 容器中的 /data 路径中,如果没有提供 name 参数,则名称的格式为 .azurite/{resource name}。 有关数据卷的更多信息,以及为什么它们优于绑定挂载,请参阅Docker 文档:卷。
通过数据绑定挂载来配置 Azurite 容器
要在 Azure 存储模拟器资源上添加数据绑定装载,请调用 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
与卷相比,绑定挂载的数据功能有限,而卷提供更好的性能、可移植性和安全性,因此它们更适合用于生产环境。 但是,绑定装载允许直接访问和修改主机系统上的文件,非常适合在需要实时更改的情况下进行开发和测试。
数据绑定挂载依赖于主机机器的文件系统,以在容器重启时保留 Azurite 数据。 数据绑定装载安装在 ../Azurite/Data 主机上相对于 Azurite 容器中的 AppHost 目录 (IDistributedApplicationBuilder.AppHostDirectory) 的路径上。 有关数据绑定装载的详细信息,请参阅 Docker 文档:绑定装载。
连接到现有 Azure 存储帐户
您可能已有一个现有的 Azure 存储帐户,希望连接到它。 可以向 AppHost 添加连接字符串,而不是表示新的 Azure 存储资源。 若要将连接添加到现有 Azure 存储帐户,请调用 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
连接字符串用于表示各种连接信息,包括数据库连接、消息代理、终结点 URI 和其他服务。 在 Aspire 命名中,术语“连接字符串”用于表示任何类型的连接信息。
连接字符串在 AppHost 的配置中配置,通常位于“ 用户机密”部分下 ConnectionStrings 。 AppHost 将此连接字符串作为环境变量注入到所有依赖资源中,例如:
{
"ConnectionStrings": {
"blobs": "https://{account_name}.blob.core.windows.net/"
}
}
依赖资源可以通过调用 GetConnectionString 方法并传递连接名称作为参数来访问注入的连接字符串,在本例中为 "blobs"。
GetConnectionString API 是 IConfiguration.GetSection("ConnectionStrings")[name]的简写。
连接至存储资源
Aspire运行 AppHost 时,外部工具(如Azure存储资源管理器)可以访问存储资源。 如果存储资源在本地使用 Azurite 运行,Azure 存储资源管理器会自动检测到它。
Note
Azure Storage Explorer 会检测到使用默认端口的 Azurite 存储资源。 如果已 将 Azurite 容器配置为使用不同的端口,则需要配置 Azure 存储资源管理器以连接到正确的端口。
若要从 Azure 存储资源管理器连接到存储资源,请执行以下步骤:
运行Aspire应用程序主机。
打开 Azure 存储资源管理器。
查看 资源管理器 窗格。
选择 刷新所有 链接以刷新存储帐户列表。
展开 模拟器和连接 节点。
展开 存储帐户 节点。
您应该会看到一个以您的资源名称作为前缀的存储帐户。
可以使用 Azure 存储资源管理器免费浏览存储帐户及其内容。 有关使用 Azure 存储资源管理器的详细信息,请参阅 存储资源管理器入门。
托管集成运行状况检查
Azure 存储托管集成会自动为存储资源添加运行状况检查。 只有在作为模拟器运行时,才会添加,它会验证 Azurite 容器是否正在运行,并且可以与之建立连接。 托管集成依赖于 📦 AspNetCore.HealthChecks,Azure.Storage.Blobs NuGet 包。
Client 集成
若要开始 AspireAzure 数据表客户端集成,请在客户端消费项目中安装 📦Aspire.Azure.Data.Tables NuGet 包,亦即使用 Azure 数据表客户端的应用程序的项目。 Azure 数据表客户端集成注册一个 TableServiceClient 实例,该实例可用于与 Azure Table Storage交互。
dotnet add package Aspire.Azure.Data.Tables
添加 Azure Table Storage 客户端
在客户端使用项目的 Program.cs 文件中,对任何 AddAzureTableClient 调用 IHostApplicationBuilder 扩展方法,以注册 TableServiceClient,以便通过依赖项注入容器使用。 该方法采用连接名称参数。
builder.AddAzureTableClient("tables");
然后,可以使用依赖项注入检索 TableServiceClient 实例。 例如,若要从服务检索客户端:
public class ExampleService(TableServiceClient client)
{
// Use client...
}
Configuration
Aspire
Azure Table Storage 集成提供了多个选项,用于根据项目的要求和约定配置 TableServiceClient。
使用配置提供程序
Aspire
Azure Table Storage 集成支持 Microsoft.Extensions.Configuration。 它使用 AzureDataTablesSettings 键从配置中加载 TableClientOptions 和 Aspire:Azure:Data:Tables。 以下代码片段是一个 appsettings.json 文件的示例,该文件配置了一些选项:
{
"Aspire": {
"Azure": {
"Data": {
"Tables": {
"ServiceUri": "YOUR_URI",
"DisableHealthChecks": true,
"DisableTracing": false,
"ClientOptions": {
"EnableTenantDiscovery": true
}
}
}
}
}
}
有关完整的 Azure 数据表客户端集成 JSON 架构,请参阅 Aspire。Azure。Data.Tables/ConfigurationSchema.json。
使用命名配置
集成 AspireAzure Table Storage 支持命名配置,通过该配置,可以使用不同的设置来配置同一资源类型的多个实例。 命名配置使用连接名称作为主配置部分下的密钥。
{
"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
}
}
}
}
}
}
}
在此示例中,当调用tables1时,可以使用tables2和AddAzureTableClient作为连接名称。
builder.AddAzureTableClient("tables1");
builder.AddAzureTableClient("tables2");
命名配置优先于顶级配置。 如果同时提供这两种设置,则命名配置中的设置将替代顶级设置。
使用内联委托
你也可以传递 Action<AzureDataTablesSettings> configureSettings 委托,以便行内设置部分或全部选项,例如配置 ServiceUri:
builder.AddAzureTableClient(
"tables",
settings => settings.DisableHealthChecks = true);
您也可以通过 TableClientOptions 委托(Action<IAzureClientBuilder<TableServiceClient, TableClientOptions>> configureClientBuilder 方法的第二个参数)来设置 AddAzureTableClient。 例如,若要设置 TableServiceClient ID 来标识客户端:
builder.AddAzureTableClient(
"tables",
configureClientBuilder: clientBuilder =>
clientBuilder.ConfigureOptions(
options => options.EnableTenantDiscovery = true));
Client 集成健康检查
默认情况下,Aspire 集成为所有服务启用 健康检查。 有关详细信息,请参阅 Aspire 集成概述。
Aspire Azure 数据表系统集成:
- 在AzureDataTablesSettings.DisableHealthChecks为
false时添加健康检查,以尝试连接到Azure Table Storage。 - 与
/healthHTTP 终结点集成,该终结点规定所有已注册的健康检查必须通过,应用才能被视为可以接受流量。
可观测性和遥测
Aspire 集成会自动设置日志记录、跟踪和指标配置,这些配置有时称为 可观测性支柱。 有关集成可观测性和遥测的详细信息,请参阅 Aspire 集成概述。 根据支持服务,某些集成可能仅支持其中一些功能。 例如,某些集成支持日志记录和跟踪,但不支持指标。 也可以使用 配置 部分中介绍的技术禁用遥测功能。
Logging
Aspire Azure 数据表集成使用以下日志类别:
Azure.CoreAzure.Identity
Tracing
Aspire Azure 数据表集成使用 OpenTelemetry 发出以下跟踪活动:
Azure.Data.Tables.TableServiceClient
Metrics
由于 Aspire SDK 的限制,AzureAzure 数据表集成目前目前不支持指标。