云服务集成
更新: 2026-10-16 15:20:09 字数: 0 字 时长: 0 分钟
云服务集成让您把 Azure、AWS 等平台的资源写进同一份应用模型,并在本地用容器或模拟器替代它们。这样开发时不依赖云账号,发布时又自动切换为真实的服务。
核心模式:RunAsContainer / RunAsEmulator
这是云集成最重要的一个模式:
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.Storage | AddAzureStorage(name) |
| Blob / Queue / Table | 同上 | AddBlobs(...) / AddQueues(...) / AddTables(...) |
| Key Vault | Aspire.Hosting.Azure.KeyVault | AddAzureKeyVault(name) |
| 应用配置 | Aspire.Hosting.Azure.AppConfiguration | AddAzureAppConfiguration(name) |
| Service Bus | Aspire.Hosting.Azure.ServiceBus | AddAzureServiceBus(name) |
| Cosmos DB | Aspire.Hosting.Azure.CosmosDB | AddAzureCosmosDB(name) |
| SignalR | Aspire.Hosting.Azure.SignalR | AddAzureSignalR(name) |
| Functions | Aspire.Hosting.Azure.Functions | AddAzureFunctionsProject<T>(name) |
| Azure OpenAI | Aspire.Hosting.Azure.CognitiveServices | AddAzureOpenAI(name) |
| PostgreSQL | Aspire.Hosting.Azure.PostgreSQL | AddAzurePostgresFlexibleServer(name) |
| 容器应用环境 | Aspire.Hosting.Azure.AppContainers | AddAzureContainerAppEnvironment(name) |
示例:存储 + Key Vault
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();服务端消费:
builder.AddServiceDefaults();
builder.AddAzureBlobClient("uploads");示例:Azure Functions
builder.AddAzureFunctionsProject<Projects.MyFunctions>("functions")
.WithReference(blobs)
.WithReference(queue);配置 Azure 部署环境
准备发布到 Azure Container Apps 时,在 AppHost 中声明环境:
builder.AddAzureContainerAppEnvironment("env");本地运行时它没有副作用,发布时用于生成 Azure Container Apps 的部署定义。
身份认证
本地开发通常使用开发者凭据,云端使用托管标识。Aspire 的 Azure 客户端集成默认采用 DefaultAzureCredential,因此同一份代码在两种环境下都能工作:
builder.AddAzureBlobClient("uploads");
// 本地:Visual Studio / CLI 登录的开发者身份
// 云端:容器/应用的托管标识本地需要登录
使用 RunAsEmulator() 之外的 Azure 资源(也就是本地真的去连云端资源)时,需要先完成 az login 或使用 Visual Studio 的账号登录,否则会报凭据错误。推荐始终优先使用模拟器/容器版本。
AWS 集成
AWS 官方提供 Aspire.Hosting.AWS 集成,支持共享 SDK 配置、CloudFormation / CDK 资源以及 DynamoDB Local 等本地模拟器。
var builder = DistributedApplication.CreateBuilder(args);
var dynamo = builder.AddAWSDynamoDBLocal("dynamodb");
builder.AddProject<Projects.Api>("api")
.WithReference(dynamo);其设计理念与 Azure 集成一致:AppHost 描述资源与关系,具体 SDK 调用由业务代码负责。
本地模拟器一览
| 云服务 | 本地替代 |
|---|---|
| Azure Storage | Azurite(RunAsEmulator()) |
| Azure Service Bus | Service Bus 模拟器 |
| Azure Cosmos DB | Cosmos DB 模拟器 |
| AWS DynamoDB | DynamoDB Local |
| Redis / 队列等 | 官方容器镜像 |
用参数区分环境
需要「本地跑模拟器、CI 跑真实云资源、生产再换一套」时,可以结合 builder.ExecutionContext 与外部参数来切换。





