Udostępnij przez


Dostosowywanie AspireAzure wdrożeń

(Azure Developer CLIazd) udostępnia zaawansowaną funkcję nazywaną generowaniem infrastruktury, która umożliwia generowanie i dostosowywanie bazowego kodu infrastruktury dla aplikacjiAspire. Ta funkcja jest niezbędna w scenariuszach produkcyjnych, w których potrzebna jest precyzyjna kontrola nad Azure zasobami, konfiguracjami zabezpieczeń i wzorcami wdrażania.

W tym artykule opisano, jak używać azd infra gen:

  • Wygeneruj pliki infrastruktury Bicep z modelu aplikacji Aspire.
  • Dostosowywanie wygenerowanej infrastruktury pod kątem wymagań produkcyjnych.
  • Stosowanie najlepszych rozwiązań w zakresie zabezpieczeń do wygenerowanych zasobów.
  • Zarządzanie infrastrukturą jako kodem przy użyciu odpowiedniej kontroli wersji.

Wymagania wstępne

Do pracy z Aspireprogramem potrzebne są następujące elementy zainstalowane lokalnie:

Aby uzyskać więcej informacji, zobacz Aspire konfigurowanie i narzędzia oraz Aspire zestaw SDK.

Konieczne będzie również Azure Developer CLIzainstalowanie na lokalnym komputerze.

Jak działa generowanie infrastruktury

Generowanie infrastruktury w azd przekształca model aplikacji Aspire w konkretne definicje infrastruktury Azure przy użyciu szablonów Bicep. Ten proces łączy różnicę między orkiestracją w czasie programowania a Aspire infrastrukturą produkcyjną wymaganą w programie Azure.

Po uruchomieniu azd infra gen, interfejsu wiersza polecenia:

  1. Analizuje twój projekt AppHostAspire.
  2. Identyfikuje wszystkie zasoby i ich zależności.
  3. Generuje odpowiednie Azure definicje zasobów w Bicep.
  4. Tworzy pliki konfiguracji pomocnicze na potrzeby wdrożenia.

Korzystanie z generowania infrastruktury

Wywołaj polecenie generowania infrastruktury w rozwiązaniu Aspire :

azd infra gen

To polecenie tworzy infra folder w katalogu projektu AppHost o następującej strukturze:

└───📂 infra
     ├─── abbreviations.json   # Azure resource naming conventions  
     ├─── main.bicep           # Main infrastructure entry point
     ├─── main.parameters.json # Parameter values for deployment
     └─── resources.bicep      # Resource definitions    

Zagadnienia dotyczące środowiska produkcyjnego

Wygenerowana infrastruktura zapewnia solidną podstawę dla wdrożenia, ale środowiska produkcyjne wymagają dodatkowej konfiguracji pod kątem zabezpieczeń, skalowalności i możliwości konserwacji. W tej sekcji omówiono najważniejsze obszary, które należy dostosować podczas przygotowywania do wdrożenia produkcyjnego.

Konfiguracje zabezpieczeń

Podczas przygotowywania do wdrożeń produkcyjnych przejrzyj i rozszerz wygenerowaną infrastrukturę przy użyciu odpowiednich mechanizmów kontroli zabezpieczeń:

Izolacja sieci:

// Example: Configure Container Apps Environment with network restrictions
resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2023-05-01' = {
  name: environmentName
  location: location
  properties: {
    vnetConfiguration: {
      infrastructureSubnetId: subnetId
      internal: true
    }
    workloadProfiles: [
      {
        name: 'Consumption'
        workloadProfileType: 'Consumption'
      }
    ]
  }
}

Zarządzanie tożsamościami i dostępem:

// Example: Configure managed identity with least privilege access
resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: identityName
  location: location
}

