You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Aspire中配置本地开发与生产环境的差异化设置

本地与Azure生产环境差异化配置方案

要实现本地开发与Azure Container Apps生产环境的差异化服务配置,核心是利用azd的多环境管理、环境变量注入和基础设施模板定义,不需要改动业务代码。以下分两种场景详细说明:


场景一:本地Redis容器 ↔ 生产Azure Cache for Redis

本地开发配置

  • 在项目根目录的.env.local文件中配置本地Redis连接信息:
    REDIS_CONNECTION_STRING=redis://localhost:6379
    
  • 用docker-compose.yml启动本地Redis容器:
    version: '3.8'
    services:
      redis:
        image: redis:latest
        ports:
          - "6379:6379"
    
  • 应用代码统一读取REDIS_CONNECTION_STRING环境变量即可。

生产环境配置

  1. 添加Azure Cache for Redis资源:在infra目录的Bicep模板中定义Redis缓存资源:
    resource redisCache 'Microsoft.Cache/redis@2023-08-01' = {
      name: '${resourceGroupName}-redis'
      location: location
      properties: {
        sku: {
          name: 'Standard'
          family: 'C'
          capacity: 1
        }
        enableNonSslPort: false
      }
    }
    
  2. 注入生产环境变量:在infra/app.bicep中给Container App配置Redis连接字符串作为环境变量:
    resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
      // 其他容器应用配置
      properties: {
        configuration: {
          secrets: [
            {
              name: 'redis-connection-string'
              value: redisCache.properties.primaryConnectionString
            }
          ]
          environmentVariables: [
            {
              name: 'REDIS_CONNECTION_STRING'
              secretRef: 'redis-connection-string'
            }
          ]
        }
      }
    }
    
  3. 部署生产环境:创建并部署生产环境:
    azd env new prod
    azd up --environment prod
    

场景二:本地Dapr状态存储/消息 ↔ 生产Cosmos DB + Service Bus

本地开发配置

  • 在项目components/local目录下创建Dapr本地组件配置:
    • 状态存储statestore.yaml:
      apiVersion: dapr.io/v1alpha1
      kind: Component
      metadata:
        name: statestore
      spec:
        type: state.redis
        version: v1
        metadata:
        - name: redisHost
          value: localhost:6379
        - name: redisPassword
          value: ""
      
    • 消息订阅pubsub.yaml:
      apiVersion: dapr.io/v1alpha1
      kind: Component
      metadata:
        name: pubsub
      spec:
        type: pubsub.redis
        version: v1
        metadata:
        - name: redisHost
          value: localhost:6379
        - name: redisPassword
          value: ""
      
  • 本地启动应用时加载Dapr组件:
    dapr run --app-id myapp --app-port 3000 --components-path ./components/local npm start
    

生产环境配置

  1. 添加Azure资源:在infra目录的Bicep模板中定义Cosmos DB和Service Bus资源:
    // Cosmos DB 状态存储
    resource cosmosDbAccount 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' = {
      name: '${resourceGroupName}-cosmos'
      location: location
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [{ locationName: location, failoverPriority: 0 }]
      }
    }
    
    resource cosmosDbDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2023-04-15' = {
      parent: cosmosDbAccount
      name: 'statestore-db'
      properties: { resource: { id: 'statestore-db' } }
    }
    
    // Service Bus 消息服务
    resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' = {
      name: '${resourceGroupName}-sb'
      location: location
      sku: { name: 'Standard', tier: 'Standard' }
    }
    
  2. 创建生产Dapr组件:在components/prod目录下配置生产环境组件:
    • 状态存储statestore.yaml:
      apiVersion: dapr.io/v1alpha1
      kind: Component
      metadata:
        name: statestore
      spec:
        type: state.azure.cosmosdb
        version: v1
        metadata:
        - name: url
          value: "${COSMOS_DB_ACCOUNT_URI}"
        - name: database
          value: "statestore-db"
        - name: collection
          value: "statestore-collection"
        - name: masterKey
          value: "${COSMOS_DB_ACCOUNT_KEY}"
      
    • 消息订阅pubsub.yaml:
      apiVersion: dapr.io/v1alpha1
      kind: Component
      metadata:
        name: pubsub
      spec:
        type: pubsub.azure.servicebus
        version: v1
        metadata:
        - name: connectionString
          value: "${SERVICE_BUS_CONNECTION_STRING}"
      
  3. 配置Container App:在infra/app.bicep中挂载生产Dapr组件并注入环境变量:
    resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
      // 其他容器应用配置
      properties: {
        dapr: {
          enabled: true
          appId: 'myapp'
          componentsPath: './components/prod'
        }
        configuration: {
          secrets: [
            { name: 'cosmos-db-uri', value: cosmosDbAccount.properties.documentEndpoint }
            { name: 'cosmos-db-key', value: cosmosDbAccount.listKeys().primaryMasterKey }
            { name: 'service-bus-connection-string', value: listKeys(serviceBusNamespace.id, '2022-10-01-preview').primaryConnectionString }
          ]
          environmentVariables: [
            { name: 'COSMOS_DB_ACCOUNT_URI', secretRef: 'cosmos-db-uri' }
            { name: 'COSMOS_DB_ACCOUNT_KEY', secretRef: 'cosmos-db-key' }
            { name: 'SERVICE_BUS_CONNECTION_STRING', secretRef: 'service-bus-connection-string' }
          ]
        }
      }
    }
    
  4. 部署生产环境:
    azd env new prod
    azd up --environment prod
    

通用原则

  • 所有环境差异通过环境变量和组件配置目录区分,业务代码无需改动
  • 用azd的多环境特性(azd env new)管理不同环境的配置
  • 基础设施资源统一在Bicep模板中定义,实现一键部署

内容的提问来源于stack exchange,提问作者Ebrito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:12:45