Skip to content

云服务集成 ​

更新: 2026-10-16 15:20:09   字数: 0 字   时长: 0 分钟

云服务集成让您把 Azure、AWS 等平台的资源写进同一份应用模型,并在本地用容器或模拟器替代它们。这样开发时不依赖云账号,发布时又自动切换为真实的服务。

核心模式:RunAsContainer / RunAsEmulator ​

这是云集成最重要的一个模式:

csharp
var cache = builder.AddAzureRedis("cache")
    .RunAsContainer();          // 本地运行容器,发布时使用 Azure Cache for Redis
写法Run 模式(本地)Publish 模式(云端)
AddRedis("cache")Redis 容器容器(或按发布器映射)
AddAzureRedis("cache").RunAsContainer()同样的 Redis 容器Azure Cache for Redis
AddAzureRedis("cache")真实 Azure 资源Azure Cache for Redis

本地无差别,发布才分叉

上表前两行在本地运行时完全没有区别——都得到一个 docker.io/library/redis 容器。差别只体现在发布产物上。

Azure 集成 ​

Azure 集成包统一以 Aspire.Hosting.Azure.* 命名。

服务托管集成包添加方法
存储Aspire.Hosting.Azure.StorageAddAzureStorage(name)
Blob / Queue / Table同上AddBlobs(...) / AddQueues(...) / AddTables(...)
Key VaultAspire.Hosting.Azure.KeyVaultAddAzureKeyVault(name)
应用配置Aspire.Hosting.Azure.AppConfigurationAddAzureAppConfiguration(name)
Service BusAspire.Hosting.Azure.ServiceBusAddAzureServiceBus(name)
Cosmos DBAspire.Hosting.Azure.CosmosDBAddAzureCosmosDB(name)
SignalRAspire.Hosting.Azure.SignalRAddAzureSignalR(name)
FunctionsAspire.Hosting.Azure.FunctionsAddAzureFunctionsProject<T>(name)
Azure OpenAIAspire.Hosting.Azure.CognitiveServicesAddAzureOpenAI(name)
PostgreSQLAspire.Hosting.Azure.PostgreSQLAddAzurePostgresFlexibleServer(name)
容器应用环境Aspire.Hosting.Azure.AppContainersAddAzureContainerAppEnvironment(name)

示例:存储 + Key Vault ​

csharp
var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage")
    .RunAsEmulator();                     // 本地使用 Azurite

var blobs = storage.AddBlobs("uploads");

var secrets = builder.AddAzureKeyVault("secrets");

builder.AddProject<Projects.Api>("api")
    .WithReference(blobs)
    .WithReference(secrets)
    .WaitFor(storage);

builder.Build().Run();

服务端消费:

csharp
builder.AddServiceDefaults();
builder.AddAzureBlobClient("uploads");

示例:Azure Functions ​

csharp
builder.AddAzureFunctionsProject<Projects.MyFunctions>("functions")
    .WithReference(blobs)
    .WithReference(queue);

配置 Azure 部署环境 ​

准备发布到 Azure Container Apps 时,在 AppHost 中声明环境:

csharp
builder.AddAzureContainerAppEnvironment("env");

本地运行时它没有副作用,发布时用于生成 Azure Container Apps 的部署定义。

身份认证 ​

本地开发通常使用开发者凭据,云端使用托管标识。Aspire 的 Azure 客户端集成默认采用 DefaultAzureCredential,因此同一份代码在两种环境下都能工作:

csharp
builder.AddAzureBlobClient("uploads");
// 本地:Visual Studio / CLI 登录的开发者身份
// 云端:容器/应用的托管标识

本地需要登录

使用 RunAsEmulator() 之外的 Azure 资源(也就是本地真的去连云端资源)时,需要先完成 az login 或使用 Visual Studio 的账号登录,否则会报凭据错误。推荐始终优先使用模拟器/容器版本。

AWS 集成 ​

AWS 官方提供 Aspire.Hosting.AWS 集成,支持共享 SDK 配置、CloudFormation / CDK 资源以及 DynamoDB Local 等本地模拟器。

csharp
var builder = DistributedApplication.CreateBuilder(args);

var dynamo = builder.AddAWSDynamoDBLocal("dynamodb");

builder.AddProject<Projects.Api>("api")
    .WithReference(dynamo);

其设计理念与 Azure 集成一致:AppHost 描述资源与关系,具体 SDK 调用由业务代码负责。

本地模拟器一览 ​

云服务本地替代
Azure StorageAzurite(RunAsEmulator())
Azure Service BusService Bus 模拟器
Azure Cosmos DBCosmos DB 模拟器
AWS DynamoDBDynamoDB Local
Redis / 队列等官方容器镜像

用参数区分环境

需要「本地跑模拟器、CI 跑真实云资源、生产再换一套」时,可以结合 builder.ExecutionContext 与外部参数来切换。

下一步 ​

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度