Dela via


Anpassa AspireAzure utplaceringar

Azure Developer CLI (azd) innehåller en kraftfull funktion som kallas infrastrukturgenerering som gör att du kan generera och anpassa den underliggande infrastrukturkoden för dina Aspire program. Den här funktionen är viktig för produktionsscenarier där du behöver detaljerad kontroll över Azure resurser, säkerhetskonfigurationer och distributionsmönster.

Den här artikeln beskriver hur du använder azd infra gen för att:

  • Generera Bicep-infrastrukturfiler från din Aspire appmodell.
  • Anpassa genererad infrastruktur för produktionsbehov.
  • Tillämpa metodtips för säkerhet på genererade resurser.
  • Hantera infrastruktur som kod med rätt versionskontroll.

Förutsättningar

För att arbeta med Aspirebehöver du följande installerat lokalt:

För mer information, se Aspire konfiguration och verktyg och Aspire SDK.

Du måste också ha Azure Developer CLI.

Så här fungerar infrastrukturgenerering

Infrastrukturgenerering i azd omvandlar din Aspire appmodell till konkreta Azure infrastrukturdefinitioner med hjälp av Bicep-mallar. Den här processen överbryggar klyftan mellan dirigering av utvecklingstid i Aspire och den produktionsinfrastruktur som krävs i Azure.

När du kör azd infra gen, CLI:

  1. Analyserar ditt Aspire AppHost-projekt.
  2. Identifierar alla resurser och deras beroenden.
  3. Genererar motsvarande Azure resursdefinitioner i Bicep.
  4. Skapar stödkonfigurationsfiler för distribution.

Använda infrastrukturgenerering

Anropa kommandot generera infrastruktur i din Aspire lösning:

azd infra gen

Det här kommandot skapar en infra mapp i din AppHost-projektkatalog med följande struktur:

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

Produktionsöverväganden

Den genererade infrastrukturen ger en stabil grund för distributionen, men produktionsmiljöer kräver ytterligare konfiguration för säkerhet, skalbarhet och underhåll. Det här avsnittet beskriver de viktiga områden som du bör anpassa när du förbereder för produktionsdistribution.

Säkerhetskonfigurationer

När du förbereder för produktionsdistributioner granskar och förbättrar du den genererade infrastrukturen med lämpliga säkerhetskontroller:

Nätverksisolering:

// 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'
      }
    ]
  }
}

Identitets- och åtkomsthantering:

// 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'
  }
}

Resursstorlek och skalning

Granska genererade resurskonfigurationer för produktionskrav:

// 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'
              }
            }
          }
        ]
      }
    }
  }
}

Miljöspecifika konfigurationer

Använd parametrar för att hantera miljöspecifika inställningar:

@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]

Iterativt anpassningsarbetsflöde

När du har genererat den inledande infrastrukturen upprättar du ett arbetsflöde för löpande anpassning:

  1. Gör infrastrukturändringar i de genererade Bicep-filerna.
  2. Testa distributioner i utvecklingsmiljöer.
  3. Versionskontroll av infrastrukturändringar.
  4. Dokumentanpassningar för teamsamarbete.

Viktigt!

Om du kör azd infra gen igen återskapas filer och dina anpassningar kan skrivas över. Alltid versionskontroll dina ändringar och vara beredd att tillämpa anpassningar igen efter regenerering.

Avancerade anpassningsmönster

Anpassade resursdefinitioner

Utöka den genererade infrastrukturen med ytterligare Azure resurser:

// 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
            }
          ]
        }
      ]
    }
  }
}

Infrastrukturverifiering

Lägg till verifieringsregler för att säkerställa korrekt resurskonfiguration:

@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

Metodtips

  • Versionskontroll: Begära alltid in genererade infrastrukturfiler till versionskontrollsystemet.
  • Miljöavgränsning: Använd separata resursgrupper och namngivningskonventioner för olika miljöer.
  • Säkerhetsgenomsökning: Implementera automatisk säkerhetsgenomsökning av Bicep-mallar.
  • Kostnadsövervakning: Konfigurera budgetaviseringar och resurstaggar för kostnadsspårning.
  • Dokumentation: Underhålla dokumentation om anpassningar och deras motivering.

Nästa steg