// Assign specific roles rather than broad permissions
resource acrPullRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: containerRegistry
  name: guid(containerRegistry.id, managedIdentity.id, 'AcrPull')
  properties: {
    roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') // AcrPull
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

Ustalanie rozmiaru i skalowanie zasobów

Przejrzyj wygenerowane konfiguracje zasobów pod kątem wymagań produkcyjnych:

// Example: Configure appropriate resource limits
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
  name: appName
  location: location
  properties: {
    configuration: {
      ingress: {
        external: true
        targetPort: 8080
        allowInsecure: false // Ensure HTTPS only
      }
    }
    template: {
      containers: [
        {
          name: containerName
          image: image
          resources: {
            cpu: json('1.0')      // Adjust based on load requirements
            memory: '2.0Gi'       // Adjust based on memory needs
          }
        }
      ]
      scale: {
        minReplicas: 2          // Ensure availability
        maxReplicas: 10         // Control costs
        rules: [
          {
            name: 'http-requests'
            http: {
              metadata: {
                concurrentRequests: '100'
              }
            }
          }
        ]
      }
    }
  }
}

Konfiguracje specyficzne dla środowiska

Użyj parametrów do zarządzania ustawieniami specyficznymi dla środowiska:

@description('Environment name (dev, staging, prod)')
param environmentType string = 'dev'

@description('Application tier configuration')
var tierConfigurations = {
  dev: {
    skuName: 'Consumption'
    replicas: 1
  }
  staging: {
    skuName: 'Dedicated'
    replicas: 2
  }
  prod: {
    skuName: 'Dedicated'
    replicas: 3
  }
}

var currentTier = tierConfigurations[environmentType]

Przepływ pracy dostosowywania iteracyjnego

Po wygenerowaniu początkowej infrastruktury ustanów przepływ pracy na potrzeby ciągłego dostosowywania:

  1. Wprowadź zmiany w infrastrukturze w wygenerowanych plikach Bicep.
  2. Wdrożenia testowe w środowiskach deweloperskich.
  3. Kontroluj wersje zmian w swojej infrastrukturze.
  4. Dostosowania dokumentów na potrzeby współpracy zespołowej.

Ważne

Ponowne uruchomienie azd infra gen wygeneruje ponownie pliki i może nadpisać Twoje dostosowania. Zawsze należy kontrolować zmiany wersji i przygotować się do ponownego stosowania dostosowań po rewitalizacji.

Zaawansowane wzorce dostosowywania

Niestandardowe definicje zasobów

Rozszerzanie wygenerowanej infrastruktury przy użyciu dodatkowych Azure zasobów:

// Add Application Insights for monitoring
resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: '${resourceBaseName}-ai'
  location: location
  kind: 'web'
  properties: {
    Application_Type: 'web'
    Flow_Type: 'Redfield'
    Request_Source: 'IbizaWebAppExtensionCreate'
    WorkspaceResourceId: logAnalyticsWorkspace.id
  }
}

// Configure container apps to use Application Insights
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
  // ... other properties
  properties: {
    template: {
      containers: [
        {
          // ... other container properties
          env: [
            {
              name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
              value: applicationInsights.properties.ConnectionString
            }
          ]
        }
      ]
    }
  }
}

Walidacja infrastruktury

Dodaj reguły walidacji, aby zapewnić odpowiednią konfigurację zasobu:

@description('Validates that environment type is supported')
@allowed(['dev', 'staging', 'prod'])
param environmentType string

@description('Validates location is in allowed regions')
@allowed(['eastus', 'westus2', 'northeurope'])
param location string

Najlepsze rozwiązania

  • Kontrola wersji: zawsze zatwierdzaj wygenerowane pliki infrastruktury do kontroli źródła.
  • Separacja środowiska: użyj oddzielnych grup zasobów i konwencji nazewnictwa dla różnych środowisk.
  • Skanowanie zabezpieczeń: zaimplementuj automatyczne skanowanie zabezpieczeń szablonów Bicep.
  • Monitorowanie kosztów: skonfiguruj alerty budżetowe i tagi zasobów na potrzeby śledzenia kosztów.
  • Dokumentacja: zachowaj dokumentację dostosowań i ich uzasadnienie.

Dalsze kroki